From 4032f9351aab1f03f54380156c0c36de40b7b777 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Sun, 16 Dec 2012 11:50:04 -0800 Subject: [PATCH 001/525] Add more precision options to to_human(). --- src/js/amount.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/js/amount.js b/src/js/amount.js index 526fd2827..84e3716c7 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -1156,6 +1156,9 @@ Amount.prototype.to_text = function (allow_nan) { * * @param opts Options for formatter. * @param opts.precision {Number} Max. number of digits after decimal point. + * @param opts.min_precision {Number} Min. number of digits after dec. point. + * @param opts.skip_empty_fraction {Boolean} Don't show fraction if it is zero, + * even if min_precision is set. * @param opts.group_sep {Boolean|String} Whether to show a separator every n * digits, if a string, that value will be used as the separator. Default: "," * @param opts.group_width {Number} How many numbers will be grouped together, @@ -1187,8 +1190,16 @@ Amount.prototype.to_human = function (opts) int_part = int_part.replace(/^0*/, ''); fraction_part = fraction_part.replace(/0*$/, ''); - if ("number" === typeof opts.precision) { - fraction_part = fraction_part.slice(0, opts.precision); + if (fraction_part.length || !opts.skip_empty_fraction) { + if ("number" === typeof opts.precision) { + fraction_part = fraction_part.slice(0, opts.precision); + } + + if ("number" === typeof opts.min_precision) { + while (fraction_part.length < opts.min_precision) { + fraction_part += "0"; + } + } } if (opts.group_sep) { From a25a9831f113325e51cadc90f82a7aeb4cda0b29 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 04:36:58 -0800 Subject: [PATCH 002/525] Fee tracking both that scales with load and that doesn't (for the reserve). Get fees as json. Locks for the fee manager. --- src/cpp/ripple/LoadManager.cpp | 90 +++++++++++++++++++++++++++++++--- src/cpp/ripple/LoadManager.h | 23 +++++++-- 2 files changed, 104 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/LoadManager.cpp b/src/cpp/ripple/LoadManager.cpp index f8047af15..7956ca141 100644 --- a/src/cpp/ripple/LoadManager.cpp +++ b/src/cpp/ripple/LoadManager.cpp @@ -131,24 +131,83 @@ bool LoadManager::adjust(LoadSource& source, int credits) const return false; } -uint64 LoadFeeTrack::scaleFee(uint64 fee) +uint64 LoadFeeTrack::mulDiv(uint64 value, uint32 mul, uint32 div) +{ // compute (value)*(mul)/(div) - avoid overflow but keep precision + static uint64 boundary = (0x00000000FFFFFFFF); + if (value > boundary) // Large value, avoid overflow + return (value / div) * mul; + else // Normal value, preserve accuracy + return (value * mul) / div; +} + +uint64 LoadFeeTrack::scaleFeeLoad(uint64 fee) { static uint64 midrange(0x00000000FFFFFFFF); - int factor = (mLocalTxnLoadFee > mRemoteTxnLoadFee) ? mLocalTxnLoadFee : mRemoteTxnLoadFee; + bool big = (fee > midrange); - if (fee > midrange) // large fee, divide first - return (fee / lftNormalFee) * factor; - else // small fee, multiply first - return (fee * factor) / lftNormalFee; + { + boost::mutex::scoped_lock sl(mLock); + + if (big) // big fee, divide first to avoid overflow + fee /= mBaseFee; + else // normal fee, multiply first for accuracy + fee *= mBaseRef; + + fee = mulDiv(fee, std::max(mLocalTxnLoadFee, mRemoteTxnLoadFee), lftNormalFee); + + if (big) // Fee was big to start, must now multiply + fee *= mBaseRef; + else // Fee was small to start, mst now divide + fee /= mBaseFee; + } + + return fee; +} + +uint64 LoadFeeTrack::scaleFeeBase(uint64 fee) +{ + + { + boost::mutex::scoped_lock sl(mLock); + fee = mulDiv(fee, mBaseRef, mBaseFee); + } + + return fee; +} + +uint32 LoadFeeTrack::getBaseFee() +{ + boost::mutex::scoped_lock sl(mLock); + return mBaseFee; +} + +uint32 LoadFeeTrack::getRemoteFee() +{ + boost::mutex::scoped_lock sl(mLock); + return mRemoteTxnLoadFee; +} + +uint32 LoadFeeTrack::getLocalFee() +{ + boost::mutex::scoped_lock sl(mLock); + return mLocalTxnLoadFee; +} + +uint32 LoadFeeTrack::getBaseRef() +{ + boost::mutex::scoped_lock sl(mLock); + return mBaseRef; } void LoadFeeTrack::setRemoteFee(uint32 f) { + boost::mutex::scoped_lock sl(mLock); mRemoteTxnLoadFee = f; } void LoadFeeTrack::raiseLocalFee() { + boost::mutex::scoped_lock sl(mLock); if (mLocalTxnLoadFee < mLocalTxnLoadFee) // make sure this fee takes effect mLocalTxnLoadFee = mLocalTxnLoadFee; @@ -160,10 +219,29 @@ void LoadFeeTrack::raiseLocalFee() void LoadFeeTrack::lowerLocalFee() { + boost::mutex::scoped_lock sl(mLock); mLocalTxnLoadFee -= (mLocalTxnLoadFee / lftFeeDecFraction ); // reduce by 1/16th if (mLocalTxnLoadFee < lftNormalFee) mLocalTxnLoadFee = lftNormalFee; } +Json::Value LoadFeeTrack::getJson(int) +{ + Json::Value j(Json::objectValue); + + { + boost::mutex::scoped_lock sl(mLock); + + // base_fee = The cost to send a "reference" transaction under no load, in millionths of a Ripple + j["base_fee"] = Json::Value::UInt(mBaseFee); + + // load_fee = The cost to send a "reference" transaction now, in millionths of a Ripple + j["load_fee"] = Json::Value::UInt( + mulDiv(mBaseFee, std::max(mLocalTxnLoadFee, mRemoteTxnLoadFee), lftNormalFee)); + } + + return j; +} + // vim:ts=4 diff --git a/src/cpp/ripple/LoadManager.h b/src/cpp/ripple/LoadManager.h index 71eb79d39..c96a8b447 100644 --- a/src/cpp/ripple/LoadManager.h +++ b/src/cpp/ripple/LoadManager.h @@ -1,10 +1,12 @@ -#ifndef LOADSOURCE__H -#define LOADSOURCE__H +#ifndef LOADMANAGER__H +#define LOADMANAGER__H #include #include +#include "../json/value.h" + #include "types.h" enum LoadType @@ -121,15 +123,30 @@ protected: static const int lftFeeDecFraction = 16; // decrease fee by 1/16 static const int lftFeeMax = lftNormalFee * 1000000; + uint32 mBaseRef; // The number of fee units a reference transaction costs + uint32 mBaseFee; // The cost in millionths of a ripple of a reference transaction uint32 mLocalTxnLoadFee; // Scale factor, lftNormalFee = normal fee uint32 mRemoteTxnLoadFee; // Scale factor, lftNormalFee = normal fee + boost::mutex mLock; + + static uint64 mulDiv(uint64 value, uint32 mul, uint32 div); + public: LoadFeeTrack() : mLocalTxnLoadFee(lftNormalFee), mRemoteTxnLoadFee(lftNormalFee) { ; } - uint64 scaleFee(uint64 fee); + uint64 scaleFeeBase(uint64 fee); // Scale from fee units to millionths of a ripple + uint64 scaleFeeLoad(uint64 fee); // Scale using load as well as base rate + uint32 getRemoteFee(); + uint32 getLocalFee(); + uint32 getBaseRef(); + uint32 getBaseFee(); + + Json::Value getJson(int); + + void setBaseFee(uint32); void setRemoteFee(uint32); void raiseLocalFee(); void lowerLocalFee(); From 30ba5c12fd0878835401a13944e6640bb94146a3 Mon Sep 17 00:00:00 2001 From: Jcar Date: Mon, 17 Dec 2012 10:28:01 -0800 Subject: [PATCH 003/525] test commit 12-17-12 --- testcommit.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 testcommit.txt diff --git a/testcommit.txt b/testcommit.txt new file mode 100644 index 000000000..c05ac2bc0 --- /dev/null +++ b/testcommit.txt @@ -0,0 +1 @@ +test 12-17-12 From f868fb3d23c068de526e786b788baa851df6f822 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 11:41:07 -0800 Subject: [PATCH 004/525] Maybe fix the build for Jeff. --- src/cpp/ripple/ParameterTable.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/ParameterTable.cpp b/src/cpp/ripple/ParameterTable.cpp index cb61a064b..8a5dd7ed5 100644 --- a/src/cpp/ripple/ParameterTable.cpp +++ b/src/cpp/ripple/ParameterTable.cpp @@ -81,8 +81,8 @@ bool ParameterNode::addNode(const std::string& name, Parameter::ref node) Json::Value ParameterNode::getValue(int i) const { Json::Value v(Json::objectValue); - typedef std::pair string_ref_pair; - BOOST_FOREACH(const string_ref_pair& it, mChildren) + typedef std::pair string_ref_pair; + BOOST_FOREACH(string_ref_pair it, mChildren) { v[it.first] = it.second->getValue(i); } @@ -95,8 +95,8 @@ bool ParameterNode::setValue(const Json::Value& value, Json::Value& error) error["error"] = "Cannot end on an inner node"; Json::Value nodes(Json::arrayValue); - typedef std::pair string_ref_pair; - BOOST_FOREACH(const string_ref_pair& it, mChildren) + typedef std::pair string_ref_pair; + BOOST_FOREACH(string_ref_pair it, mChildren) { nodes.append(it.first); } From e9f9406cf93b0ad2fa5351f02e0b4f3e5e3f25b2 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 11:48:22 -0800 Subject: [PATCH 005/525] Try it again. --- src/cpp/ripple/ParameterTable.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/ParameterTable.cpp b/src/cpp/ripple/ParameterTable.cpp index 8a5dd7ed5..cb61a064b 100644 --- a/src/cpp/ripple/ParameterTable.cpp +++ b/src/cpp/ripple/ParameterTable.cpp @@ -81,8 +81,8 @@ bool ParameterNode::addNode(const std::string& name, Parameter::ref node) Json::Value ParameterNode::getValue(int i) const { Json::Value v(Json::objectValue); - typedef std::pair string_ref_pair; - BOOST_FOREACH(string_ref_pair it, mChildren) + typedef std::pair string_ref_pair; + BOOST_FOREACH(const string_ref_pair& it, mChildren) { v[it.first] = it.second->getValue(i); } @@ -95,8 +95,8 @@ bool ParameterNode::setValue(const Json::Value& value, Json::Value& error) error["error"] = "Cannot end on an inner node"; Json::Value nodes(Json::arrayValue); - typedef std::pair string_ref_pair; - BOOST_FOREACH(string_ref_pair it, mChildren) + typedef std::pair string_ref_pair; + BOOST_FOREACH(const string_ref_pair& it, mChildren) { nodes.append(it.first); } From 293214155f7758855052c2564594c9847b6c5f3f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 11:51:43 -0800 Subject: [PATCH 006/525] One last try. --- src/cpp/ripple/ParameterTable.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/ParameterTable.cpp b/src/cpp/ripple/ParameterTable.cpp index cb61a064b..52860ce20 100644 --- a/src/cpp/ripple/ParameterTable.cpp +++ b/src/cpp/ripple/ParameterTable.cpp @@ -82,7 +82,7 @@ Json::Value ParameterNode::getValue(int i) const { Json::Value v(Json::objectValue); typedef std::pair string_ref_pair; - BOOST_FOREACH(const string_ref_pair& it, mChildren) + BOOST_FOREACH(string_ref_pair it, mChildren) { v[it.first] = it.second->getValue(i); } @@ -96,7 +96,7 @@ bool ParameterNode::setValue(const Json::Value& value, Json::Value& error) Json::Value nodes(Json::arrayValue); typedef std::pair string_ref_pair; - BOOST_FOREACH(const string_ref_pair& it, mChildren) + BOOST_FOREACH(string_ref_pair it, mChildren) { nodes.append(it.first); } From 159ab7717b162bfd458a99afce25bd34c0318667 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 11:56:43 -0800 Subject: [PATCH 007/525] I fixed it for real this time. --- src/cpp/ripple/ParameterTable.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/ParameterTable.cpp b/src/cpp/ripple/ParameterTable.cpp index 52860ce20..dadfc3381 100644 --- a/src/cpp/ripple/ParameterTable.cpp +++ b/src/cpp/ripple/ParameterTable.cpp @@ -81,7 +81,7 @@ bool ParameterNode::addNode(const std::string& name, Parameter::ref node) Json::Value ParameterNode::getValue(int i) const { Json::Value v(Json::objectValue); - typedef std::pair string_ref_pair; + typedef std::pair string_ref_pair; BOOST_FOREACH(string_ref_pair it, mChildren) { v[it.first] = it.second->getValue(i); @@ -95,7 +95,7 @@ bool ParameterNode::setValue(const Json::Value& value, Json::Value& error) error["error"] = "Cannot end on an inner node"; Json::Value nodes(Json::arrayValue); - typedef std::pair string_ref_pair; + typedef std::pair string_ref_pair; BOOST_FOREACH(string_ref_pair it, mChildren) { nodes.append(it.first); From 2997bde36233911b6d549484390a2439fd329347 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 17 Dec 2012 17:33:02 -0800 Subject: [PATCH 008/525] JS: Fix amount parsing to accept negative exponents. --- src/js/amount.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/amount.js b/src/js/amount.js index 84e3716c7..97b019002 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -1025,7 +1025,7 @@ Amount.prototype.parse_value = function (j) { else if ('string' === typeof j) { var i = j.match(/^(-?)(\d+)$/); var d = !i && j.match(/^(-?)(\d+)\.(\d*)$/); - var e = !e && j.match(/^(-?)(\d+)e(\d+)$/); + var e = !e && j.match(/^(-?)(\d+)e(-?\d+)$/); if (e) { // e notation From 038adf2a3411bb6a8b8686f2119e3fce67392a4d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 18:09:47 -0800 Subject: [PATCH 009/525] Mark two FIXMEs in code that handles fees wrongly. Work on doing fees correctly. --- src/cpp/ripple/Application.cpp | 2 +- src/cpp/ripple/Application.h | 3 +++ src/cpp/ripple/Config.cpp | 10 ++++++--- src/cpp/ripple/Config.h | 9 ++++---- src/cpp/ripple/Interpreter.cpp | 2 +- src/cpp/ripple/LoadManager.cpp | 33 ++++++++++++++++++++++++++++ src/cpp/ripple/LoadManager.h | 4 +++- src/cpp/ripple/PaymentTransactor.cpp | 6 ++--- 8 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index d8b7b8fa3..700f0b2ef 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -40,7 +40,7 @@ DatabaseCon::~DatabaseCon() Application::Application() : mIOWork(mIOService), mAuxWork(mAuxService), mUNL(mIOService), mNetOps(mIOService, &mLedgerMaster), mTempNodeCache("NodeCache", 16384, 90), mHashedObjectStore(16384, 300), - mSNTPClient(mAuxService), mRPCHandler(&mNetOps), + mSNTPClient(mAuxService), mRPCHandler(&mNetOps), mFeeTrack(theConfig.TRANSACTION_FEE_BASE, theConfig.FEE_DEFAULT), mRpcDB(NULL), mTxnDB(NULL), mLedgerDB(NULL), mWalletDB(NULL), mHashNodeDB(NULL), mNetNodeDB(NULL), mConnectionPool(mIOService), mPeerDoor(NULL), mRPCDoor(NULL), mWSPublicDoor(NULL), mWSPrivateDoor(NULL), mSweepTimer(mAuxService) diff --git a/src/cpp/ripple/Application.h b/src/cpp/ripple/Application.h index 4a2b16e91..c4af9de38 100644 --- a/src/cpp/ripple/Application.h +++ b/src/cpp/ripple/Application.h @@ -63,6 +63,7 @@ class Application RPCHandler mRPCHandler; ProofOfWorkGenerator mPOWGen; LoadManager mLoadMgr; + LoadFeeTrack mFeeTrack; DatabaseCon *mRpcDB, *mTxnDB, *mLedgerDB, *mWalletDB, *mHashNodeDB, *mNetNodeDB; @@ -117,6 +118,8 @@ public: bool isNewFlag(const uint256& s, int f) { return mSuppressions.setFlag(s, f); } bool running() { return mTxnDB != NULL; } bool getSystemTimeOffset(int& offset) { return mSNTPClient.getOffset(offset); } + void scaleFeeBase(uint64 fee) { return mFeeTrack.scaleFeeBase(fee); } + void scaleFeeLoad(uint64 fee) { return mFeeTrack.scaleFeeLoad(fee); } DatabaseCon* getRpcDB() { return mRpcDB; } DatabaseCon* getTxnDB() { return mTxnDB; } diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index 4fe97a4b8..d60cbc6f9 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -130,6 +130,12 @@ void Config::setup(const std::string& strConf, bool bQuiet) // std::cerr << "CONFIG DIR: " << CONFIG_DIR << std::endl; // std::cerr << "DATA DIR: " << DATA_DIR << std::endl; + // Update default values + load(); +} + +Config::Config() +{ // // Defaults // @@ -159,7 +165,7 @@ void Config::setup(const std::string& strConf, bool bQuiet) PEER_PRIVATE = false; - TRANSACTION_FEE_BASE = 1000; + TRANSACTION_FEE_BASE = DEFAULT_FEE_DEFAULT; NETWORK_QUORUM = 0; // Don't need to see other nodes VALIDATION_QUORUM = 1; // Only need one node to vouch @@ -179,8 +185,6 @@ void Config::setup(const std::string& strConf, bool bQuiet) RUN_STANDALONE = false; START_UP = NORMAL; - - load(); } void Config::load() diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index 570c766bb..ca575ddf1 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -64,7 +64,7 @@ public: // Network parameters int NETWORK_START_TIME; // The Unix time we start ledger 0. - int TRANSACTION_FEE_BASE; + int TRANSACTION_FEE_BASE; // The number of fee units a reference transaction costs int LEDGER_SECONDS; int LEDGER_PROPOSAL_DELAY_SECONDS; int LEDGER_AVALANCHE_SECONDS; @@ -106,10 +106,10 @@ public: // Validation RippleAddress VALIDATION_SEED, VALIDATION_PUB, VALIDATION_PRIV; - // Fee schedule + // Fee schedule (All below values are in fee units) uint64 FEE_DEFAULT; // Default fee. - uint64 FEE_ACCOUNT_RESERVE; // Amount of XRP not allowed to send. - uint64 FEE_OWNER_RESERVE; // Amount of XRP not allowed to send per owner entry. + uint64 FEE_ACCOUNT_RESERVE; // Amount of units not allowed to send. + uint64 FEE_OWNER_RESERVE; // Amount of units not allowed to send per owner entry. uint64 FEE_NICKNAME_CREATE; // Fee to create a nickname. uint64 FEE_OFFER; // Rate per day. int FEE_CONTRACT_OPERATION; // fee for each contract operation @@ -120,6 +120,7 @@ public: // Client behavior int ACCOUNT_PROBE_MAX; // How far to scan for accounts. + Config(); void setup(const std::string& strConf, bool bQuiet); void load(); }; diff --git a/src/cpp/ripple/Interpreter.cpp b/src/cpp/ripple/Interpreter.cpp index 6fce0827b..4cde286c5 100644 --- a/src/cpp/ripple/Interpreter.cpp +++ b/src/cpp/ripple/Interpreter.cpp @@ -129,7 +129,7 @@ TER Interpreter::interpret(Contract* contract,const SerializedTransaction& txn,s return(temMALFORMED); // TODO: is this actually what we want to do? } - mTotalFee += mFunctionTable[ fun ]->getFee(); + mTotalFee += mFunctionTable[ fun ]->getFee(); // FIXME: You can't use fees this way, there's no consensus if(mTotalFee>txn.getTransactionFee().getNValue()) { // TODO: log diff --git a/src/cpp/ripple/LoadManager.cpp b/src/cpp/ripple/LoadManager.cpp index 7956ca141..a538204a5 100644 --- a/src/cpp/ripple/LoadManager.cpp +++ b/src/cpp/ripple/LoadManager.cpp @@ -1,5 +1,12 @@ #include "LoadManager.h" +#include + +#include "Log.h" +#include "Config.h" + +SETUP_LOG(); + LoadManager::LoadManager(int creditRate, int creditLimit, int debitWarn, int debitLimit) : mCreditRate(creditRate), mCreditLimit(creditLimit), mDebitWarn(debitWarn), mDebitLimit(debitLimit), mCosts(LT_MAX) @@ -244,4 +251,30 @@ Json::Value LoadFeeTrack::getJson(int) return j; } +BOOST_AUTO_TEST_SUITE(LoadManager_test) + +BOOST_AUTO_TEST_CASE(LoadFeeTrack_test) +{ + cLog(lsDEBUG) << "Running load fee track test"; + + Config d; // get a default configuration object + LoadFeeTrack l(d.TRANSACTION_FEE_BASE, d.FEE_DEFAULT); + + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(10000), 10000); + BOOST_REQUIRE_EQUAL(l.scaleFeeLoad(10000), 10000); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(1), 1); + BOOST_REQUIRE_EQUAL(l.scaleFeeLoad(1), 1); + + // Check new default fee values give same fees as old defaults + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_DEFAULT), 10); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_ACCOUNT_RESERVE), 200 * SYSTEM_CURRENCY_PARTS); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_OWNER_RESERVE), 50 * SYSTEM_CURRENCY_PARTS); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_NICKNAME_CREATE), 1000); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_OFFER), 10); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_CONTRACT_OPERATION), 1); + +} + +BOOST_AUTO_TEST_SUITE_END() + // vim:ts=4 diff --git a/src/cpp/ripple/LoadManager.h b/src/cpp/ripple/LoadManager.h index c96a8b447..f6f18274e 100644 --- a/src/cpp/ripple/LoadManager.h +++ b/src/cpp/ripple/LoadManager.h @@ -134,7 +134,9 @@ protected: public: - LoadFeeTrack() : mLocalTxnLoadFee(lftNormalFee), mRemoteTxnLoadFee(lftNormalFee) { ; } + LoadFeeTrack(uint32 baseRef, uint32 baseFee) : mBaseRef(baseRef), mBaseFee(baseFee), + mLocalTxnLoadFee(lftNormalFee), mRemoteTxnLoadFee(lftNormalFee) + { ; } uint64 scaleFeeBase(uint64 fee); // Scale from fee units to millionths of a ripple uint64 scaleFeeLoad(uint64 fee); // Scale using load as well as base rate diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index 50e48501c..bd6100e10 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -83,7 +83,7 @@ TER PaymentTransactor::doApply() return terNO_DST; } else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote. - && saDstAmount.getNValue() < theConfig.FEE_ACCOUNT_RESERVE) // Reserve is not scaled by fee. + && saDstAmount.getNValue() < theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE)) // Reserve is not scaled by load. { Log(lsINFO) << "doPayment: Delay transaction: Destination account does not exist. Insufficent payment to create account."; @@ -138,7 +138,7 @@ TER PaymentTransactor::doApply() const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); - const uint64 uReserve = theConfig.FEE_ACCOUNT_RESERVE+uOwnerCount*theConfig.FEE_OWNER_RESERVE; + const uint64 uReserve = theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE + uOwnerCount * theConfig.FEE_OWNER_RESERVE); // Make sure have enough reserve to send. if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote. @@ -157,7 +157,7 @@ TER PaymentTransactor::doApply() // re-arm the password change fee if we can and need to if ( (sleDst->getFlags() & lsfPasswordSpent) && - (saDstAmount > theConfig.FEE_DEFAULT) ) + (saDstAmount > theConfig.FEE_DEFAULT) ) // FIXME: Can't access FEE_DEFAULT here { sleDst->setFieldAmount(sfBalance, sleDst->getFieldAmount(sfBalance) + saDstAmount-theConfig.FEE_DEFAULT); sleDst->clearFlag(lsfPasswordSpent); From a8dfc0332feef413c6cb04c8d864f376dc1f05bb Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 18:12:07 -0800 Subject: [PATCH 010/525] Fix breakage. --- src/cpp/ripple/Application.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Application.h b/src/cpp/ripple/Application.h index c4af9de38..b0e58d209 100644 --- a/src/cpp/ripple/Application.h +++ b/src/cpp/ripple/Application.h @@ -118,8 +118,8 @@ public: bool isNewFlag(const uint256& s, int f) { return mSuppressions.setFlag(s, f); } bool running() { return mTxnDB != NULL; } bool getSystemTimeOffset(int& offset) { return mSNTPClient.getOffset(offset); } - void scaleFeeBase(uint64 fee) { return mFeeTrack.scaleFeeBase(fee); } - void scaleFeeLoad(uint64 fee) { return mFeeTrack.scaleFeeLoad(fee); } + uint64 scaleFeeBase(uint64 fee) { return mFeeTrack.scaleFeeBase(fee); } + uint64 scaleFeeLoad(uint64 fee) { return mFeeTrack.scaleFeeLoad(fee); } DatabaseCon* getRpcDB() { return mRpcDB; } DatabaseCon* getTxnDB() { return mTxnDB; } From a88f24ca6d32f79659c52a978fc14efb17722951 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 18:13:19 -0800 Subject: [PATCH 011/525] Make it compile. --- src/cpp/ripple/PaymentTransactor.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index bd6100e10..c7404c625 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -1,6 +1,7 @@ #include "PaymentTransactor.h" #include "Config.h" #include "RippleCalc.h" +#include "Application.h" #define RIPPLE_PATHS_MAX 3 From 33af423a3074553914cf05b249423fa1140f9680 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 18:19:42 -0800 Subject: [PATCH 012/525] Mark a critical FIXME. --- src/cpp/ripple/PaymentTransactor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index c7404c625..7facfa92c 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -159,7 +159,7 @@ TER PaymentTransactor::doApply() // re-arm the password change fee if we can and need to if ( (sleDst->getFlags() & lsfPasswordSpent) && (saDstAmount > theConfig.FEE_DEFAULT) ) // FIXME: Can't access FEE_DEFAULT here - { + { // FIXME: The line below is disastrous, it leaks XRP sleDst->setFieldAmount(sfBalance, sleDst->getFieldAmount(sfBalance) + saDstAmount-theConfig.FEE_DEFAULT); sleDst->clearFlag(lsfPasswordSpent); } From 20d429cd7bff6091856e578a709a63a5d6b96c44 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 17 Dec 2012 18:27:02 -0800 Subject: [PATCH 013/525] Fix password rearming. --- src/cpp/ripple/PaymentTransactor.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index 7facfa92c..a7350c263 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -157,16 +157,10 @@ TER PaymentTransactor::doApply() mTxnAccount->setFieldAmount(sfBalance, saSrcXRPBalance - saDstAmount); // re-arm the password change fee if we can and need to - if ( (sleDst->getFlags() & lsfPasswordSpent) && - (saDstAmount > theConfig.FEE_DEFAULT) ) // FIXME: Can't access FEE_DEFAULT here - { // FIXME: The line below is disastrous, it leaks XRP - sleDst->setFieldAmount(sfBalance, sleDst->getFieldAmount(sfBalance) + saDstAmount-theConfig.FEE_DEFAULT); + if ((sleDst->getFlags() & lsfPasswordSpent) sleDst->clearFlag(lsfPasswordSpent); - } - else - { - sleDst->setFieldAmount(sfBalance, sleDst->getFieldAmount(sfBalance) + saDstAmount); - } + + sleDst->setFieldAmount(sfBalance, sleDst->getFieldAmount(sfBalance) + saDstAmount); terResult = tesSUCCESS; } From 690f2dac6a38f03e33c9e2a32aa44d3f9dea78a7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 18:27:46 -0800 Subject: [PATCH 014/525] Tiny cleanup. --- src/cpp/ripple/PaymentTransactor.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index a7350c263..55116fe25 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -155,13 +155,12 @@ TER PaymentTransactor::doApply() else { mTxnAccount->setFieldAmount(sfBalance, saSrcXRPBalance - saDstAmount); + sleDst->setFieldAmount(sfBalance, sleDst->getFieldAmount(sfBalance) + saDstAmount); // re-arm the password change fee if we can and need to if ((sleDst->getFlags() & lsfPasswordSpent) sleDst->clearFlag(lsfPasswordSpent); - sleDst->setFieldAmount(sfBalance, sleDst->getFieldAmount(sfBalance) + saDstAmount); - terResult = tesSUCCESS; } } From 961ac4690ee3ae0eec9250b6ff1a1e0233a5f766 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 20:05:54 -0800 Subject: [PATCH 015/525] Typo. --- src/cpp/ripple/PaymentTransactor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index 55116fe25..c4d8a7c6f 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -158,7 +158,7 @@ TER PaymentTransactor::doApply() sleDst->setFieldAmount(sfBalance, sleDst->getFieldAmount(sfBalance) + saDstAmount); // re-arm the password change fee if we can and need to - if ((sleDst->getFlags() & lsfPasswordSpent) + if ((sleDst->getFlags() & lsfPasswordSpent)) sleDst->clearFlag(lsfPasswordSpent); terResult = tesSUCCESS; From 2a06686b7cef82b8ee3afc54acbfde3621fba349 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 20:20:24 -0800 Subject: [PATCH 016/525] Round one of fixes to avoid ridiculous numbers of spurious copy constructor and destructor calls. Most of these fixes involve calls to BOOST_FOREACH to iterate over a map or unordered_map where the iterator type didn't perfectly match the internal type, so a reference into the map couldn't be created and a new value/content pair had to be created for each iteration. --- src/cpp/ripple/ConnectionPool.cpp | 8 ++++---- src/cpp/ripple/ConnectionPool.h | 2 ++ src/cpp/ripple/FeatureTable.cpp | 2 +- src/cpp/ripple/FieldNames.cpp | 2 +- src/cpp/ripple/JobQueue.cpp | 4 ++-- src/cpp/ripple/LedgerConsensus.cpp | 8 ++++---- src/cpp/ripple/LedgerEntrySet.cpp | 4 ++-- src/cpp/ripple/NetworkOPs.cpp | 6 +++--- src/cpp/ripple/ParameterTable.cpp | 8 ++++---- src/cpp/ripple/RPCHandler.cpp | 2 +- src/cpp/ripple/SerializedObject.cpp | 2 +- src/cpp/ripple/TransactionEngine.cpp | 2 +- src/cpp/ripple/ValidationCollection.cpp | 2 +- src/cpp/ripple/rpc.cpp | 4 ++-- 14 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/cpp/ripple/ConnectionPool.cpp b/src/cpp/ripple/ConnectionPool.cpp index 6de593b2b..fad45ca0f 100644 --- a/src/cpp/ripple/ConnectionPool.cpp +++ b/src/cpp/ripple/ConnectionPool.cpp @@ -140,7 +140,7 @@ bool ConnectionPool::peerAvailable(std::string& strIp, int& iPort) vstrIpPort.reserve(mIpMap.size()); - BOOST_FOREACH(pipPeer ipPeer, mIpMap) + BOOST_FOREACH(const vtPeer& ipPeer, mIpMap) { const std::string& strIp = ipPeer.first.first; int iPort = ipPeer.first.second; @@ -251,7 +251,7 @@ int ConnectionPool::relayMessage(Peer* fromPeer, const PackedMessage::pointer& m int sentTo = 0; boost::mutex::scoped_lock sl(mPeerLock); - BOOST_FOREACH(naPeer pair, mConnectedMap) + BOOST_FOREACH(const vtConMap& pair, mConnectedMap) { Peer::ref peer = pair.second; if (!peer) @@ -270,7 +270,7 @@ void ConnectionPool::relayMessageBut(const std::set& fromPeers, const Pa { // Relay message to all but the specified peers boost::mutex::scoped_lock sl(mPeerLock); - BOOST_FOREACH(naPeer pair, mConnectedMap) + BOOST_FOREACH(const vtConMap& pair, mConnectedMap) { Peer::ref peer = pair.second; if (peer->isConnected() && (fromPeers.count(peer->getPeerId()) == 0)) @@ -388,7 +388,7 @@ std::vector ConnectionPool::getPeerVector() ret.reserve(mConnectedMap.size()); - BOOST_FOREACH(naPeer pair, mConnectedMap) + BOOST_FOREACH(const vtConMap& pair, mConnectedMap) { assert(!!pair.second); ret.push_back(pair.second); diff --git a/src/cpp/ripple/ConnectionPool.h b/src/cpp/ripple/ConnectionPool.h index dbc6cd8b2..e02caf198 100644 --- a/src/cpp/ripple/ConnectionPool.h +++ b/src/cpp/ripple/ConnectionPool.h @@ -21,6 +21,7 @@ private: typedef std::pair naPeer; typedef std::pair pipPeer; + typedef std::map::value_type vtPeer; // Peers we are connecting with and non-thin peers we are connected to. // Only peers we know the connection ip for are listed. @@ -31,6 +32,7 @@ private: // Non-thin peers which we are connected to. // Peers we have the public key for. + typedef boost::unordered_map::value_type vtConMap; boost::unordered_map mConnectedMap; // Connections with have a 64-bit identifier diff --git a/src/cpp/ripple/FeatureTable.cpp b/src/cpp/ripple/FeatureTable.cpp index 984be60d0..a014c81e9 100644 --- a/src/cpp/ripple/FeatureTable.cpp +++ b/src/cpp/ripple/FeatureTable.cpp @@ -128,7 +128,7 @@ void FeatureTable::reportValidations(const FeatureSet& set) return; int threshold = (set.mTrustedValidations * mMajorityFraction) / 256; - typedef std::pair u256_int_pair; + typedef std::map::value_type u256_int_pair; boost::mutex::scoped_lock sl(mMutex); diff --git a/src/cpp/ripple/FieldNames.cpp b/src/cpp/ripple/FieldNames.cpp index 590f85d6b..6bd34da29 100644 --- a/src/cpp/ripple/FieldNames.cpp +++ b/src/cpp/ripple/FieldNames.cpp @@ -111,7 +111,7 @@ std::string SField::getName() const SField::ref SField::getField(const std::string& fieldName) { // OPTIMIZEME me with a map. CHECKME this is case sensitive boost::mutex::scoped_lock sl(mapMutex); - typedef std::pair int_sfref_pair; + typedef std::map::value_type int_sfref_pair; BOOST_FOREACH(const int_sfref_pair& fieldPair, codeToField) { if (fieldPair.second->fieldName == fieldName) diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index 44ed3bcee..1b236295b 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -111,7 +111,7 @@ int JobQueue::getJobCountGE(JobType t) boost::mutex::scoped_lock sl(mJobLock); - typedef std::pair jt_int_pair; + typedef std::map::value_type jt_int_pair; BOOST_FOREACH(const jt_int_pair& it, mJobCounts) if (it.first >= t) ret += it.second; @@ -125,7 +125,7 @@ std::vector< std::pair > JobQueue::getJobCounts() boost::mutex::scoped_lock sl(mJobLock); ret.reserve(mJobCounts.size()); - typedef std::pair jt_int_pair; + typedef std::map::value_type jt_int_pair; BOOST_FOREACH(const jt_int_pair& it, mJobCounts) ret.push_back(it); diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index bf92b700c..a06edc4ad 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -20,8 +20,8 @@ #define LC_DEBUG -typedef std::pair u160_prop_pair; -typedef std::pair u256_lct_pair; +typedef std::map::value_type u160_prop_pair; +typedef std::map::value_type u256_lct_pair; SETUP_LOG(); DECLARE_INSTANCE(LedgerConsensus); @@ -348,7 +348,7 @@ void LedgerConsensus::checkLCL() boost::unordered_map vals = theApp->getValidations().getCurrentValidations(favoredLedger); - typedef std::pair u256_cvc_pair; + typedef std::map::value_type u256_cvc_pair; BOOST_FOREACH(u256_cvc_pair& it, vals) if (it.second.first > netLgrCount) { @@ -471,7 +471,7 @@ void LedgerConsensus::createDisputes(SHAMap::ref m1, SHAMap::ref m2) SHAMap::SHAMapDiff differences; m1->compare(m2, differences, 16384); - typedef std::pair u256_diff_pair; + typedef std::map::value_type u256_diff_pair; BOOST_FOREACH (u256_diff_pair& pos, differences) { // create disputed transactions (from the ledger that has them) if (pos.second.first) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 0d335848a..e1774f1a9 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -366,7 +366,7 @@ void LedgerEntrySet::calcRawMeta(Serializer& s, TER result, uint32 index) // Entries modified only as a result of building the transaction metadata boost::unordered_map newMod; - typedef std::pair u256_LES_pair; + typedef std::map::value_type u256_LES_pair; BOOST_FOREACH(u256_LES_pair& it, mEntries) { SField::ptr type = &sfGeneric; @@ -479,7 +479,7 @@ void LedgerEntrySet::calcRawMeta(Serializer& s, TER result, uint32 index) } // add any new modified nodes to the modification set - typedef std::pair u256_sle_pair; + typedef std::map::value_type u256_sle_pair; BOOST_FOREACH(u256_sle_pair& it, newMod) entryModify(it.second); diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 253e261b2..e6a4c5833 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -570,7 +570,7 @@ bool NetworkOPs::checkLastClosedLedger(const std::vector& peerLis { boost::unordered_map current = theApp->getValidations().getCurrentValidations(closedLedger); - typedef std::pair u256_cvc_pair; + typedef std::map::value_type u256_cvc_pair; BOOST_FOREACH(u256_cvc_pair& it, current) { ValidationCount& vc = ledgers[it.first]; @@ -1152,8 +1152,8 @@ void NetworkOPs::pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTr if (!mSubAccount.empty() || (!mSubRTAccount.empty()) ) { - typedef const std::pair AccountPair; - BOOST_FOREACH(AccountPair& affectedAccount, getAffectedAccounts(stTxn)) + typedef std::map::value_type AccountPair; + BOOST_FOREACH(const AccountPair& affectedAccount, getAffectedAccounts(stTxn)) { subInfoMapIterator simiIt = mSubRTAccount.find(affectedAccount.first.getAccountID()); diff --git a/src/cpp/ripple/ParameterTable.cpp b/src/cpp/ripple/ParameterTable.cpp index dadfc3381..200fc1d60 100644 --- a/src/cpp/ripple/ParameterTable.cpp +++ b/src/cpp/ripple/ParameterTable.cpp @@ -81,8 +81,8 @@ bool ParameterNode::addNode(const std::string& name, Parameter::ref node) Json::Value ParameterNode::getValue(int i) const { Json::Value v(Json::objectValue); - typedef std::pair string_ref_pair; - BOOST_FOREACH(string_ref_pair it, mChildren) + typedef std::map::value_type string_ref_pair; + BOOST_FOREACH(const string_ref_pair& it, mChildren) { v[it.first] = it.second->getValue(i); } @@ -95,8 +95,8 @@ bool ParameterNode::setValue(const Json::Value& value, Json::Value& error) error["error"] = "Cannot end on an inner node"; Json::Value nodes(Json::arrayValue); - typedef std::pair string_ref_pair; - BOOST_FOREACH(string_ref_pair it, mChildren) + typedef std::map::value_type string_ref_pair; + BOOST_FOREACH(const string_ref_pair& it, mChildren) { nodes.append(it.first); } diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index a80e7b0a3..f560688b2 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1565,7 +1565,7 @@ Json::Value RPCHandler::doLogLevel(Json::Value jvRequest) lev["base"] = Log::severityToString(Log::getMinSeverity()); std::vector< std::pair > logTable = LogPartition::getSeverities(); - typedef std::pair stringPair; + typedef std::map::value_type stringPair; BOOST_FOREACH(const stringPair& it, logTable) lev[it.first] = it.second; diff --git a/src/cpp/ripple/SerializedObject.cpp b/src/cpp/ripple/SerializedObject.cpp index 35a0760b5..2e87706e1 100644 --- a/src/cpp/ripple/SerializedObject.cpp +++ b/src/cpp/ripple/SerializedObject.cpp @@ -294,7 +294,7 @@ void STObject::add(Serializer& s, bool withSigningFields) const } - typedef std::pair field_iterator; + typedef std::map::value_type field_iterator; BOOST_FOREACH(field_iterator& it, fields) { // insert them in sorted order const SerializedType* field = it.second; diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index 3899ebfb4..e4cadfb99 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -23,7 +23,7 @@ DECLARE_INSTANCE(TransactionEngine); void TransactionEngine::txnWrite() { // Write back the account states - typedef std::pair u256_LES_pair; + typedef std::map::value_type u256_LES_pair; BOOST_FOREACH(u256_LES_pair& it, mNodes) { const SLE::pointer& sleEntry = it.second.mEntry; diff --git a/src/cpp/ripple/ValidationCollection.cpp b/src/cpp/ripple/ValidationCollection.cpp index f663b2c2a..9057bd082 100644 --- a/src/cpp/ripple/ValidationCollection.cpp +++ b/src/cpp/ripple/ValidationCollection.cpp @@ -9,7 +9,7 @@ SETUP_LOG(); -typedef std::pair u160_val_pair; +typedef std::map::value_type u160_val_pair; typedef boost::shared_ptr VSpointer; VSpointer ValidationCollection::findCreateSet(const uint256& ledgerHash) diff --git a/src/cpp/ripple/rpc.cpp b/src/cpp/ripple/rpc.cpp index 2beec4c66..8d7c84391 100644 --- a/src/cpp/ripple/rpc.cpp +++ b/src/cpp/ripple/rpc.cpp @@ -48,8 +48,8 @@ std::string createHTTPPost(const std::string& strMsg, const std::map HeaderType; - BOOST_FOREACH(HeaderType& item, mapRequestHeaders) + typedef std::map::value_type HeaderType; + BOOST_FOREACH(const HeaderType& item, mapRequestHeaders) s << item.first << ": " << item.second << "\r\n"; s << "\r\n" << strMsg; From 8a1033caad1e10761b42f8aaa9c632858123ce34 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 20:31:26 -0800 Subject: [PATCH 017/525] Second round of removing extraneous copy constructor and destructor calls. --- src/cpp/ripple/ConnectionPool.cpp | 2 +- src/cpp/ripple/LedgerFormats.h | 2 +- src/cpp/ripple/NetworkOPs.cpp | 2 +- src/cpp/ripple/OrderBook.h | 1 + src/cpp/ripple/OrderBookDB.cpp | 2 +- src/cpp/ripple/Pathfinder.cpp | 14 +++++++------- src/cpp/ripple/Pathfinder.h | 1 + src/cpp/ripple/RPCHandler.cpp | 4 ++-- src/cpp/ripple/SerializedObject.cpp | 14 +++++++------- src/cpp/ripple/SerializedObject.h | 14 +++++++------- src/cpp/ripple/SerializedValidation.cpp | 2 +- src/cpp/ripple/TransactionFormats.h | 2 +- src/cpp/ripple/UniqueNodeList.cpp | 12 ++++++------ 13 files changed, 37 insertions(+), 35 deletions(-) diff --git a/src/cpp/ripple/ConnectionPool.cpp b/src/cpp/ripple/ConnectionPool.cpp index fad45ca0f..1c71b28b9 100644 --- a/src/cpp/ripple/ConnectionPool.cpp +++ b/src/cpp/ripple/ConnectionPool.cpp @@ -365,7 +365,7 @@ Json::Value ConnectionPool::getPeersJson() Json::Value ret(Json::arrayValue); std::vector vppPeers = getPeerVector(); - BOOST_FOREACH(Peer::pointer peer, vppPeers) + BOOST_FOREACH(Peer::ref peer, vppPeers) { ret.append(peer->getJson()); } diff --git a/src/cpp/ripple/LedgerFormats.h b/src/cpp/ripple/LedgerFormats.h index 5f16c63f4..90ab9cf6b 100644 --- a/src/cpp/ripple/LedgerFormats.h +++ b/src/cpp/ripple/LedgerFormats.h @@ -48,7 +48,7 @@ class LedgerEntryFormat public: std::string t_name; LedgerEntryType t_type; - std::vector elements; + std::vector elements; static std::map byType; static std::map byName; diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index e6a4c5833..1488ba346 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -571,7 +571,7 @@ bool NetworkOPs::checkLastClosedLedger(const std::vector& peerLis boost::unordered_map current = theApp->getValidations().getCurrentValidations(closedLedger); typedef std::map::value_type u256_cvc_pair; - BOOST_FOREACH(u256_cvc_pair& it, current) + BOOST_FOREACH(const u256_cvc_pair& it, current) { ValidationCount& vc = ledgers[it.first]; vc.trustedValidations += it.second.first; diff --git a/src/cpp/ripple/OrderBook.h b/src/cpp/ripple/OrderBook.h index e143589f4..7042bb5fe 100644 --- a/src/cpp/ripple/OrderBook.h +++ b/src/cpp/ripple/OrderBook.h @@ -16,6 +16,7 @@ class OrderBook OrderBook(SerializedLedgerEntry::pointer ledgerEntry); // For accounts in a ledger public: typedef boost::shared_ptr pointer; + typedef const boost::shared_ptr& ref; // returns NULL if ledgerEntry doesn't point to an order // if ledgerEntry is an Order it creates the OrderBook this order would live in diff --git a/src/cpp/ripple/OrderBookDB.cpp b/src/cpp/ripple/OrderBookDB.cpp index ca06acd9b..192cab703 100644 --- a/src/cpp/ripple/OrderBookDB.cpp +++ b/src/cpp/ripple/OrderBookDB.cpp @@ -45,7 +45,7 @@ void OrderBookDB::getBooks(const uint160& issuerID, const uint160& currencyID, s { if( mIssuerMap.find(issuerID) == mIssuerMap.end() ) { - BOOST_FOREACH(OrderBook::pointer book, mIssuerMap[issuerID]) + BOOST_FOREACH(OrderBook::ref book, mIssuerMap[issuerID]) { if(book->getCurrencyIn()==currencyID) { diff --git a/src/cpp/ripple/Pathfinder.cpp b/src/cpp/ripple/Pathfinder.cpp index 0f772bf62..acce67ae6 100644 --- a/src/cpp/ripple/Pathfinder.cpp +++ b/src/cpp/ripple/Pathfinder.cpp @@ -269,7 +269,7 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax else if (!speEnd.mCurrencyID) { // Last element is for XRP continue with qualifying books. - BOOST_FOREACH(OrderBook::pointer book, mOrderBook.getXRPInBooks()) + BOOST_FOREACH(OrderBook::ref book, mOrderBook.getXRPInBooks()) { // XXX Don't allow looping through same order books. @@ -303,7 +303,7 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax // Create new paths for each outbound account not already in the path. AccountItems rippleLines(speEnd.mAccountID, mLedger, AccountItem::pointer(new RippleState())); - BOOST_FOREACH(AccountItem::pointer item, rippleLines.getItems()) + BOOST_FOREACH(AccountItem::ref item, rippleLines.getItems()) { RippleState* line=(RippleState*)item.get(); @@ -342,7 +342,7 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax mOrderBook.getBooks(spPath.mCurrentAccount, spPath.mCurrencyID, books); - BOOST_FOREACH(OrderBook::pointer book,books) + BOOST_FOREACH(OrderBook::ref book,books) { STPath new_path(spPath); STPathElement new_ele(uint160(), book->getCurrencyOut(), book->getIssuerOut()); @@ -457,7 +457,7 @@ bool Pathfinder::checkComplete(STPathSet& retPathSet) if (mCompletePaths.size()) { // TODO: look through these and pick the most promising int count=0; - BOOST_FOREACH(PathOption::pointer pathOption,mCompletePaths) + BOOST_FOREACH(PathOption::ref pathOption,mCompletePaths) { retPathSet.addPath(pathOption->mPath); count++; @@ -480,7 +480,7 @@ void Pathfinder::addOptions(PathOption::pointer tail) { if (!tail->mCurrencyID) { // source XRP - BOOST_FOREACH(OrderBook::pointer book, mOrderBook.getXRPInBooks()) + BOOST_FOREACH(OrderBook::ref book, mOrderBook.getXRPInBooks()) { PathOption::pointer pathOption(new PathOption(tail)); @@ -495,7 +495,7 @@ void Pathfinder::addOptions(PathOption::pointer tail) else { // ripple RippleLines rippleLines(tail->mCurrentAccount); - BOOST_FOREACH(RippleState::pointer line,rippleLines.getLines()) + BOOST_FOREACH(RippleState::ref line,rippleLines.getLines()) { // TODO: make sure we can move in the correct direction STAmount balance=line->getBalance(); @@ -516,7 +516,7 @@ void Pathfinder::addOptions(PathOption::pointer tail) std::vector books; mOrderBook.getBooks(tail->mCurrentAccount, tail->mCurrencyID, books); - BOOST_FOREACH(OrderBook::pointer book,books) + BOOST_FOREACH(OrderBook::ref book,books) { PathOption::pointer pathOption(new PathOption(tail)); diff --git a/src/cpp/ripple/Pathfinder.h b/src/cpp/ripple/Pathfinder.h index 27f8d4480..b0cf3ec13 100644 --- a/src/cpp/ripple/Pathfinder.h +++ b/src/cpp/ripple/Pathfinder.h @@ -18,6 +18,7 @@ class PathOption { public: typedef boost::shared_ptr pointer; + typedef const boost::shared_ptr& ref; STPath mPath; bool mCorrectCurrency; // for the sorting diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index f560688b2..30844575a 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -564,7 +564,7 @@ Json::Value RPCHandler::doAccountLines(Json::Value jvRequest) AccountItems rippleLines(raAccount.getAccountID(), lpLedger, AccountItem::pointer(new RippleState())); - BOOST_FOREACH(AccountItem::pointer item, rippleLines.getItems()) + BOOST_FOREACH(AccountItem::ref item, rippleLines.getItems()) { RippleState* line=(RippleState*)item.get(); @@ -633,7 +633,7 @@ Json::Value RPCHandler::doAccountOffers(Json::Value jvRequest) Json::Value jsonLines(Json::arrayValue); AccountItems offers(raAccount.getAccountID(), lpLedger, AccountItem::pointer(new Offer())); - BOOST_FOREACH(AccountItem::pointer item, offers.getItems()) + BOOST_FOREACH(AccountItem::ref item, offers.getItems()) { Offer* offer=(Offer*)item.get(); diff --git a/src/cpp/ripple/SerializedObject.cpp b/src/cpp/ripple/SerializedObject.cpp index 2e87706e1..bc20aaf1a 100644 --- a/src/cpp/ripple/SerializedObject.cpp +++ b/src/cpp/ripple/SerializedObject.cpp @@ -130,12 +130,12 @@ std::auto_ptr STObject::makeDeserializedObject(SerializedTypeID } } -void STObject::set(const std::vector& type) +void STObject::set(const std::vector& type) { mData.clear(); mType.clear(); - BOOST_FOREACH(const SOElement::ptr& elem, type) + BOOST_FOREACH(SOElement::ref elem, type) { mType.push_back(elem); if (elem->flags != SOE_REQUIRED) @@ -145,13 +145,13 @@ void STObject::set(const std::vector& type) } } -bool STObject::setType(const std::vector &type) +bool STObject::setType(const std::vector &type) { boost::ptr_vector newData; bool valid = true; mType.clear(); - BOOST_FOREACH(const SOElement::ptr& elem, type) + BOOST_FOREACH(SOElement::ref elem, type) { bool match = false; for (boost::ptr_vector::iterator it = mData.begin(); it != mData.end(); ++it) @@ -200,7 +200,7 @@ bool STObject::setType(const std::vector &type) bool STObject::isValidForType() { boost::ptr_vector::iterator it = mData.begin(); - BOOST_FOREACH(SOElement::ptr elem, mType) + BOOST_FOREACH(SOElement::ref elem, mType) { if (it == mData.end()) return false; @@ -216,7 +216,7 @@ bool STObject::isFieldAllowed(SField::ref field) { if (isFree()) return true; - BOOST_FOREACH(SOElement::ptr elem, mType) + BOOST_FOREACH(SOElement::ref elem, mType) { // are any required elemnents missing if (elem->e_field == field) return true; @@ -1242,7 +1242,7 @@ BOOST_AUTO_TEST_CASE( FieldManipulation_test ) SField sfTestU32(STI_UINT32, 255, "TestU32"); SField sfTestObject(STI_OBJECT, 255, "TestObject"); - std::vector elements; + std::vector elements; elements.push_back(new SOElement(sfFlags, SOE_REQUIRED)); elements.push_back(new SOElement(sfTestVL, SOE_REQUIRED)); elements.push_back(new SOElement(sfTestH256, SOE_OPTIONAL)); diff --git a/src/cpp/ripple/SerializedObject.h b/src/cpp/ripple/SerializedObject.h index 99207fb72..aeab2e351 100644 --- a/src/cpp/ripple/SerializedObject.h +++ b/src/cpp/ripple/SerializedObject.h @@ -18,7 +18,7 @@ DEFINE_INSTANCE(SerializedArray); class SOElement { // An element in the description of a serialized object public: - typedef SOElement const * ptr; // used to point to one element + typedef SOElement const * ref; // used to point to one element SField::ref e_field; const SOE_Flags flags; @@ -29,8 +29,8 @@ public: class STObject : public SerializedType, private IS_INSTANCE(SerializedObject) { protected: - boost::ptr_vector mData; - std::vector mType; + boost::ptr_vector mData; + std::vector mType; STObject* duplicate() const { return new STObject(*this); } STObject(SField::ref name, boost::ptr_vector& data) : SerializedType(name) { mData.swap(data); } @@ -40,10 +40,10 @@ public: STObject(SField::ref name) : SerializedType(name) { ; } - STObject(const std::vector& type, SField::ref name) : SerializedType(name) + STObject(const std::vector& type, SField::ref name) : SerializedType(name) { set(type); } - STObject(const std::vector& type, SerializerIterator& sit, SField::ref name) : SerializedType(name) + STObject(const std::vector& type, SerializerIterator& sit, SField::ref name) : SerializedType(name) { set(sit); setType(type); } std::auto_ptr oClone() const { return std::auto_ptr(new STObject(*this)); } @@ -54,12 +54,12 @@ public: static std::auto_ptr deserialize(SerializerIterator& sit, SField::ref name); - bool setType(const std::vector& type); + bool setType(const std::vector& type); bool isValidForType(); bool isFieldAllowed(SField::ref); bool isFree() const { return mType.empty(); } - void set(const std::vector&); + void set(const std::vector&); bool set(SerializerIterator& u, int depth = 0); virtual SerializedTypeID getSType() const { return STI_OBJECT; } diff --git a/src/cpp/ripple/SerializedValidation.cpp b/src/cpp/ripple/SerializedValidation.cpp index c580e1a26..3f502d447 100644 --- a/src/cpp/ripple/SerializedValidation.cpp +++ b/src/cpp/ripple/SerializedValidation.cpp @@ -6,7 +6,7 @@ DECLARE_INSTANCE(SerializedValidation); -std::vector sValidationFormat; +std::vector sValidationFormat; static bool SVFInit() { diff --git a/src/cpp/ripple/TransactionFormats.h b/src/cpp/ripple/TransactionFormats.h index 778da0405..a67eb05c8 100644 --- a/src/cpp/ripple/TransactionFormats.h +++ b/src/cpp/ripple/TransactionFormats.h @@ -28,7 +28,7 @@ class TransactionFormat public: std::string t_name; TransactionType t_type; - std::vector elements; + std::vector elements; static std::map byType; static std::map byName; diff --git a/src/cpp/ripple/UniqueNodeList.cpp b/src/cpp/ripple/UniqueNodeList.cpp index df37f6d4d..6e5ecda26 100644 --- a/src/cpp/ripple/UniqueNodeList.cpp +++ b/src/cpp/ripple/UniqueNodeList.cpp @@ -468,8 +468,8 @@ void UniqueNodeList::scoreCompute() // map of pair :: score epScore umScore; - std::pair< std::string, int> vc; - BOOST_FOREACH(vc, umValidators) + typedef boost::unordered_map::value_type vcType; + BOOST_FOREACH(vcType& vc, umValidators) { std::string strValidator = vc.first; @@ -506,8 +506,8 @@ void UniqueNodeList::scoreCompute() vstrValues.reserve(umScore.size()); - std::pair< ipPort, score> ipScore; - BOOST_FOREACH(ipScore, umScore) + typedef boost::unordered_map, score>::value_type ipScoreType; + BOOST_FOREACH(ipScoreType& ipScore, umScore) { ipPort ipEndpoint = ipScore.first; std::string strIpPort = str(boost::format("%s %d") % ipEndpoint.first % ipEndpoint.second); @@ -638,7 +638,7 @@ void UniqueNodeList::processIps(const std::string& strSite, const RippleAddress& vstrValues.resize(MIN(pmtVecStrIps->size(), REFERRAL_IPS_MAX)); int iValues = 0; - BOOST_FOREACH(std::string strReferral, *pmtVecStrIps) + BOOST_FOREACH(const std::string& strReferral, *pmtVecStrIps) { if (iValues == REFERRAL_VALIDATORS_MAX) break; @@ -709,7 +709,7 @@ int UniqueNodeList::processValidators(const std::string& strSite, const std::str vstrValues.reserve(MIN(pmtVecStrValidators->size(), REFERRAL_VALIDATORS_MAX)); - BOOST_FOREACH(std::string strReferral, *pmtVecStrValidators) + BOOST_FOREACH(const std::string& strReferral, *pmtVecStrValidators) { if (iValues == REFERRAL_VALIDATORS_MAX) break; From f6489a1050095ad4bb7a4bfdf93af3e063b03c03 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 17 Dec 2012 20:49:55 -0800 Subject: [PATCH 018/525] Improve documentation for config-example.js --- test/config-example.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/config-example.js b/test/config-example.js index c43f4d5d8..0ddf080ee 100644 --- a/test/config-example.js +++ b/test/config-example.js @@ -12,7 +12,11 @@ exports.rippled = path.resolve("build/rippled"); exports.server_default = "alpha"; +// // Configuration for servers. +// +// For testing, you might choose to target a persistent server at alternate ports. +// exports.servers = { // A local test server. "alpha" : { From 1cc4b2a132275b72e979dee0d350112fbb9a1f26 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 17 Dec 2012 21:29:40 -0800 Subject: [PATCH 019/525] Add new type specific flags for ripple state entry reserves. --- src/cpp/ripple/LedgerFormats.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerFormats.h b/src/cpp/ripple/LedgerFormats.h index 90ab9cf6b..3bc0afb50 100644 --- a/src/cpp/ripple/LedgerFormats.h +++ b/src/cpp/ripple/LedgerFormats.h @@ -37,10 +37,14 @@ enum LedgerNameSpace enum LedgerSpecificFlags { // ltACCOUNT_ROOT - lsfPasswordSpent = 0x00010000, // True if password set fee is spent. + lsfPasswordSpent = 0x00010000, // True, if password set fee is spent. // ltOFFER lsfPassive = 0x00010000, + + // ltRIPPLE_STATE + lsfLowReserve = 0x00010000, // True, if entry counts toward reserve. + lsfHighReserve = 0x00020000, }; class LedgerEntryFormat From b04aa198e6df08c28b959194a66ea56e5045239b Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 17 Dec 2012 21:30:19 -0800 Subject: [PATCH 020/525] Revise trust set transactor for reserves. --- src/cpp/ripple/TransactionErr.cpp | 2 +- src/cpp/ripple/TransactionErr.h | 2 +- src/cpp/ripple/TrustSetTransactor.cpp | 261 +++++++++++++++++++------- 3 files changed, 196 insertions(+), 69 deletions(-) diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index a28ab5bc8..40aa6edff 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -54,7 +54,7 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { terNO_DST, "terNO_DST", "Destination does not exist. Send XRP to create it." }, { terNO_DST_INSUF_XRP, "terNO_DST_INSUF_XRP", "Destination does not exist. Too little XRP sent to create it." }, { terNO_LINE, "terNO_LINE", "No such line." }, - { terNO_LINE_NO_ZERO, "terNO_LINE_NO_ZERO", "Can't zero non-existant line, destination might make it." }, + { terNO_LINE_REDUNDANT, "terNO_LINE_REDUNDANT", "Can't set non-existant line to default." }, { terPRE_SEQ, "terPRE_SEQ", "Missing/inapplicable prior transaction." }, { terSET_MISSING_DST, "terSET_MISSING_DST", "Can't set password, destination missing." }, { terUNFUNDED, "terUNFUNDED", "Source account had insufficient balance for transaction." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 8292dd3aa..bed4e4f6e 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -84,7 +84,7 @@ enum TER // aka TransactionEngineResult terNO_DST, terNO_DST_INSUF_XRP, terNO_LINE, - terNO_LINE_NO_ZERO, + terNO_LINE_REDUNDANT, terPRE_SEQ, terSET_MISSING_DST, terUNFUNDED, diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index 54e1efc12..7560bc000 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -9,13 +9,19 @@ TER TrustSetTransactor::doApply() const STAmount saLimitAmount = mTxn.getFieldAmount(sfLimitAmount); const bool bQualityIn = mTxn.isFieldPresent(sfQualityIn); - const uint32 uQualityIn = bQualityIn ? mTxn.getFieldU32(sfQualityIn) : 0; const bool bQualityOut = mTxn.isFieldPresent(sfQualityOut); - const uint32 uQualityOut = bQualityIn ? mTxn.getFieldU32(sfQualityOut) : 0; const uint160 uCurrencyID = saLimitAmount.getCurrency(); uint160 uDstAccountID = saLimitAmount.getIssuer(); const bool bFlipped = mTxnAccountID > uDstAccountID; // true, iff current is not lowest. - bool bDelIndex = false; + + uint32 uQualityIn = bQualityIn ? mTxn.getFieldU32(sfQualityIn) : 0; + uint32 uQualityOut = bQualityIn ? mTxn.getFieldU32(sfQualityOut) : 0; + + if (bQualityIn && QUALITY_ONE == uQualityIn) + uQualityIn = 0; + + if (bQualityOut && QUALITY_ONE == uQualityOut) + uQualityOut = 0; // Check if destination makes sense. @@ -52,77 +58,198 @@ TER TrustSetTransactor::doApply() SLE::pointer sleRippleState = mEngine->entryCache(ltRIPPLE_STATE, Ledger::getRippleStateIndex(mTxnAccountID, uDstAccountID, uCurrencyID)); if (sleRippleState) { - // A line exists in one or more directions. + STAmount saLowBalance; + STAmount saLowLimit; + STAmount saHighBalance; + STAmount saHighLimit; + uint32 uLowQualityIn; + uint32 uLowQualityOut; + uint32 uHighQualityIn; + uint32 uHighQualityOut; + const uint160& uLowAccountID = !bFlipped ? mTxnAccountID : uDstAccountID; + const uint160& uHighAccountID = bFlipped ? mTxnAccountID : uDstAccountID; + SLE::ref sleLowAccount = !bFlipped ? mTxnAccount : sleDst; + SLE::ref sleHighAccount = bFlipped ? mTxnAccount : sleDst; -#if 0 - // We might delete a ripple state node if everything is set to defaults. - // However, this is problematic as it may make predicting reserve amounts harder for users. - // The code here is incomplete. + // + // Balances + // - if (!saLimitAmount) + saLowBalance = sleRippleState->getFieldAmount(sfBalance); + saHighBalance = saLowBalance; + + if (bFlipped) { - // Zeroing line. - uint160 uLowID = sleRippleState->getFieldAmount(sfLowLimit).getIssuer(); - uint160 uHighID = sleRippleState->getFieldAmount(sfHighLimit).getIssuer(); - bool bLow = uLowID == uSrcAccountID; - bool bHigh = uLowID == uDstAccountID; - bool bBalanceZero = !sleRippleState->getFieldAmount(sfBalance); - STAmount saDstLimit = sleRippleState->getFieldAmount(bSendLow ? sfLowLimit : sfHighLimit); - bool bDstLimitZero = !saDstLimit; - - assert(bLow || bHigh); - - if (bBalanceZero && bDstLimitZero) - { - // Zero balance and eliminating last limit. - - bDelIndex = true; - terResult = dirDelete(false, uSrcRef, Ledger::getOwnerDirIndex(mTxnAccountID), sleRippleState->getIndex(), false); - } + saLowBalance.negate(); } -#endif - - if (!bDelIndex) + else { - sleRippleState->setFieldAmount(bFlipped ? sfHighLimit: sfLowLimit, saLimitAllow); + saHighBalance.negate(); + } - if (!bQualityIn) - { - nothing(); - } - else if (uQualityIn) - { - sleRippleState->setFieldU32(bFlipped ? sfLowQualityIn : sfHighQualityIn, uQualityIn); - } - else - { - sleRippleState->makeFieldAbsent(bFlipped ? sfLowQualityIn : sfHighQualityIn); - } + // + // Limits + // - if (!bQualityOut) - { - nothing(); - } - else if (uQualityOut) - { - sleRippleState->setFieldU32(bFlipped ? sfLowQualityOut : sfHighQualityOut, uQualityOut); - } - else - { - sleRippleState->makeFieldAbsent(bFlipped ? sfLowQualityOut : sfHighQualityOut); - } + if (bFlipped) + { + sleRippleState->setFieldAmount(sfHighLimit, saLimitAllow); + saLowLimit = sleRippleState->getFieldAmount(sfLowLimit); + saHighLimit = saLimitAllow; + } + else + { + sleRippleState->setFieldAmount(sfLowLimit, saLimitAllow); + + saLowLimit = saLimitAllow; + saHighLimit = sleRippleState->getFieldAmount(sfHighLimit); + } + + // + // Quality in + // + + if (!bQualityIn) + { + // Not setting. Just get it. + + uLowQualityIn = sleRippleState->getFieldU32(sfLowQualityIn); + uHighQualityIn = sleRippleState->getFieldU32(sfHighQualityIn); + } + else if (uQualityIn) + { + // Setting. + + sleRippleState->setFieldU32(!bFlipped ? sfLowQualityIn : sfHighQualityIn, uQualityIn); + + uLowQualityIn = !bFlipped ? uQualityIn : sleRippleState->getFieldU32(sfLowQualityIn); + uHighQualityIn = bFlipped ? uQualityIn : sleRippleState->getFieldU32(sfHighQualityIn); + } + else + { + // Clearing. + + sleRippleState->makeFieldAbsent(!bFlipped ? sfLowQualityIn : sfHighQualityIn); + + uLowQualityIn = !bFlipped ? 0 : sleRippleState->getFieldU32(sfLowQualityIn); + uHighQualityIn = bFlipped ? 0 : sleRippleState->getFieldU32(sfHighQualityIn); + } + + // + // Quality out + // + + if (!bQualityOut) + { + // Not setting. Just get it. + + uLowQualityOut = sleRippleState->getFieldU32(sfLowQualityOut); + uHighQualityOut = sleRippleState->getFieldU32(sfHighQualityOut); + } + else if (uQualityOut) + { + // Setting. + + sleRippleState->setFieldU32(!bFlipped ? sfLowQualityOut : sfHighQualityOut, uQualityOut); + + uLowQualityOut = !bFlipped ? uQualityOut : sleRippleState->getFieldU32(sfLowQualityOut); + uHighQualityOut = bFlipped ? uQualityOut : sleRippleState->getFieldU32(sfHighQualityOut); + } + else + { + // Clearing. + + sleRippleState->makeFieldAbsent(!bFlipped ? sfLowQualityOut : sfHighQualityOut); + + uLowQualityOut = !bFlipped ? 0 : sleRippleState->getFieldU32(sfLowQualityOut); + uHighQualityOut = bFlipped ? 0 : sleRippleState->getFieldU32(sfHighQualityOut); + } + + if (QUALITY_ONE == uLowQualityIn) uLowQualityIn = 0; + if (QUALITY_ONE == uHighQualityIn) uHighQualityIn = 0; + if (QUALITY_ONE == uLowQualityOut) uLowQualityOut = 0; + if (QUALITY_ONE == uHighQualityOut) uHighQualityOut = 0; + + const bool bLowReserveSet = uLowQualityIn || uLowQualityOut || !!saLowLimit || saLowBalance.isPositive(); + const bool bLowReserveClear = !uLowQualityIn && !uLowQualityOut && !saLowLimit && !saLowBalance.isPositive(); + + const bool bHighReserveSet = uHighQualityIn || uHighQualityOut || !!saHighLimit || saHighBalance.isPositive(); + const bool bHighReserveClear = !uHighQualityIn && !uHighQualityOut && !saHighLimit && !saHighBalance.isPositive(); + const bool bDefault = bLowReserveClear && bHighReserveClear; + + const uint32 uFlagsIn = sleRippleState->getFieldU32(sfFlags); + uint32 uFlagsOut = uFlagsIn; + + const bool bLowReserved = isSetBit(uFlagsIn, lsfLowReserve); + const bool bHighReserved = isSetBit(uFlagsIn, lsfHighReserve); + + if (bLowReserveSet && !bLowReserved) + { + // Set reserve for low account. + + terResult = mEngine->getNodes().ownerCountAdjust(uLowAccountID, 1, sleLowAccount); + uFlagsOut |= lsfLowReserve; + } + + if (bLowReserveClear && bLowReserved) + { + // Clear reserve for low account. + + terResult = mEngine->getNodes().ownerCountAdjust(uLowAccountID, -1, sleLowAccount); + uFlagsOut &= ~lsfLowReserve; + } + + if (bHighReserveSet && !bHighReserved) + { + // Set reserve for high account. + + terResult = mEngine->getNodes().ownerCountAdjust(uHighAccountID, 1, sleHighAccount); + uFlagsOut |= lsfHighReserve; + } + + if (bHighReserveClear && bHighReserved) + { + // Clear reserve for high account. + + terResult = mEngine->getNodes().ownerCountAdjust(uHighAccountID, -1, sleHighAccount); + uFlagsOut &= ~lsfHighReserve; + } + + if (uFlagsIn != uFlagsOut) + sleRippleState->setFieldU32(sfFlags, uFlagsOut); + + if (bDefault) + { + // Can delete. + + uint64 uSrcRef; // <-- Ignored, dirs never delete. + + terResult = mEngine->getNodes().dirDelete(false, uSrcRef, Ledger::getOwnerDirIndex(uLowAccountID), sleRippleState->getIndex(), false); + + if (tesSUCCESS == terResult) + terResult = mEngine->getNodes().dirDelete(false, uSrcRef, Ledger::getOwnerDirIndex(uHighAccountID), sleRippleState->getIndex(), false); + + mEngine->entryDelete(sleRippleState); + + Log(lsINFO) << "doTrustSet: Deleting ripple line"; + } + else + { mEngine->entryModify(sleRippleState); - } - Log(lsINFO) << "doTrustSet: Modifying ripple line: bDelIndex=" << bDelIndex; + Log(lsINFO) << "doTrustSet: Modify ripple line"; + } } // Line does not exist. - else if (!saLimitAmount) + else if (!saLimitAmount // Setting default limit. + && bQualityIn && !uQualityIn // Setting default quality in. + && bQualityOut && !uQualityOut // Setting default quality out. + ) { - Log(lsINFO) << "doTrustSet: Redundant: Setting non-existent ripple line to 0."; + Log(lsINFO) << "doTrustSet: Redundant: Setting non-existent ripple line to defaults."; - return terNO_LINE_NO_ZERO; + return terNO_LINE_REDUNDANT; } else { @@ -132,13 +259,16 @@ TER TrustSetTransactor::doApply() Log(lsINFO) << "doTrustSet: Creating ripple line: " << sleRippleState->getIndex().ToString(); sleRippleState->setFieldAmount(sfBalance, STAmount(uCurrencyID, ACCOUNT_ONE)); // Zero balance in currency. - sleRippleState->setFieldAmount(bFlipped ? sfHighLimit : sfLowLimit, saLimitAllow); - sleRippleState->setFieldAmount(bFlipped ? sfLowLimit : sfHighLimit, STAmount(uCurrencyID, uDstAccountID)); + sleRippleState->setFieldAmount(!bFlipped ? sfLowLimit : sfHighLimit, saLimitAllow); + sleRippleState->setFieldAmount( bFlipped ? sfLowLimit : sfHighLimit, STAmount(uCurrencyID, uDstAccountID)); if (uQualityIn) - sleRippleState->setFieldU32(bFlipped ? sfHighQualityIn : sfLowQualityIn, uQualityIn); + sleRippleState->setFieldU32(!bFlipped ? sfLowQualityIn : sfHighQualityIn, uQualityIn); + if (uQualityOut) - sleRippleState->setFieldU32(bFlipped ? sfHighQualityOut : sfLowQualityOut, uQualityOut); + sleRippleState->setFieldU32(!bFlipped ? sfLowQualityOut : sfHighQualityOut, uQualityOut); + + sleRippleState->setFieldU32(sfFlags, !bFlipped ? lsfLowReserve : lsfHighReserve); uint64 uSrcRef; // <-- Ignored, dirs never delete. @@ -157,9 +287,6 @@ TER TrustSetTransactor::doApply() Ledger::getOwnerDirIndex(uDstAccountID), sleRippleState->getIndex(), boost::bind(&Ledger::ownerDirDescriber, _1, uDstAccountID)); - - if (tesSUCCESS == terResult) - terResult = mEngine->getNodes().ownerCountAdjust(uDstAccountID, 1, sleDst); } Log(lsINFO) << "doTrustSet<"; From 7172946b8d19aa7e1ecbb75bdd6e11cdb24a852e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 17 Dec 2012 23:56:13 -0800 Subject: [PATCH 021/525] For now, limit to one transaction thread in standalone mode. --- src/cpp/ripple/JobQueue.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index 1b236295b..b029dab5e 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -5,6 +5,7 @@ #include #include "Log.h" +#include "Config.h" SETUP_LOG(); @@ -184,7 +185,9 @@ void JobQueue::shutdown() void JobQueue::setThreadCount(int c) { // set the number of thread serving the job queue to precisely this number - if (c == 0) + if (theConfig.RUN_STANDALONE) + c = 1; + else if (c == 0) { c = boost::thread::hardware_concurrency(); if (c < 2) From 0da6d15719a0f2612fb1db9e9ea8f7fe8ec38fff Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 12:27:25 -0800 Subject: [PATCH 022/525] Allow remotes to do RPC tx. --- src/cpp/ripple/RPCHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 30844575a..98a003c4a 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2319,7 +2319,7 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { "server_info", &RPCHandler::doServerInfo, true, false, optNone }, { "stop", &RPCHandler::doStop, true, false, optNone }, { "transaction_entry", &RPCHandler::doTransactionEntry, false, false, optCurrent }, - { "tx", &RPCHandler::doTx, true, false, optNone }, + { "tx", &RPCHandler::doTx, false, false, optNetwork }, { "tx_history", &RPCHandler::doTxHistory, false, false, optNone }, { "unl_add", &RPCHandler::doUnlAdd, true, false, optNone }, From 1ae62cac139157fe10ae39aff5c00e84570f1f56 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 12:29:20 -0800 Subject: [PATCH 023/525] Clean up and fix TrustSet. --- src/cpp/ripple/TrustSetTransactor.cpp | 86 +++++++++++---------------- 1 file changed, 34 insertions(+), 52 deletions(-) diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index 7560bc000..1f80dbde4 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -12,7 +12,7 @@ TER TrustSetTransactor::doApply() const bool bQualityOut = mTxn.isFieldPresent(sfQualityOut); const uint160 uCurrencyID = saLimitAmount.getCurrency(); uint160 uDstAccountID = saLimitAmount.getIssuer(); - const bool bFlipped = mTxnAccountID > uDstAccountID; // true, iff current is not lowest. + const bool bHigh = mTxnAccountID > uDstAccountID; // true, iff current is high account. uint32 uQualityIn = bQualityIn ? mTxn.getFieldU32(sfQualityIn) : 0; uint32 uQualityOut = bQualityIn ? mTxn.getFieldU32(sfQualityOut) : 0; @@ -66,45 +66,26 @@ TER TrustSetTransactor::doApply() uint32 uLowQualityOut; uint32 uHighQualityIn; uint32 uHighQualityOut; - const uint160& uLowAccountID = !bFlipped ? mTxnAccountID : uDstAccountID; - const uint160& uHighAccountID = bFlipped ? mTxnAccountID : uDstAccountID; - SLE::ref sleLowAccount = !bFlipped ? mTxnAccount : sleDst; - SLE::ref sleHighAccount = bFlipped ? mTxnAccount : sleDst; + const uint160& uLowAccountID = !bHigh ? mTxnAccountID : uDstAccountID; + const uint160& uHighAccountID = bHigh ? mTxnAccountID : uDstAccountID; + SLE::ref sleLowAccount = !bHigh ? mTxnAccount : sleDst; + SLE::ref sleHighAccount = bHigh ? mTxnAccount : sleDst; // // Balances // saLowBalance = sleRippleState->getFieldAmount(sfBalance); - saHighBalance = saLowBalance; - - if (bFlipped) - { - saLowBalance.negate(); - } - else - { - saHighBalance.negate(); - } + saHighBalance = -saLowBalance; // // Limits // - if (bFlipped) - { - sleRippleState->setFieldAmount(sfHighLimit, saLimitAllow); + sleRippleState->setFieldAmount(!bHigh ? sfLowLimit : sfHighLimit, saLimitAllow); - saLowLimit = sleRippleState->getFieldAmount(sfLowLimit); - saHighLimit = saLimitAllow; - } - else - { - sleRippleState->setFieldAmount(sfLowLimit, saLimitAllow); - - saLowLimit = saLimitAllow; - saHighLimit = sleRippleState->getFieldAmount(sfHighLimit); - } + saLowLimit = !bHigh ? saLimitAllow : sleRippleState->getFieldAmount(sfLowLimit); + saHighLimit = bHigh ? saLimitAllow : sleRippleState->getFieldAmount(sfHighLimit); // // Quality in @@ -121,21 +102,24 @@ TER TrustSetTransactor::doApply() { // Setting. - sleRippleState->setFieldU32(!bFlipped ? sfLowQualityIn : sfHighQualityIn, uQualityIn); + sleRippleState->setFieldU32(!bHigh ? sfLowQualityIn : sfHighQualityIn, uQualityIn); - uLowQualityIn = !bFlipped ? uQualityIn : sleRippleState->getFieldU32(sfLowQualityIn); - uHighQualityIn = bFlipped ? uQualityIn : sleRippleState->getFieldU32(sfHighQualityIn); + uLowQualityIn = !bHigh ? uQualityIn : sleRippleState->getFieldU32(sfLowQualityIn); + uHighQualityIn = bHigh ? uQualityIn : sleRippleState->getFieldU32(sfHighQualityIn); } else { // Clearing. - sleRippleState->makeFieldAbsent(!bFlipped ? sfLowQualityIn : sfHighQualityIn); + sleRippleState->makeFieldAbsent(!bHigh ? sfLowQualityIn : sfHighQualityIn); - uLowQualityIn = !bFlipped ? 0 : sleRippleState->getFieldU32(sfLowQualityIn); - uHighQualityIn = bFlipped ? 0 : sleRippleState->getFieldU32(sfHighQualityIn); + uLowQualityIn = !bHigh ? 0 : sleRippleState->getFieldU32(sfLowQualityIn); + uHighQualityIn = bHigh ? 0 : sleRippleState->getFieldU32(sfHighQualityIn); } + if (QUALITY_ONE == uLowQualityIn) uLowQualityIn = 0; + if (QUALITY_ONE == uHighQualityIn) uHighQualityIn = 0; + // // Quality out // @@ -151,31 +135,30 @@ TER TrustSetTransactor::doApply() { // Setting. - sleRippleState->setFieldU32(!bFlipped ? sfLowQualityOut : sfHighQualityOut, uQualityOut); + sleRippleState->setFieldU32(!bHigh ? sfLowQualityOut : sfHighQualityOut, uQualityOut); - uLowQualityOut = !bFlipped ? uQualityOut : sleRippleState->getFieldU32(sfLowQualityOut); - uHighQualityOut = bFlipped ? uQualityOut : sleRippleState->getFieldU32(sfHighQualityOut); + uLowQualityOut = !bHigh ? uQualityOut : sleRippleState->getFieldU32(sfLowQualityOut); + uHighQualityOut = bHigh ? uQualityOut : sleRippleState->getFieldU32(sfHighQualityOut); } else { // Clearing. - sleRippleState->makeFieldAbsent(!bFlipped ? sfLowQualityOut : sfHighQualityOut); + sleRippleState->makeFieldAbsent(!bHigh ? sfLowQualityOut : sfHighQualityOut); - uLowQualityOut = !bFlipped ? 0 : sleRippleState->getFieldU32(sfLowQualityOut); - uHighQualityOut = bFlipped ? 0 : sleRippleState->getFieldU32(sfHighQualityOut); + uLowQualityOut = !bHigh ? 0 : sleRippleState->getFieldU32(sfLowQualityOut); + uHighQualityOut = bHigh ? 0 : sleRippleState->getFieldU32(sfHighQualityOut); } - if (QUALITY_ONE == uLowQualityIn) uLowQualityIn = 0; - if (QUALITY_ONE == uHighQualityIn) uHighQualityIn = 0; if (QUALITY_ONE == uLowQualityOut) uLowQualityOut = 0; if (QUALITY_ONE == uHighQualityOut) uHighQualityOut = 0; const bool bLowReserveSet = uLowQualityIn || uLowQualityOut || !!saLowLimit || saLowBalance.isPositive(); - const bool bLowReserveClear = !uLowQualityIn && !uLowQualityOut && !saLowLimit && !saLowBalance.isPositive(); + const bool bLowReserveClear = !bLowReserveSet; const bool bHighReserveSet = uHighQualityIn || uHighQualityOut || !!saHighLimit || saHighBalance.isPositive(); - const bool bHighReserveClear = !uHighQualityIn && !uHighQualityOut && !saHighLimit && !saHighBalance.isPositive(); + const bool bHighReserveClear = !bHighReserveSet; + const bool bDefault = bLowReserveClear && bHighReserveClear; const uint32 uFlagsIn = sleRippleState->getFieldU32(sfFlags); @@ -243,9 +226,8 @@ TER TrustSetTransactor::doApply() } // Line does not exist. else if (!saLimitAmount // Setting default limit. - && bQualityIn && !uQualityIn // Setting default quality in. - && bQualityOut && !uQualityOut // Setting default quality out. - ) + && (!bQualityIn || !uQualityIn) // Not setting quality in or setting default quality in. + && (!bQualityOut || !uQualityOut)) // Not setting quality out or setting default quality out. { Log(lsINFO) << "doTrustSet: Redundant: Setting non-existent ripple line to defaults."; @@ -259,16 +241,16 @@ TER TrustSetTransactor::doApply() Log(lsINFO) << "doTrustSet: Creating ripple line: " << sleRippleState->getIndex().ToString(); sleRippleState->setFieldAmount(sfBalance, STAmount(uCurrencyID, ACCOUNT_ONE)); // Zero balance in currency. - sleRippleState->setFieldAmount(!bFlipped ? sfLowLimit : sfHighLimit, saLimitAllow); - sleRippleState->setFieldAmount( bFlipped ? sfLowLimit : sfHighLimit, STAmount(uCurrencyID, uDstAccountID)); + sleRippleState->setFieldAmount(!bHigh ? sfLowLimit : sfHighLimit, saLimitAllow); + sleRippleState->setFieldAmount( bHigh ? sfLowLimit : sfHighLimit, STAmount(uCurrencyID, uDstAccountID)); if (uQualityIn) - sleRippleState->setFieldU32(!bFlipped ? sfLowQualityIn : sfHighQualityIn, uQualityIn); + sleRippleState->setFieldU32(!bHigh ? sfLowQualityIn : sfHighQualityIn, uQualityIn); if (uQualityOut) - sleRippleState->setFieldU32(!bFlipped ? sfLowQualityOut : sfHighQualityOut, uQualityOut); + sleRippleState->setFieldU32(!bHigh ? sfLowQualityOut : sfHighQualityOut, uQualityOut); - sleRippleState->setFieldU32(sfFlags, !bFlipped ? lsfLowReserve : lsfHighReserve); + sleRippleState->setFieldU32(sfFlags, !bHigh ? lsfLowReserve : lsfHighReserve); uint64 uSrcRef; // <-- Ignored, dirs never delete. From 589e530b2823f0005c5621c710565171684498b3 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 18 Dec 2012 12:50:08 -0800 Subject: [PATCH 024/525] Catch websocketpp logs by diverting them to our logging system. --- src/cpp/ripple/Log.cpp | 35 +++++++++++++++++++++++ src/cpp/websocketpp/src/logger/logger.hpp | 16 +++++++---- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/Log.cpp b/src/cpp/ripple/Log.cpp index 5f4e3425d..d1eb01962 100644 --- a/src/cpp/ripple/Log.cpp +++ b/src/cpp/ripple/Log.cpp @@ -6,6 +6,8 @@ #include #include +#include "../websocketpp/src/logger/logger.hpp" + boost::recursive_mutex Log::sLock; LogSeverity Log::sMinSeverity = lsINFO; @@ -186,3 +188,36 @@ void LogPartition::setSeverity(LogSeverity severity) for (LogPartition *p = headLog; p != NULL; p = p->mNextLog) p->mMinSeverity = severity; } + + +namespace websocketpp +{ + namespace log + { + LogPartition websocketPartition("WebSocket"); + + void websocketLog(websocketpp::log::alevel::value v, const std::string& entry) + { + if (websocketPartition.doLog(lsDEBUG)) + Log(lsDEBUG, websocketPartition) << entry; + } + + void websocketLog(websocketpp::log::elevel::value v, const std::string& entry) + { + LogSeverity s = lsDEBUG; + if ((v & websocketpp::log::elevel::INFO) != 0) + s = lsINFO; + else if ((v & websocketpp::log::elevel::FATAL) != 0) + s = lsFATAL; + else if ((v & websocketpp::log::elevel::RERROR) != 0) + s = lsERROR; + else if ((v & websocketpp::log::elevel::WARN) != 0) + s = lsWARNING; + if (websocketPartition.doLog(s)) + Log(s, websocketPartition) << entry; + } + + } +} + +// vim:ts=4 diff --git a/src/cpp/websocketpp/src/logger/logger.hpp b/src/cpp/websocketpp/src/logger/logger.hpp index 37ccdf78a..6d1a5dfa5 100644 --- a/src/cpp/websocketpp/src/logger/logger.hpp +++ b/src/cpp/websocketpp/src/logger/logger.hpp @@ -71,7 +71,7 @@ namespace alevel { } namespace elevel { - typedef uint16_t value; + typedef uint32_t value; // make these two values different types DJS static const value OFF = 0x0; @@ -84,15 +84,16 @@ namespace elevel { static const value ALL = 0xFFFF; } + +extern void websocketLog(alevel::value, const std::string&); +extern void websocketLog(elevel::value, const std::string&); template class logger { public: template logger& operator<<(T a) { - if (test_level(m_write_level)) { - m_oss << a; - } + m_oss << a; // For now, make this unconditional DJS return *this; } @@ -130,6 +131,9 @@ public: } logger& print() { + websocketLog(m_write_level, m_oss.str()); // Hand to our logger DJS + m_oss.str(""); +#if 0 if (test_level(m_write_level)) { std::cout << m_prefix << boost::posix_time::to_iso_extended_string( @@ -137,8 +141,8 @@ public: ) << " [" << m_write_level << "] " << m_oss.str() << std::endl; m_oss.str(""); } - - return *this; +#endif + return *this; } logger& at(level_type l) { From 3bab52fb7514b223743b7770963ea04e4b9f810c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 13:20:39 -0800 Subject: [PATCH 025/525] Note opportunity for ledger wipe. --- src/cpp/ripple/TransactionFormats.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/TransactionFormats.h b/src/cpp/ripple/TransactionFormats.h index a67eb05c8..a9cab9ba8 100644 --- a/src/cpp/ripple/TransactionFormats.h +++ b/src/cpp/ripple/TransactionFormats.h @@ -60,7 +60,7 @@ const int TransactionMaxLen = 1048576; const uint32 tfPassive = 0x00010000; const uint32 tfOfferCreateMask = ~(tfPassive); -// Payment flags: +// Payment flags: (renumber on ledger wipe) const uint32 tfPaymentLegacy = 0x00010000; // Left here to avoid ledger change. const uint32 tfPartialPayment = 0x00020000; const uint32 tfLimitQuality = 0x00040000; From dc2b1d55aed48c027b361e9a7391188503bc7c17 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 14:04:54 -0800 Subject: [PATCH 026/525] Have TrustSet require reserve to set. --- src/cpp/ripple/TransactionErr.cpp | 2 + src/cpp/ripple/TransactionErr.h | 2 + src/cpp/ripple/TrustSetTransactor.cpp | 58 ++++++++++++++++++++++----- 3 files changed, 52 insertions(+), 10 deletions(-) diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index 40aa6edff..a36107e3b 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -50,10 +50,12 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { terDIR_FULL, "terDIR_FULL", "Can not add entry to full dir." }, { terFUNDS_SPENT, "terFUNDS_SPENT", "Can't set password, password set funds already spent." }, { terINSUF_FEE_B, "terINSUF_FEE_B", "Account balance can't pay fee." }, + { terINSUF_RESERVE, "terINSUF_RESERVE", "Insufficent reserve to add trust line." }, { terNO_ACCOUNT, "terNO_ACCOUNT", "The source account does not exist." }, { terNO_DST, "terNO_DST", "Destination does not exist. Send XRP to create it." }, { terNO_DST_INSUF_XRP, "terNO_DST_INSUF_XRP", "Destination does not exist. Too little XRP sent to create it." }, { terNO_LINE, "terNO_LINE", "No such line." }, + { terNO_LINE_INSUF_RESERVE, "terNO_LINE_INSUF_RESERVE", "No such line. Too little reserve to create it." }, { terNO_LINE_REDUNDANT, "terNO_LINE_REDUNDANT", "Can't set non-existant line to default." }, { terPRE_SEQ, "terPRE_SEQ", "Missing/inapplicable prior transaction." }, { terSET_MISSING_DST, "terSET_MISSING_DST", "Can't set password, destination missing." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index bed4e4f6e..0a17405ec 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -80,10 +80,12 @@ enum TER // aka TransactionEngineResult terDIR_FULL, terFUNDS_SPENT, terINSUF_FEE_B, + terINSUF_RESERVE, terNO_ACCOUNT, terNO_DST, terNO_DST_INSUF_XRP, terNO_LINE, + terNO_LINE_INSUF_RESERVE, terNO_LINE_REDUNDANT, terPRE_SEQ, terSET_MISSING_DST, diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index 1f80dbde4..a78697292 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -1,3 +1,5 @@ +#include "Application.h" + #include "TrustSetTransactor.h" #include @@ -52,6 +54,11 @@ TER TrustSetTransactor::doApply() return terNO_DST; } + const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); + const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); + // The reserve required to create the line. + const uint64 uReserveCreate = theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE + (uOwnerCount+1)* theConfig.FEE_OWNER_RESERVE); + STAmount saLimitAllow = saLimitAmount; saLimitAllow.setIssuer(mTxnAccountID); @@ -167,15 +174,20 @@ TER TrustSetTransactor::doApply() const bool bLowReserved = isSetBit(uFlagsIn, lsfLowReserve); const bool bHighReserved = isSetBit(uFlagsIn, lsfHighReserve); + bool bReserveIncrease = false; + if (bLowReserveSet && !bLowReserved) { // Set reserve for low account. - terResult = mEngine->getNodes().ownerCountAdjust(uLowAccountID, 1, sleLowAccount); - uFlagsOut |= lsfLowReserve; + terResult = mEngine->getNodes().ownerCountAdjust(uLowAccountID, 1, sleLowAccount); + uFlagsOut |= lsfLowReserve; + + if (!bHigh) + bReserveIncrease = true; } - if (bLowReserveClear && bLowReserved) + if (tesSUCCESS == terResult && bLowReserveClear && bLowReserved) { // Clear reserve for low account. @@ -183,15 +195,18 @@ TER TrustSetTransactor::doApply() uFlagsOut &= ~lsfLowReserve; } - if (bHighReserveSet && !bHighReserved) + if (tesSUCCESS == terResult && bHighReserveSet && !bHighReserved) { // Set reserve for high account. terResult = mEngine->getNodes().ownerCountAdjust(uHighAccountID, 1, sleHighAccount); uFlagsOut |= lsfHighReserve; + + if (bHigh) + bReserveIncrease = true; } - if (bHighReserveClear && bHighReserved) + if (tesSUCCESS == terResult && bHighReserveClear && bHighReserved) { // Clear reserve for high account. @@ -202,11 +217,17 @@ TER TrustSetTransactor::doApply() if (uFlagsIn != uFlagsOut) sleRippleState->setFieldU32(sfFlags, uFlagsOut); - if (bDefault) + if (tesSUCCESS != terResult) + { + Log(lsINFO) << "doTrustSet: Error"; + + nothing(); + } + else if (bDefault) { // Can delete. - uint64 uSrcRef; // <-- Ignored, dirs never delete. + uint64 uSrcRef; // <-- Ignored, dirs never delete. terResult = mEngine->getNodes().dirDelete(false, uSrcRef, Ledger::getOwnerDirIndex(uLowAccountID), sleRippleState->getIndex(), false); @@ -217,6 +238,15 @@ TER TrustSetTransactor::doApply() Log(lsINFO) << "doTrustSet: Deleting ripple line"; } + else if (bReserveIncrease + && isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote no. + && saSrcXRPBalance.getNValue() < uReserveCreate) // Reserve is not scaled by load. + { + Log(lsINFO) << "doTrustSet: Delay transaction: Insufficent reserve to add trust line."; + + // Another transaction could provide XRP to the account and then this transaction would succeed. + terResult = terINSUF_RESERVE; + } else { mEngine->entryModify(sleRippleState); @@ -225,14 +255,22 @@ TER TrustSetTransactor::doApply() } } // Line does not exist. - else if (!saLimitAmount // Setting default limit. - && (!bQualityIn || !uQualityIn) // Not setting quality in or setting default quality in. - && (!bQualityOut || !uQualityOut)) // Not setting quality out or setting default quality out. + else if (!saLimitAmount // Setting default limit. + && (!bQualityIn || !uQualityIn) // Not setting quality in or setting default quality in. + && (!bQualityOut || !uQualityOut)) // Not setting quality out or setting default quality out. { Log(lsINFO) << "doTrustSet: Redundant: Setting non-existent ripple line to defaults."; return terNO_LINE_REDUNDANT; } + else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote no. + && saSrcXRPBalance.getNValue() < uReserveCreate) // Reserve is not scaled by load. + { + Log(lsINFO) << "doTrustSet: Delay transaction: Line does not exist. Insufficent reserve to create line."; + + // Another transaction could create the account and then this transaction would succeed. + terResult = terNO_LINE_INSUF_RESERVE; + } else { // Create a new ripple line. From 6c3c104f8d7f1c3d1809a9c839885be85d0fc8ed Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 14:27:18 -0800 Subject: [PATCH 027/525] UT: Update send test for deleting ripple state entries. --- test/send-test.js | 46 +++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/test/send-test.js b/test/send-test.js index 00ee6f339..85c4487cd 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -180,25 +180,6 @@ buster.testCase("Sending", { }) .request(); }, - function (callback) { - self.what = "Zero a credit limit."; - - testutils.credit_limit(self.remote, "alice", "0/USD/mtgox", callback); - }, - function (callback) { - self.what = "Make sure still exists."; - - self.remote.request_ripple_balance("alice", "mtgox", "USD", 'CURRENT') - .on('ripple_state', function (m) { - buster.assert(m.account_balance.equals("0/USD/alice")); - buster.assert(m.account_limit.equals("0/USD/alice")); - buster.assert(m.issuer_balance.equals("0/USD/mtgox")); - buster.assert(m.issuer_limit.equals("0/USD/mtgox")); - - callback(); - }) - .request(); - }, // Set negative limit. function (callback) { self.remote.transaction() @@ -212,6 +193,33 @@ buster.testCase("Sending", { }) .submit(); }, + function (callback) { + self.what = "Zero a credit limit."; + + testutils.credit_limit(self.remote, "alice", "0/USD/mtgox", callback); + }, + function (callback) { + self.what = "Make sure line is deleted."; + + self.remote.request_ripple_balance("alice", "mtgox", "USD", 'CURRENT') + .on('ripple_state', function (m) { + // Used to keep lines. + // buster.assert(m.account_balance.equals("0/USD/alice")); + // buster.assert(m.account_limit.equals("0/USD/alice")); + // buster.assert(m.issuer_balance.equals("0/USD/mtgox")); + // buster.assert(m.issuer_limit.equals("0/USD/mtgox")); + + buster.assert(false); + }) + .on('error', function (m) { + // console.log("error: %s", JSON.stringify(m)); + buster.assert.equals('remoteError', m.error); + buster.assert.equals('entryNotFound', m.remote.error); + + callback(); + }) + .request(); + }, // TODO Check in both owner books. function (callback) { self.what = "Set another limit."; From 05b77f7468129eea418294fa8088a5d396d5d81b Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 14:28:34 -0800 Subject: [PATCH 028/525] Remove test file. --- testcommit.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 testcommit.txt diff --git a/testcommit.txt b/testcommit.txt deleted file mode 100644 index c05ac2bc0..000000000 --- a/testcommit.txt +++ /dev/null @@ -1 +0,0 @@ -test 12-17-12 From 220331394522ec566c3f3030db90b766200948ce Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 18 Dec 2012 14:39:02 -0800 Subject: [PATCH 029/525] Logging cleanups. --- src/cpp/ripple/Amount.cpp | 26 ++++++++++----------- src/cpp/ripple/LedgerConsensus.cpp | 4 ++-- src/cpp/ripple/RPCHandler.cpp | 2 +- src/cpp/ripple/SHAMap.cpp | 12 +++++----- src/cpp/ripple/SHAMapNodes.cpp | 12 ++++++---- src/cpp/ripple/SNTPClient.cpp | 36 ++++++++++++++--------------- src/cpp/ripple/SerializedLedger.cpp | 7 +++--- src/cpp/ripple/WSDoor.cpp | 8 +++---- 8 files changed, 54 insertions(+), 53 deletions(-) diff --git a/src/cpp/ripple/Amount.cpp b/src/cpp/ripple/Amount.cpp index c1e441621..8a3038fc2 100644 --- a/src/cpp/ripple/Amount.cpp +++ b/src/cpp/ripple/Amount.cpp @@ -277,7 +277,7 @@ bool STAmount::setValue(const std::string& sAmount) } catch (...) { - Log(lsINFO) << "Bad integer amount: " << sAmount; + cLog(lsINFO) << "Bad integer amount: " << sAmount; return false; } @@ -304,7 +304,7 @@ bool STAmount::setValue(const std::string& sAmount) } catch (...) { - Log(lsINFO) << "Bad e amount: " << sAmount; + cLog(lsINFO) << "Bad e amount: " << sAmount; return false; } @@ -346,7 +346,7 @@ bool STAmount::setValue(const std::string& sAmount) } catch (...) { - Log(lsINFO) << "Bad float amount: " << sAmount; + cLog(lsINFO) << "Bad float amount: " << sAmount; return false; } @@ -391,7 +391,7 @@ bool STAmount::setFullValue(const std::string& sAmount, const std::string& sCurr // if (!currencyFromString(mCurrency, sCurrency)) { - Log(lsINFO) << "Currency malformed: " << sCurrency; + cLog(lsINFO) << "Currency malformed: " << sCurrency; return false; } @@ -406,7 +406,7 @@ bool STAmount::setFullValue(const std::string& sAmount, const std::string& sCurr // Issuer must be "" or a valid account string. if (!naIssuerID.setAccountID(sIssuer)) { - Log(lsINFO) << "Issuer malformed: " << sIssuer; + cLog(lsINFO) << "Issuer malformed: " << sIssuer; return false; } @@ -416,7 +416,7 @@ bool STAmount::setFullValue(const std::string& sAmount, const std::string& sCurr // Stamps not must have an issuer. if (mIsNative && !mIssuer.isZero()) { - Log(lsINFO) << "Issuer specified for XRP: " << sIssuer; + cLog(lsINFO) << "Issuer specified for XRP: " << sIssuer; return false; } @@ -1050,7 +1050,7 @@ bool STAmount::applyOffer( saTakerPaid = saOfferGets; // Taker paid what offer could get. saTakerGot = saOfferPays; // Taker got what offer could pay. - Log(lsINFO) << "applyOffer: took all outright"; + cLog(lsINFO) << "applyOffer: took all outright"; } else if (saTakerFunds >= saOfferGetsAvailable) { @@ -1058,7 +1058,7 @@ bool STAmount::applyOffer( saTakerPaid = saOfferGetsAvailable; // Taker paid what offer could get. saTakerGot = saOfferPaysAvailable; // Taker got what offer could pay. - Log(lsINFO) << "applyOffer: took all available"; + cLog(lsINFO) << "applyOffer: took all available"; } else { @@ -1066,8 +1066,8 @@ bool STAmount::applyOffer( saTakerPaid = saTakerFunds; // Taker paid all he had. saTakerGot = divide(multiply(saTakerFunds, saOfferPaysAvailable, CURRENCY_ONE, ACCOUNT_ONE), saOfferGetsAvailable, saOfferPays.getCurrency(), saOfferPays.getIssuer()); - Log(lsINFO) << "applyOffer: saTakerGot=" << saTakerGot.getFullText(); - Log(lsINFO) << "applyOffer: saOfferPaysAvailable=" << saOfferPaysAvailable.getFullText(); + cLog(lsINFO) << "applyOffer: saTakerGot=" << saTakerGot.getFullText(); + cLog(lsINFO) << "applyOffer: saOfferPaysAvailable=" << saOfferPaysAvailable.getFullText(); } if (uTakerPaysRate == QUALITY_ONE) @@ -1394,7 +1394,7 @@ BOOST_AUTO_TEST_CASE( CustomCurrency_test ) BOOST_FAIL("STAmount multiply fail"); if (STAmount::divide(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 60), STAmount(3), CURRENCY_ONE, ACCOUNT_ONE).getText() != "20") { - Log(lsFATAL) << "60/3 = " << + cLog(lsFATAL) << "60/3 = " << STAmount::divide(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 60), STAmount(3), CURRENCY_ONE, ACCOUNT_ONE).getText(); BOOST_FAIL("STAmount divide fail"); @@ -1449,7 +1449,7 @@ static void mulTest(int a, int b) STAmount prod2(CURRENCY_ONE, ACCOUNT_ONE, static_cast(a) * static_cast(b)); if (prod1 != prod2) { - Log(lsWARNING) << "nn(" << aa.getFullText() << " * " << bb.getFullText() << ") = " << prod1.getFullText() + cLog(lsWARNING) << "nn(" << aa.getFullText() << " * " << bb.getFullText() << ") = " << prod1.getFullText() << " not " << prod2.getFullText(); BOOST_WARN("Multiplication result is not exact"); } @@ -1457,7 +1457,7 @@ static void mulTest(int a, int b) prod1 = STAmount::multiply(aa, bb, CURRENCY_ONE, ACCOUNT_ONE); if (prod1 != prod2) { - Log(lsWARNING) << "n(" << aa.getFullText() << " * " << bb.getFullText() << ") = " << prod1.getFullText() + cLog(lsWARNING) << "n(" << aa.getFullText() << " * " << bb.getFullText() << ") = " << prod1.getFullText() << " not " << prod2.getFullText(); BOOST_WARN("Multiplication result is not exact"); } diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index a06edc4ad..7953a1146 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1232,10 +1232,10 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) if (sLog(lsTRACE)) { - Log(lsTRACE) << "newLCL"; + cLog(lsTRACE) << "newLCL"; Json::Value p; newLCL->addJson(p, LEDGER_JSON_DUMP_TXRP | LEDGER_JSON_DUMP_STATE); - Log(lsTRACE) << p; + cLog(lsTRACE) << p; } statusChange(ripple::neACCEPTED_LEDGER, *newLCL); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 98a003c4a..ee5f63b14 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1006,7 +1006,7 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) { naMasterAccountPublic.setAccountPublic(naMasterGenerator, iIndex); - Log(lsWARNING) << "authorize: " << iIndex << " : " << naMasterAccountPublic.humanAccountID() << " : " << raSrcAddressID.humanAccountID(); + cLog(lsWARNING) << "authorize: " << iIndex << " : " << naMasterAccountPublic.humanAccountID() << " : " << raSrcAddressID.humanAccountID(); bFound = raSrcAddressID.getAccountID() == naMasterAccountPublic.getAccountID(); if (!bFound) diff --git a/src/cpp/ripple/SHAMap.cpp b/src/cpp/ripple/SHAMap.cpp index 4c83e1f0f..8d68fff13 100644 --- a/src/cpp/ripple/SHAMap.cpp +++ b/src/cpp/ripple/SHAMap.cpp @@ -707,7 +707,7 @@ SHAMapTreeNode::pointer SHAMap::fetchNodeExternal(const SHAMapNode& id, const ui HashedObject::pointer obj(theApp->getHashedObjectStore().retrieve(hash)); if (!obj) { -// Log(lsTRACE) << "fetchNodeExternal: missing " << hash; +// cLog(lsTRACE) << "fetchNodeExternal: missing " << hash; throw SHAMapMissingNode(mType, id, hash); } @@ -716,13 +716,13 @@ SHAMapTreeNode::pointer SHAMap::fetchNodeExternal(const SHAMapNode& id, const ui SHAMapTreeNode::pointer ret = boost::make_shared(id, obj->getData(), mSeq - 1, snfPREFIX); if (id != *ret) { - Log(lsFATAL) << "id:" << id << ", got:" << *ret; + cLog(lsFATAL) << "id:" << id << ", got:" << *ret; assert(false); return SHAMapTreeNode::pointer(); } if (ret->getNodeHash() != hash) { - Log(lsFATAL) << "Hashes don't match"; + cLog(lsFATAL) << "Hashes don't match"; assert(false); return SHAMapTreeNode::pointer(); } @@ -745,11 +745,11 @@ void SHAMap::fetchRoot(const uint256& hash) if (sLog(lsTRACE)) { if (mType == smtTRANSACTION) - Log(lsTRACE) << "Fetch root TXN node " << hash; + cLog(lsTRACE) << "Fetch root TXN node " << hash; else if (mType == smtSTATE) - Log(lsTRACE) << "Fetch root STATE node " << hash; + cLog(lsTRACE) << "Fetch root STATE node " << hash; else - Log(lsTRACE) << "Fetch root SHAMap node " << hash; + cLog(lsTRACE) << "Fetch root SHAMap node " << hash; } root = fetchNodeExternal(SHAMapNode(), hash); assert(root->getNodeHash() == hash); diff --git a/src/cpp/ripple/SHAMapNodes.cpp b/src/cpp/ripple/SHAMapNodes.cpp index a296c54f7..5d6877805 100644 --- a/src/cpp/ripple/SHAMapNodes.cpp +++ b/src/cpp/ripple/SHAMapNodes.cpp @@ -16,6 +16,8 @@ #include "Log.h" #include "HashPrefixes.h" +SETUP_LOG(); + std::string SHAMapNode::getString() const { static boost::format NodeID("NodeID(%s,%s)"); @@ -170,7 +172,7 @@ int SHAMapNode::selectBranch(const uint256& hash) const void SHAMapNode::dump() const { - Log(lsDEBUG) << getString(); + cLog(lsDEBUG) << getString(); } SHAMapTreeNode::SHAMapTreeNode(uint32 seq, const SHAMapNode& nodeID) : SHAMapNode(nodeID), mHash(0), @@ -265,7 +267,7 @@ SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& id, const std::vector(u, s.peekData()); @@ -313,7 +315,7 @@ SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& id, const std::vector::iterator query = mQueries.find(mReceiveEndpoint); if (query == mQueries.end()) - Log(lsDEBUG) << "SNTP: Reply from " << mReceiveEndpoint << " found without matching query"; + cLog(lsDEBUG) << "SNTP: Reply from " << mReceiveEndpoint << " found without matching query"; else if (query->second.mReceivedReply) - Log(lsDEBUG) << "SNTP: Duplicate response from " << mReceiveEndpoint; + cLog(lsDEBUG) << "SNTP: Duplicate response from " << mReceiveEndpoint; else { query->second.mReceivedReply = true; if (time(NULL) > (query->second.mLocalTimeSent + 1)) - Log(lsWARNING) << "SNTP: Late response from " << mReceiveEndpoint; + cLog(lsWARNING) << "SNTP: Late response from " << mReceiveEndpoint; else if (bytes_xferd < 48) - Log(lsWARNING) << "SNTP: Short reply from " << mReceiveEndpoint + cLog(lsWARNING) << "SNTP: Short reply from " << mReceiveEndpoint << " (" << bytes_xferd << ") " << mReceiveBuffer.size(); else if (reinterpret_cast(&mReceiveBuffer[0])[NTP_OFF_ORGTS_FRAC] != query->second.mQueryNonce) - Log(lsWARNING) << "SNTP: Reply from " << mReceiveEndpoint << "had wrong nonce"; + cLog(lsWARNING) << "SNTP: Reply from " << mReceiveEndpoint << "had wrong nonce"; else processReply(); } @@ -123,8 +125,7 @@ void SNTPClient::receivePacket(const boost::system::error_code& error, std::size void SNTPClient::sendComplete(const boost::system::error_code& error, std::size_t) { - if (error) - Log(lsWARNING) << "SNTP: Send error"; + tLog(error, lsWARNING) << "SNTP: Send error"; } void SNTPClient::processReply() @@ -138,12 +139,12 @@ void SNTPClient::processReply() if ((info >> 30) == 3) { - Log(lsINFO) << "SNTP: Alarm condition " << mReceiveEndpoint; + cLog(lsINFO) << "SNTP: Alarm condition " << mReceiveEndpoint; return; } if ((stratum == 0) || (stratum > 14)) { - Log(lsINFO) << "SNTP: Unreasonable stratum (" << stratum << ") from " << mReceiveEndpoint; + cLog(lsINFO) << "SNTP: Unreasonable stratum (" << stratum << ") from " << mReceiveEndpoint; return; } @@ -171,10 +172,7 @@ void SNTPClient::processReply() if ((mOffset == -1) || (mOffset == 1)) // small corrections likely do more harm than good mOffset = 0; -#ifndef SNTP_DEBUG - if (timev || mOffset) -#endif - Log(lsTRACE) << "SNTP: Offset is " << timev << ", new system offset is " << mOffset; + tLog(timev || mOffset, lsTRACE) << "SNTP: Offset is " << timev << ", new system offset is " << mOffset; } void SNTPClient::timerEntry(const boost::system::error_code& error) @@ -198,7 +196,7 @@ void SNTPClient::init(const std::vector& servers) std::vector::const_iterator it = servers.begin(); if (it == servers.end()) { - Log(lsINFO) << "SNTP: no server specified"; + cLog(lsINFO) << "SNTP: no server specified"; return; } BOOST_FOREACH(const std::string& it, servers) @@ -231,13 +229,13 @@ bool SNTPClient::doQuery() best = it; if (best == mServers.end()) { - Log(lsINFO) << "SNTP: No server to query"; + cLog(lsINFO) << "SNTP: No server to query"; return false; } time_t now = time(NULL); if ((best->second != (time_t) -1) && ((best->second + NTP_MIN_QUERY) >= now)) { - Log(lsTRACE) << "SNTP: All servers recently queried"; + cLog(lsTRACE) << "SNTP: All servers recently queried"; return false; } best->second = now; @@ -247,7 +245,7 @@ bool SNTPClient::doQuery() boost::bind(&SNTPClient::resolveComplete, this, boost::asio::placeholders::error, boost::asio::placeholders::iterator)); #ifdef SNTP_DEBUG - Log(lsTRACE) << "SNTP: Resolve pending for " << best->first; + cLog(lsTRACE) << "SNTP: Resolve pending for " << best->first; #endif return true; } diff --git a/src/cpp/ripple/SerializedLedger.cpp b/src/cpp/ripple/SerializedLedger.cpp index 9f70f7c52..8d6804a4d 100644 --- a/src/cpp/ripple/SerializedLedger.cpp +++ b/src/cpp/ripple/SerializedLedger.cpp @@ -6,6 +6,7 @@ #include "Log.h" DECLARE_INSTANCE(SerializedLedgerEntry) +SETUP_LOG(); SerializedLedgerEntry::SerializedLedgerEntry(SerializerIterator& sit, const uint256& index) : STObject(sfLedgerEntry), mIndex(index) @@ -33,8 +34,8 @@ SerializedLedgerEntry::SerializedLedgerEntry(const Serializer& s, const uint256& mType = mFormat->t_type; if (!setType(mFormat->elements)) { - Log(lsWARNING) << "Ledger entry not valid for type " << mFormat->t_name; - Log(lsWARNING) << getJson(0); + cLog(lsWARNING) << "Ledger entry not valid for type " << mFormat->t_name; + cLog(lsWARNING) << getJson(0); throw std::runtime_error("ledger entry not valid for type"); } } @@ -99,7 +100,7 @@ uint32 SerializedLedgerEntry::getThreadedLedger() bool SerializedLedgerEntry::thread(const uint256& txID, uint32 ledgerSeq, uint256& prevTxID, uint32& prevLedgerID) { uint256 oldPrevTxID = getFieldH256(sfPreviousTxnID); - Log(lsTRACE) << "Thread Tx:" << txID << " prev:" << oldPrevTxID; + cLog(lsTRACE) << "Thread Tx:" << txID << " prev:" << oldPrevTxID; if (oldPrevTxID == txID) { // this transaction is already threaded assert(getFieldU32(sfPreviousTxnLgrSeq) == ledgerSeq); diff --git a/src/cpp/ripple/WSDoor.cpp b/src/cpp/ripple/WSDoor.cpp index cd523c0de..a992d667c 100644 --- a/src/cpp/ripple/WSDoor.cpp +++ b/src/cpp/ripple/WSDoor.cpp @@ -78,7 +78,7 @@ void WSDoor::startListening() } catch (websocketpp::exception& e) { - Log(lsWARNING) << "websocketpp exception: " << e.what(); + cLog(lsWARNING) << "websocketpp exception: " << e.what(); while (1) // temporary workaround for websocketpp throwing exceptions on access/close races { // https://github.com/zaphoyd/websocketpp/issues/98 try @@ -88,7 +88,7 @@ void WSDoor::startListening() } catch (websocketpp::exception& e) { - Log(lsWARNING) << "websocketpp exception: " << e.what(); + cLog(lsWARNING) << "websocketpp exception: " << e.what(); } } } @@ -114,7 +114,7 @@ void WSDoor::startListening() } catch (websocketpp::exception& e) { - Log(lsWARNING) << "websocketpp exception: " << e.what(); + cLog(lsWARNING) << "websocketpp exception: " << e.what(); while (1) // temporary workaround for websocketpp throwing exceptions on access/close races { // https://github.com/zaphoyd/websocketpp/issues/98 try @@ -124,7 +124,7 @@ void WSDoor::startListening() } catch (websocketpp::exception& e) { - Log(lsWARNING) << "websocketpp exception: " << e.what(); + cLog(lsWARNING) << "websocketpp exception: " << e.what(); } } } From 8b19a356f5043a2988fc583e61c042adfe171371 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 14:40:11 -0800 Subject: [PATCH 030/525] Default owner count to 0 if not available. --- src/cpp/ripple/LedgerEntrySet.cpp | 34 ++++-------------------- src/cpp/ripple/LedgerEntrySet.h | 2 +- src/cpp/ripple/OfferCreateTransactor.cpp | 7 ++--- src/cpp/ripple/TrustSetTransactor.cpp | 27 ++++++++----------- 4 files changed, 19 insertions(+), 51 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index e1774f1a9..d47be76c9 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -845,7 +845,7 @@ bool LedgerEntrySet::dirNext( } // If there is a count, adjust the owner count by iAmount. Otherwise, compute the owner count and store it. -TER LedgerEntrySet::ownerCountAdjust(const uint160& uOwnerID, int iAmount, SLE::ref sleAccountRoot) +void LedgerEntrySet::ownerCountAdjust(const uint160& uOwnerID, int iAmount, SLE::ref sleAccountRoot) { SLE::pointer sleHold = sleAccountRoot ? SLE::pointer() @@ -855,31 +855,10 @@ TER LedgerEntrySet::ownerCountAdjust(const uint160& uOwnerID, int iAmount, SLE:: ? sleAccountRoot : sleHold; - const bool bHaveOwnerCount = sleRoot->isFieldPresent(sfOwnerCount); - TER terResult; + const uint32 uOwnerCount = sleRoot->getFieldU32(sfOwnerCount); - if (bHaveOwnerCount) - { - const uint32 uOwnerCount = sleRoot->getFieldU32(sfOwnerCount); - - if (iAmount + int(uOwnerCount) >= 0) - sleRoot->setFieldU32(sfOwnerCount, uOwnerCount+iAmount); - - terResult = tesSUCCESS; - } - else - { - uint32 uActualCount; - - terResult = dirCount(Ledger::getOwnerDirIndex(uOwnerID), uActualCount); - - if (tesSUCCESS == terResult) - { - sleRoot->setFieldU32(sfOwnerCount, uActualCount); - } - } - - return terResult; + if (iAmount + int(uOwnerCount) >= 0) + sleRoot->setFieldU32(sfOwnerCount, uOwnerCount+iAmount); } TER LedgerEntrySet::offerDelete(const SLE::pointer& sleOffer, const uint256& uOfferIndex, const uint160& uOwnerID) @@ -889,11 +868,8 @@ TER LedgerEntrySet::offerDelete(const SLE::pointer& sleOffer, const uint256& uOf if (tesSUCCESS == terResult) { - terResult = ownerCountAdjust(uOwnerID, -1); - } + ownerCountAdjust(uOwnerID, -1); - if (tesSUCCESS == terResult) - { uint256 uDirectory = sleOffer->getFieldH256(sfBookDirectory); uint64 uBookNode = sleOffer->getFieldU64(sfBookNode); diff --git a/src/cpp/ripple/LedgerEntrySet.h b/src/cpp/ripple/LedgerEntrySet.h index 52958df73..5faf18476 100644 --- a/src/cpp/ripple/LedgerEntrySet.h +++ b/src/cpp/ripple/LedgerEntrySet.h @@ -103,7 +103,7 @@ public: bool dirNext(const uint256& uRootIndex, SLE::pointer& sleNode, unsigned int& uDirEntry, uint256& uEntryIndex); TER dirCount(const uint256& uDirIndex, uint32& uCount); - TER ownerCountAdjust(const uint160& uOwnerID, int iAmount, SLE::ref sleAccountRoot=SLE::pointer()); + void ownerCountAdjust(const uint160& uOwnerID, int iAmount, SLE::ref sleAccountRoot=SLE::pointer()); // Offer functions. TER offerDelete(const uint256& uOfferIndex); diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index 1d8fb249d..764ad1926 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -397,14 +397,11 @@ TER OfferCreateTransactor::doApply() boost::bind(&Ledger::qualityDirDescriber, _1, saTakerPays.getCurrency(), uPaysIssuerID, saTakerGets.getCurrency(), uGetsIssuerID, uRate)); - // Update owner count. - if (tesSUCCESS == terResult) - { - terResult = mEngine->getNodes().ownerCountAdjust(mTxnAccountID, 1, mTxnAccount); - } if (tesSUCCESS == terResult) { + mEngine->getNodes().ownerCountAdjust(mTxnAccountID, 1, mTxnAccount); // Update owner count. + uint256 uBookBase = Ledger::getBookBase(uPaysCurrency, uPaysIssuerID, uGetsCurrency, uGetsIssuerID); Log(lsINFO) << boost::str(boost::format("doOfferCreate: adding to book: %s : %s/%s -> %s/%s") diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index a78697292..0447e13e4 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -180,50 +180,44 @@ TER TrustSetTransactor::doApply() { // Set reserve for low account. - terResult = mEngine->getNodes().ownerCountAdjust(uLowAccountID, 1, sleLowAccount); + mEngine->getNodes().ownerCountAdjust(uLowAccountID, 1, sleLowAccount); uFlagsOut |= lsfLowReserve; if (!bHigh) bReserveIncrease = true; } - if (tesSUCCESS == terResult && bLowReserveClear && bLowReserved) + if (bLowReserveClear && bLowReserved) { // Clear reserve for low account. - terResult = mEngine->getNodes().ownerCountAdjust(uLowAccountID, -1, sleLowAccount); + mEngine->getNodes().ownerCountAdjust(uLowAccountID, -1, sleLowAccount); uFlagsOut &= ~lsfLowReserve; } - if (tesSUCCESS == terResult && bHighReserveSet && !bHighReserved) + if (bHighReserveSet && !bHighReserved) { // Set reserve for high account. - terResult = mEngine->getNodes().ownerCountAdjust(uHighAccountID, 1, sleHighAccount); + mEngine->getNodes().ownerCountAdjust(uHighAccountID, 1, sleHighAccount); uFlagsOut |= lsfHighReserve; if (bHigh) bReserveIncrease = true; } - if (tesSUCCESS == terResult && bHighReserveClear && bHighReserved) + if (bHighReserveClear && bHighReserved) { // Clear reserve for high account. - terResult = mEngine->getNodes().ownerCountAdjust(uHighAccountID, -1, sleHighAccount); + mEngine->getNodes().ownerCountAdjust(uHighAccountID, -1, sleHighAccount); uFlagsOut &= ~lsfHighReserve; } if (uFlagsIn != uFlagsOut) sleRippleState->setFieldU32(sfFlags, uFlagsOut); - if (tesSUCCESS != terResult) - { - Log(lsINFO) << "doTrustSet: Error"; - - nothing(); - } - else if (bDefault) + if (bDefault) { // Can delete. @@ -299,14 +293,15 @@ TER TrustSetTransactor::doApply() boost::bind(&Ledger::ownerDirDescriber, _1, mTxnAccountID)); if (tesSUCCESS == terResult) - terResult = mEngine->getNodes().ownerCountAdjust(mTxnAccountID, 1, mTxnAccount); + { + mEngine->getNodes().ownerCountAdjust(mTxnAccountID, 1, mTxnAccount); - if (tesSUCCESS == terResult) terResult = mEngine->getNodes().dirAdd( uSrcRef, Ledger::getOwnerDirIndex(uDstAccountID), sleRippleState->getIndex(), boost::bind(&Ledger::ownerDirDescriber, _1, uDstAccountID)); + } } Log(lsINFO) << "doTrustSet<"; From a30d065e875aaafa229ec24ce72ff745a7e10dcb Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 15:07:23 -0800 Subject: [PATCH 031/525] OfferCreate takes reserves into account. --- src/cpp/ripple/OfferCreateTransactor.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index 764ad1926..92a085e01 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -1,3 +1,5 @@ +#include "Application.h" + #include "OfferCreateTransactor.h" #include @@ -382,10 +384,16 @@ TER OfferCreateTransactor::doApply() // Log(lsWARNING) << "doOfferCreate: takeOffers: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); // Log(lsWARNING) << "doOfferCreate: takeOffers: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); + const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); + const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); + // The reserve required to create the line. + const uint64 uReserveCreate = theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE + (uOwnerCount+1)* theConfig.FEE_OWNER_RESERVE); + if (tesSUCCESS == terResult && saTakerPays // Still wanting something. && saTakerGets // Still offering something. - && mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).isPositive()) // Still funded. + && mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).isPositive() // Still funded. + && saSrcXRPBalance.getNValue() >= uReserveCreate) // Have enough reserve to create offer. { // We need to place the remainder of the offer into its order book. Log(lsINFO) << boost::str(boost::format("doOfferCreate: offer not fully consumed: saTakerPays=%s saTakerGets=%s") From bc1c650ec3669b296d21b82a60e7e67fbfa7fb46 Mon Sep 17 00:00:00 2001 From: Jcar Date: Tue, 18 Dec 2012 17:27:19 -0800 Subject: [PATCH 032/525] Got it to work in XCode :-) Including: -Replicate Scons in Xcode configuration by importing various libraries -That's the end of the list --- .DS_Store | Bin 0 -> 15364 bytes NewCoin.1 | 79 + NewCoin/NewCoin.xcodeproj/project.pbxproj | 26259 ++++++++++++++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 21683 bytes .../xcschemes/NewCoin.xcscheme | 86 + .../xcschemes/xcschememanagement.plist | 22 + NewCoin/NewCoin/NewCoin.1 | 79 + NewCoin/NewCoin/main.cpp | 18 + SConstruct | 4 +- bin/.DS_Store | Bin 0 -> 6148 bytes rippled/rippled.xcodeproj/project.pbxproj | 2738 ++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 31625 bytes .../xcschemes/rippled.xcscheme | 86 + .../xcschemes/xcschememanagement.plist | 22 + rippled/rippled/rippled.1 | Bin 0 -> 3121 bytes src/.DS_Store | Bin 0 -> 6148 bytes src/cpp/.DS_Store | Bin 0 -> 6148 bytes src/cpp/ripple/.DS_Store | Bin 0 -> 24580 bytes .../WebSocket++ Dynamic Library.xcscheme | 59 + .../WebSocket++ Static Library.xcscheme | 59 + .../xcschemes/broadcast_server.xcscheme | 86 + .../xcschemes/chat_client.xcscheme | 86 + .../xcschemes/concurrent_server.xcscheme | 86 + .../xcschemes/echo_client.xcscheme | 86 + .../xcschemes/echo_server.xcscheme | 86 + .../xcschemes/echo_server_tls.xcscheme | 86 + .../xcschemes/fuzzing_client.xcscheme | 86 + .../xcschemes/fuzzing_server.xcscheme | 86 + .../xcschemes/policy_test.xcscheme | 86 + .../xcschemes/stress_client.xcscheme | 86 + .../xcschemes/wsperf.xcscheme | 86 + .../xcschemes/xcschememanagement.plist | 142 + test/.DS_Store | Bin 0 -> 6148 bytes validators.txt | 25 + 36 files changed, 30636 insertions(+), 2 deletions(-) create mode 100644 .DS_Store create mode 100644 NewCoin.1 create mode 100644 NewCoin/NewCoin.xcodeproj/project.pbxproj create mode 100644 NewCoin/NewCoin.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 NewCoin/NewCoin.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/NewCoin.xcscheme create mode 100644 NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 NewCoin/NewCoin/NewCoin.1 create mode 100644 NewCoin/NewCoin/main.cpp create mode 100644 bin/.DS_Store create mode 100644 rippled/rippled.xcodeproj/project.pbxproj create mode 100644 rippled/rippled.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 rippled/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/rippled.xcscheme create mode 100644 rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 rippled/rippled/rippled.1 create mode 100644 src/.DS_Store create mode 100644 src/cpp/.DS_Store create mode 100644 src/cpp/ripple/.DS_Store create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/WebSocket++ Dynamic Library.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/WebSocket++ Static Library.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/broadcast_server.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/chat_client.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/concurrent_server.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_client.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_server.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_server_tls.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/fuzzing_client.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/fuzzing_server.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/policy_test.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/stress_client.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/wsperf.xcscheme create mode 100644 src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 test/.DS_Store create mode 100644 validators.txt diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..546bb98bdb0f8fe8ce0fd6edef222684f6529b06 GIT binary patch literal 15364 zcmeI1-%k@k5XWaJKUzQ}8pZf@(Fc9NrWF-Pe5eRU5;ew}V4?=wUWIDuk@gChidO#y zANVWu-|)d_{{g?Vx5eA*(e#O^nN9ZQe$346d}epb9z>)Tnr@cJA)+KY%gJ#Z zVj4f^-qi-oo%4_i_T-g{Rj-Jv$u3>FAq0eg5D)@FKnVOD1n`^9EjboQISK(GAOsEw zaD8ylS>}vv2U3>~9P}0dauBz5!@2(BAJX9)kU1mUfy5m&6_`Q>rpjzFl-WC|z#PwW zM!y}%z?_tRGyIr0E3-pUX6vCGtxhTzNI41tA<#{L_wETQQiW>E)$smZt>DQ8^dI~C z+RSJbw;P*gm;bT2S*#wg)PPJMy*|}+Fes*`-Y0b`NrkyJ@ zbGy5#WHL4RA$jUt`ugpMh1TocH*fVQNtpsc$AasF<2#(07`F2DTGgwq;SOsLA^s)^ zRLQj&&=)+th(2!^43kS`+JvS@uOhljMz>*fN9YbM(@k2Udz7aoTU&jLcpiaPnYN+t zb?1U^L3?jsH=GfrY;8(Y*7mPQz6Z^pW;A0|)Ba0=e^@jSMKtFRV8K?Mc#n5kZBdDK zK%fpkFYI^fn8Mamy{$2Z=bE~Yk=3bTd*hgOQSXdp9Ns+5f0Z`$SrZYIyX=s&h}|X? zFzS~$u0cOdFA%#I7rSLQOb?K|8?;DwEuU@-nG)u}S`3-* zAu?kTFKJ}6+lrZltwyoxcs13KZ66+*u!`hBF$3GCfjshjT!j^{6c!^f8N3U1Qc>Tvg(vg?&xL`idVdR+D8rhTpR?ep`Fi zYaL_wjibh@Q?+%y?v6My7m66C(u9Bz5CTF#2nd0`2qXe6hrj=0_j=g>|NHVKN + + + + diff --git a/NewCoin/NewCoin.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate b/NewCoin/NewCoin.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..8a25e7f4d5da93574a71b72955654fc58964d2d0 GIT binary patch literal 21683 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

sLU+gpTAk;zry4qOhC?t`n*^=2_dWC2_MvQ|OZ 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 literal 0 HcmV?d00001 diff --git a/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/NewCoin.xcscheme b/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/NewCoin.xcscheme new file mode 100644 index 000000000..7d4cd49af --- /dev/null +++ b/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/NewCoin.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist b/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..8edaabe80 --- /dev/null +++ b/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + NewCoin.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + C1EA4FC71680FDCA00A21259 + + primary + + + + + diff --git a/NewCoin/NewCoin/NewCoin.1 b/NewCoin/NewCoin/NewCoin.1 new file mode 100644 index 000000000..f1c75d815 --- /dev/null +++ b/NewCoin/NewCoin/NewCoin.1 @@ -0,0 +1,79 @@ +.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. +.\"See Also: +.\"man mdoc.samples for a complete listing of options +.\"man mdoc for the short list of editing options +.\"/usr/share/misc/mdoc.template +.Dd 12/18/12 \" DATE +.Dt NewCoin 1 \" Program name and manual section number +.Os Darwin +.Sh NAME \" Section Header - required - don't modify +.Nm NewCoin, +.\" The following lines are read in generating the apropos(man -k) database. Use only key +.\" words here as the database is built based on the words here and in the .ND line. +.Nm Other_name_for_same_program(), +.Nm Yet another name for the same program. +.\" Use .Nm macro to designate other names for the documented program. +.Nd This line parsed for whatis database. +.Sh SYNOPSIS \" Section Header - required - don't modify +.Nm +.Op Fl abcd \" [-abcd] +.Op Fl a Ar path \" [-a path] +.Op Ar file \" [file] +.Op Ar \" [file ...] +.Ar arg0 \" Underlined argument - use .Ar anywhere to underline +arg2 ... \" Arguments +.Sh DESCRIPTION \" Section Header - required - don't modify +Use the .Nm macro to refer to your program throughout the man page like such: +.Nm +Underlining is accomplished with the .Ar macro like this: +.Ar underlined text . +.Pp \" Inserts a space +A list of items with descriptions: +.Bl -tag -width -indent \" Begins a tagged list +.It item a \" Each item preceded by .It macro +Description of item a +.It item b +Description of item b +.El \" Ends the list +.Pp +A list of flags and their descriptions: +.Bl -tag -width -indent \" Differs from above in tag removed +.It Fl a \"-a flag as a list item +Description of -a flag +.It Fl b +Description of -b flag +.El \" Ends the list +.Pp +.\" .Sh ENVIRONMENT \" May not be needed +.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 +.\" .It Ev ENV_VAR_1 +.\" Description of ENV_VAR_1 +.\" .It Ev ENV_VAR_2 +.\" Description of ENV_VAR_2 +.\" .El +.Sh FILES \" File used or created by the topic of the man page +.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact +.It Pa /usr/share/file_name +FILE_1 description +.It Pa /Users/joeuser/Library/really_long_file_name +FILE_2 description +.El \" Ends the list +.\" .Sh DIAGNOSTICS \" May not be needed +.\" .Bl -diag +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .El +.Sh SEE ALSO +.\" List links in ascending order by section, alphabetically within a section. +.\" Please do not reference files that do not exist without filing a bug report +.Xr a 1 , +.Xr b 1 , +.Xr c 1 , +.Xr a 2 , +.Xr b 2 , +.Xr a 3 , +.Xr b 3 +.\" .Sh BUGS \" Document known, unremedied bugs +.\" .Sh HISTORY \" Document history if command behaves in a unique manner \ No newline at end of file diff --git a/NewCoin/NewCoin/main.cpp b/NewCoin/NewCoin/main.cpp new file mode 100644 index 000000000..9e48d521d --- /dev/null +++ b/NewCoin/NewCoin/main.cpp @@ -0,0 +1,18 @@ +// +// main.cpp +// NewCoin +// +// Created by Jcar on 12/18/12. +// Copyright (c) 2012 Jcar. All rights reserved. +// + +#include + +int main(int argc, const char * argv[]) +{ + + // insert code here... + std::cout << "Hello, World!\n"; + return 0; +} + diff --git a/SConstruct b/SConstruct index 458f48c94..48c6ebac7 100644 --- a/SConstruct +++ b/SConstruct @@ -91,8 +91,8 @@ env.Append(CCFLAGS = ['-pthread', '-Wall', '-Wno-sign-compare', '-Wno-char-subsc env.Append(CXXFLAGS = ['-O0', '-pthread', '-Wno-invalid-offsetof', '-Wformat']+BOOSTFLAGS+DEBUGFLAGS) if OSX: - env.Append(LINKFLAGS = ['-L/usr/local/Cellar/openssl/1.0.1c/lib']) - env.Append(CXXFLAGS = ['-I/usr/local/Cellar/openssl/1.0.1c/include']) + env.Append(LINKFLAGS = ['-L/usr/local/opt/openssl/lib']) + env.Append(CXXFLAGS = ['-I/usr/local/opt/openssl/include']) DB_SRCS = glob.glob('src/cpp/database/*.c') + glob.glob('src/cpp/database/*.cpp') JSON_SRCS = glob.glob('src/cpp/json/*.cpp') diff --git a/bin/.DS_Store b/bin/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e13e9249c02686f9a9f00928abdff692f0f6299b GIT binary patch literal 6148 zcmeHKOHRWu5Pc4nDB{;8OE1~5;094ukl4ZnAf$_kh*TvJEOQJF#R0etys@n+vFWy| z(2O*G&SYLPeu*+M05k8(YhVUoN*BzIIQ(I9UOcfZL=K6@U8BJoFStU1F3HxwJ}My3 z?i84i@GV8C9lXW{qn~dXTV9qtQe`#M!c_xcb@Rptl*6`Jn;>R z*ycWBr}b`Qen-r-UST#^MfJ)$KL_hPOX}^gLdj}dEF-S0b;!-g{TS!C6%BJpQBws} z0aaj!3b1F3O^-e5s0ye8s=!78`94^>U>>md=sq1B+!la1Vb~ex@}npm8!!*pd*m6K z@l>Lxny|$%p3b-pd3nIzqo>1!&4&qhHerWi+}(M7>(XIzk2V!Z literal 0 HcmV?d00001 diff --git a/rippled/rippled.xcodeproj/project.pbxproj b/rippled/rippled.xcodeproj/project.pbxproj new file mode 100644 index 000000000..c4c91d943 --- /dev/null +++ b/rippled/rippled.xcodeproj/project.pbxproj @@ -0,0 +1,2738 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + C10365C9168147D200D9D15C /* ripple.pb.cc in Sources */ = {isa = PBXBuildFile; fileRef = C10365C8168147D200D9D15C /* ripple.pb.cc */; }; + C14F812E1681323400AAB80A /* rippled.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C14F812D1681323400AAB80A /* rippled.1 */; }; + C14F842F1681326700AAB80A /* database.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81371681326600AAB80A /* database.cpp */; }; + C14F84311681326700AAB80A /* sqlite3.c in Sources */ = {isa = PBXBuildFile; fileRef = C14F813C1681326600AAB80A /* sqlite3.c */; }; + C14F84321681326700AAB80A /* SqliteDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F813F1681326600AAB80A /* SqliteDatabase.cpp */; }; + C14F84341681326700AAB80A /* json_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F814E1681326600AAB80A /* json_reader.cpp */; }; + C14F84351681326700AAB80A /* json_value.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F814F1681326600AAB80A /* json_value.cpp */; }; + C14F84361681326700AAB80A /* json_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81511681326600AAB80A /* json_writer.cpp */; }; + C14F84371681326700AAB80A /* AccountItems.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81581681326600AAB80A /* AccountItems.cpp */; }; + C14F84381681326700AAB80A /* AccountSetTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F815A1681326600AAB80A /* AccountSetTransactor.cpp */; }; + C14F84391681326700AAB80A /* AccountState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F815C1681326600AAB80A /* AccountState.cpp */; }; + C14F843A1681326700AAB80A /* Amount.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F815E1681326600AAB80A /* Amount.cpp */; }; + C14F843B1681326700AAB80A /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F815F1681326600AAB80A /* Application.cpp */; }; + C14F843C1681326700AAB80A /* BitcoinUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81631681326600AAB80A /* BitcoinUtil.cpp */; }; + C14F843D1681326700AAB80A /* CallRPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81651681326600AAB80A /* CallRPC.cpp */; }; + C14F843E1681326700AAB80A /* CanonicalTXSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81671681326600AAB80A /* CanonicalTXSet.cpp */; }; + C14F843F1681326700AAB80A /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81691681326600AAB80A /* Config.cpp */; }; + C14F84401681326700AAB80A /* ConnectionPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F816B1681326600AAB80A /* ConnectionPool.cpp */; }; + C14F84411681326700AAB80A /* Contract.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F816D1681326600AAB80A /* Contract.cpp */; }; + C14F84421681326700AAB80A /* DBInit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F816F1681326600AAB80A /* DBInit.cpp */; }; + C14F84431681326700AAB80A /* DeterministicKeys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81701681326600AAB80A /* DeterministicKeys.cpp */; }; + C14F84441681326700AAB80A /* ECIES.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81711681326600AAB80A /* ECIES.cpp */; }; + C14F84451681326700AAB80A /* FeatureTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81721681326600AAB80A /* FeatureTable.cpp */; }; + C14F84461681326700AAB80A /* FieldNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81741681326600AAB80A /* FieldNames.cpp */; }; + C14F84471681326700AAB80A /* HashedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81761681326600AAB80A /* HashedObject.cpp */; }; + C14F84481681326700AAB80A /* HTTPRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81791681326600AAB80A /* HTTPRequest.cpp */; }; + C14F84491681326700AAB80A /* HttpsClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F817B1681326600AAB80A /* HttpsClient.cpp */; }; + C14F844A1681326700AAB80A /* InstanceCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F817D1681326600AAB80A /* InstanceCounter.cpp */; }; + C14F844B1681326700AAB80A /* Interpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F817F1681326600AAB80A /* Interpreter.cpp */; }; + C14F844C1681326700AAB80A /* JobQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81811681326600AAB80A /* JobQueue.cpp */; }; + C14F844D1681326700AAB80A /* Ledger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81841681326600AAB80A /* Ledger.cpp */; }; + C14F844E1681326700AAB80A /* LedgerAcquire.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81861681326600AAB80A /* LedgerAcquire.cpp */; }; + C14F844F1681326700AAB80A /* LedgerConsensus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81881681326600AAB80A /* LedgerConsensus.cpp */; }; + C14F84501681326700AAB80A /* LedgerEntrySet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F818A1681326600AAB80A /* LedgerEntrySet.cpp */; }; + C14F84511681326700AAB80A /* LedgerFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F818C1681326600AAB80A /* LedgerFormats.cpp */; }; + C14F84521681326700AAB80A /* LedgerHistory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F818E1681326600AAB80A /* LedgerHistory.cpp */; }; + C14F84531681326700AAB80A /* LedgerMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81901681326600AAB80A /* LedgerMaster.cpp */; }; + C14F84541681326700AAB80A /* LedgerProposal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81921681326600AAB80A /* LedgerProposal.cpp */; }; + C14F84551681326700AAB80A /* LedgerTiming.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81941681326600AAB80A /* LedgerTiming.cpp */; }; + C14F84561681326700AAB80A /* LoadManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81961681326600AAB80A /* LoadManager.cpp */; }; + C14F84571681326700AAB80A /* LoadMonitor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81981681326600AAB80A /* LoadMonitor.cpp */; }; + C14F84581681326700AAB80A /* Log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F819A1681326600AAB80A /* Log.cpp */; }; + C14F84591681326700AAB80A /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F819C1681326600AAB80A /* main.cpp */; }; + C14F845A1681326700AAB80A /* NetworkOPs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F819D1681326600AAB80A /* NetworkOPs.cpp */; }; + C14F845B1681326700AAB80A /* NicknameState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81A01681326600AAB80A /* NicknameState.cpp */; }; + C14F845C1681326700AAB80A /* Offer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81A21681326600AAB80A /* Offer.cpp */; }; + C14F845D1681326700AAB80A /* OfferCancelTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81A41681326600AAB80A /* OfferCancelTransactor.cpp */; }; + C14F845E1681326700AAB80A /* OfferCreateTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81A61681326600AAB80A /* OfferCreateTransactor.cpp */; }; + C14F845F1681326700AAB80A /* Operation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81A81681326600AAB80A /* Operation.cpp */; }; + C14F84601681326700AAB80A /* OrderBook.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81AA1681326600AAB80A /* OrderBook.cpp */; }; + C14F84611681326700AAB80A /* OrderBookDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81AC1681326600AAB80A /* OrderBookDB.cpp */; }; + C14F84621681326700AAB80A /* PackedMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81AE1681326600AAB80A /* PackedMessage.cpp */; }; + C14F84631681326700AAB80A /* ParameterTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81B01681326600AAB80A /* ParameterTable.cpp */; }; + C14F84641681326700AAB80A /* ParseSection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81B21681326600AAB80A /* ParseSection.cpp */; }; + C14F84651681326700AAB80A /* Pathfinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81B41681326600AAB80A /* Pathfinder.cpp */; }; + C14F84661681326700AAB80A /* PaymentTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81B61681326600AAB80A /* PaymentTransactor.cpp */; }; + C14F84671681326700AAB80A /* Peer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81B81681326600AAB80A /* Peer.cpp */; }; + C14F84681681326700AAB80A /* PeerDoor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81BA1681326600AAB80A /* PeerDoor.cpp */; }; + C14F84691681326700AAB80A /* PlatRand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81BC1681326600AAB80A /* PlatRand.cpp */; }; + C14F846A1681326700AAB80A /* ProofOfWork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81BD1681326600AAB80A /* ProofOfWork.cpp */; }; + C14F846B1681326700AAB80A /* PubKeyCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81BF1681326600AAB80A /* PubKeyCache.cpp */; }; + C14F846C1681326700AAB80A /* RangeSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81C11681326600AAB80A /* RangeSet.cpp */; }; + C14F846D1681326700AAB80A /* RegularKeySetTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81C31681326600AAB80A /* RegularKeySetTransactor.cpp */; }; + C14F846E1681326700AAB80A /* rfc1751.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81C51681326600AAB80A /* rfc1751.cpp */; }; + C14F846F1681326700AAB80A /* RippleAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81C81681326600AAB80A /* RippleAddress.cpp */; }; + C14F84701681326700AAB80A /* RippleCalc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81CA1681326600AAB80A /* RippleCalc.cpp */; }; + C14F84711681326700AAB80A /* RippleState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81CC1681326600AAB80A /* RippleState.cpp */; }; + C14F84721681326700AAB80A /* rpc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81CE1681326600AAB80A /* rpc.cpp */; }; + C14F84731681326700AAB80A /* RPCDoor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81D01681326600AAB80A /* RPCDoor.cpp */; }; + C14F84741681326700AAB80A /* RPCErr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81D21681326600AAB80A /* RPCErr.cpp */; }; + C14F84751681326700AAB80A /* RPCHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81D41681326600AAB80A /* RPCHandler.cpp */; }; + C14F84761681326700AAB80A /* RPCServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81D61681326600AAB80A /* RPCServer.cpp */; }; + C14F84771681326700AAB80A /* ScriptData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81D91681326600AAB80A /* ScriptData.cpp */; }; + C14F84781681326700AAB80A /* SerializedLedger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81DC1681326600AAB80A /* SerializedLedger.cpp */; }; + C14F84791681326700AAB80A /* SerializedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81DE1681326600AAB80A /* SerializedObject.cpp */; }; + C14F847A1681326700AAB80A /* SerializedTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81E01681326600AAB80A /* SerializedTransaction.cpp */; }; + C14F847B1681326700AAB80A /* SerializedTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81E21681326600AAB80A /* SerializedTypes.cpp */; }; + C14F847C1681326700AAB80A /* SerializedValidation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81E41681326600AAB80A /* SerializedValidation.cpp */; }; + C14F847D1681326700AAB80A /* Serializer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81E71681326600AAB80A /* Serializer.cpp */; }; + C14F847E1681326700AAB80A /* SHAMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81E91681326600AAB80A /* SHAMap.cpp */; }; + C14F847F1681326700AAB80A /* SHAMapDiff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81EB1681326600AAB80A /* SHAMapDiff.cpp */; }; + C14F84801681326700AAB80A /* SHAMapNodes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81EC1681326600AAB80A /* SHAMapNodes.cpp */; }; + C14F84811681326700AAB80A /* SHAMapSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81ED1681326600AAB80A /* SHAMapSync.cpp */; }; + C14F84821681326700AAB80A /* SNTPClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81EF1681326600AAB80A /* SNTPClient.cpp */; }; + C14F84831681326700AAB80A /* Suppression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81F11681326600AAB80A /* Suppression.cpp */; }; + C14F84841681326700AAB80A /* Transaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81F41681326600AAB80A /* Transaction.cpp */; }; + C14F84851681326700AAB80A /* TransactionEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81F61681326600AAB80A /* TransactionEngine.cpp */; }; + C14F84861681326700AAB80A /* TransactionErr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81F81681326600AAB80A /* TransactionErr.cpp */; }; + C14F84871681326700AAB80A /* TransactionFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81FA1681326600AAB80A /* TransactionFormats.cpp */; }; + C14F84881681326700AAB80A /* TransactionMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81FC1681326600AAB80A /* TransactionMaster.cpp */; }; + C14F84891681326700AAB80A /* TransactionMeta.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81FE1681326600AAB80A /* TransactionMeta.cpp */; }; + C14F848A1681326700AAB80A /* Transactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82001681326600AAB80A /* Transactor.cpp */; }; + C14F848B1681326700AAB80A /* TrustSetTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82021681326600AAB80A /* TrustSetTransactor.cpp */; }; + C14F848C1681326700AAB80A /* UniqueNodeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82061681326600AAB80A /* UniqueNodeList.cpp */; }; + C14F848D1681326700AAB80A /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82081681326600AAB80A /* utils.cpp */; }; + C14F848E1681326700AAB80A /* ValidationCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F820A1681326600AAB80A /* ValidationCollection.cpp */; }; + C14F848F1681326700AAB80A /* Wallet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F820D1681326600AAB80A /* Wallet.cpp */; }; + C14F84901681326700AAB80A /* WalletAddTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F820F1681326600AAB80A /* WalletAddTransactor.cpp */; }; + C14F84911681326700AAB80A /* WSDoor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82121681326600AAB80A /* WSDoor.cpp */; }; + C14F84D81681326700AAB80A /* base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82C21681326600AAB80A /* base64.cpp */; }; + C14F84D91681326700AAB80A /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = C14F82CD1681326600AAB80A /* md5.c */; }; + C14F84DA1681326700AAB80A /* data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82D21681326600AAB80A /* data.cpp */; }; + C14F84DB1681326700AAB80A /* network_utilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82D41681326600AAB80A /* network_utilities.cpp */; }; + C14F84DC1681326700AAB80A /* hybi_header.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82D81681326600AAB80A /* hybi_header.cpp */; }; + C14F84DD1681326700AAB80A /* hybi_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82DB1681326600AAB80A /* hybi_util.cpp */; }; + C14F84DE1681326700AAB80A /* blank_rng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82DF1681326600AAB80A /* blank_rng.cpp */; }; + C14F84DF1681326700AAB80A /* boost_rng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82E11681326600AAB80A /* boost_rng.cpp */; }; + C14F84E21681326700AAB80A /* sha1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82EC1681326600AAB80A /* sha1.cpp */; }; + C14F84E51681326700AAB80A /* uri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82FA1681326600AAB80A /* uri.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildRule section */ + C14F85C11681357800AAB80A /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + filePatterns = src/cpp/ripple/ripple.proto; + fileType = pattern.proxy; + isEditable = 1; + outputFiles = ( + ); + script = "protoc -Isrc/cpp/ripple --cpp_out=build/proto src/cpp/ripple/ripple.proto"; + }; +/* End PBXBuildRule section */ + +/* Begin PBXContainerItemProxy section */ + C14F85A71681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B6DF1C691434A7A30029A1B1; + remoteInfo = "WebSocket++ Static Library"; + }; + C14F85A91681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B6DF1C721434A8280029A1B1; + remoteInfo = "WebSocket++ Dynamic Library"; + }; + C14F85AB1681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B6DF1CD11435ED910029A1B1; + remoteInfo = echo_server; + }; + C14F85AD1681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B682887D143745F2002BA48B; + remoteInfo = chat_client; + }; + C14F85AF1681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B6CF181C1437C397009295BE; + remoteInfo = echo_client; + }; + C14F85B11681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B6FE8D4F14730AE900B32547; + remoteInfo = policy_test; + }; + C14F85B31681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B663884B1487D73200DDAE13; + remoteInfo = echo_server_tls; + }; + C14F85B51681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B6732458148FAEEB00FC2B04; + remoteInfo = fuzzing_server; + }; + C14F85B71681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B6732471148FB0FC00FC2B04; + remoteInfo = fuzzing_client; + }; + C14F85B91681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B67324891491A16500FC2B04; + remoteInfo = broadcast_server; + }; + C14F85BB1681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B67324A21491A7F100FC2B04; + remoteInfo = stress_client; + }; + C14F85BD1681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B61A51BF14DC271900456432; + remoteInfo = concurrent_server; + }; + C14F85BF1681326700AAB80A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = B6E7E7731505532E00394909; + remoteInfo = wsperf; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + C14F81251681323400AAB80A /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + C14F812E1681323400AAB80A /* rippled.1 in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + C10365C8168147D200D9D15C /* ripple.pb.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ripple.pb.cc; path = ../build/proto/ripple.pb.cc; sourceTree = ""; }; + C14F81271681323400AAB80A /* rippled */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = rippled; sourceTree = BUILT_PRODUCTS_DIR; }; + C14F812D1681323400AAB80A /* rippled.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = rippled.1; sourceTree = ""; }; + C14F81371681326600AAB80A /* database.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = database.cpp; sourceTree = ""; }; + C14F81381681326600AAB80A /* database.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = database.h; sourceTree = ""; }; + C14F813A1681326600AAB80A /* mysqldatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mysqldatabase.cpp; sourceTree = ""; }; + C14F813B1681326600AAB80A /* mysqldatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mysqldatabase.h; sourceTree = ""; }; + C14F813C1681326600AAB80A /* sqlite3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sqlite3.c; sourceTree = ""; }; + C14F813D1681326600AAB80A /* sqlite3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sqlite3.h; sourceTree = ""; }; + C14F813E1681326600AAB80A /* sqlite3ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sqlite3ext.h; sourceTree = ""; }; + C14F813F1681326600AAB80A /* SqliteDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SqliteDatabase.cpp; sourceTree = ""; }; + C14F81401681326600AAB80A /* SqliteDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SqliteDatabase.h; sourceTree = ""; }; + C14F81421681326600AAB80A /* dbutility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dbutility.h; sourceTree = ""; }; + C14F81431681326600AAB80A /* windatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = windatabase.cpp; sourceTree = ""; }; + C14F81441681326600AAB80A /* windatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = windatabase.h; sourceTree = ""; }; + C14F81461681326600AAB80A /* autolink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = autolink.h; sourceTree = ""; }; + C14F81471681326600AAB80A /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; + C14F81481681326600AAB80A /* features.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = features.h; sourceTree = ""; }; + C14F81491681326600AAB80A /* forwards.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = forwards.h; sourceTree = ""; }; + C14F814A1681326600AAB80A /* json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json.h; sourceTree = ""; }; + C14F814B1681326600AAB80A /* json_batchallocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json_batchallocator.h; sourceTree = ""; }; + C14F814C1681326600AAB80A /* json_internalarray.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json_internalarray.inl; sourceTree = ""; }; + C14F814D1681326600AAB80A /* json_internalmap.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json_internalmap.inl; sourceTree = ""; }; + C14F814E1681326600AAB80A /* json_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_reader.cpp; sourceTree = ""; }; + C14F814F1681326600AAB80A /* json_value.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_value.cpp; sourceTree = ""; }; + C14F81501681326600AAB80A /* json_valueiterator.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json_valueiterator.inl; sourceTree = ""; }; + C14F81511681326600AAB80A /* json_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_writer.cpp; sourceTree = ""; }; + C14F81521681326600AAB80A /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + C14F81531681326600AAB80A /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reader.h; sourceTree = ""; }; + C14F81541681326600AAB80A /* value.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value.h; sourceTree = ""; }; + C14F81551681326600AAB80A /* version */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = version; sourceTree = ""; }; + C14F81561681326600AAB80A /* writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = writer.h; sourceTree = ""; }; + C14F81581681326600AAB80A /* AccountItems.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccountItems.cpp; sourceTree = ""; }; + C14F81591681326600AAB80A /* AccountItems.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountItems.h; sourceTree = ""; }; + C14F815A1681326600AAB80A /* AccountSetTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccountSetTransactor.cpp; sourceTree = ""; }; + C14F815B1681326600AAB80A /* AccountSetTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountSetTransactor.h; sourceTree = ""; }; + C14F815C1681326600AAB80A /* AccountState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccountState.cpp; sourceTree = ""; }; + C14F815D1681326600AAB80A /* AccountState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountState.h; sourceTree = ""; }; + C14F815E1681326600AAB80A /* Amount.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Amount.cpp; sourceTree = ""; }; + C14F815F1681326600AAB80A /* Application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; + C14F81601681326600AAB80A /* Application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; + C14F81611681326600AAB80A /* base58.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base58.h; sourceTree = ""; }; + C14F81621681326600AAB80A /* bignum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bignum.h; sourceTree = ""; }; + C14F81631681326600AAB80A /* BitcoinUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BitcoinUtil.cpp; sourceTree = ""; }; + C14F81641681326600AAB80A /* BitcoinUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BitcoinUtil.h; sourceTree = ""; }; + C14F81651681326600AAB80A /* CallRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CallRPC.cpp; sourceTree = ""; }; + C14F81661681326600AAB80A /* CallRPC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallRPC.h; sourceTree = ""; }; + C14F81671681326600AAB80A /* CanonicalTXSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CanonicalTXSet.cpp; sourceTree = ""; }; + C14F81681681326600AAB80A /* CanonicalTXSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CanonicalTXSet.h; sourceTree = ""; }; + C14F81691681326600AAB80A /* Config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Config.cpp; sourceTree = ""; }; + C14F816A1681326600AAB80A /* Config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = ""; }; + C14F816B1681326600AAB80A /* ConnectionPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConnectionPool.cpp; sourceTree = ""; }; + C14F816C1681326600AAB80A /* ConnectionPool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectionPool.h; sourceTree = ""; }; + C14F816D1681326600AAB80A /* Contract.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Contract.cpp; sourceTree = ""; }; + C14F816E1681326600AAB80A /* Contract.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Contract.h; sourceTree = ""; }; + C14F816F1681326600AAB80A /* DBInit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DBInit.cpp; sourceTree = ""; }; + C14F81701681326600AAB80A /* DeterministicKeys.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeterministicKeys.cpp; sourceTree = ""; }; + C14F81711681326600AAB80A /* ECIES.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ECIES.cpp; sourceTree = ""; }; + C14F81721681326600AAB80A /* FeatureTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FeatureTable.cpp; sourceTree = ""; }; + C14F81731681326600AAB80A /* FeatureTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeatureTable.h; sourceTree = ""; }; + C14F81741681326600AAB80A /* FieldNames.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNames.cpp; sourceTree = ""; }; + C14F81751681326600AAB80A /* FieldNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNames.h; sourceTree = ""; }; + C14F81761681326600AAB80A /* HashedObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HashedObject.cpp; sourceTree = ""; }; + C14F81771681326600AAB80A /* HashedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashedObject.h; sourceTree = ""; }; + C14F81781681326600AAB80A /* HashPrefixes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashPrefixes.h; sourceTree = ""; }; + C14F81791681326600AAB80A /* HTTPRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPRequest.cpp; sourceTree = ""; }; + C14F817A1681326600AAB80A /* HTTPRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPRequest.h; sourceTree = ""; }; + C14F817B1681326600AAB80A /* HttpsClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HttpsClient.cpp; sourceTree = ""; }; + C14F817C1681326600AAB80A /* HttpsClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HttpsClient.h; sourceTree = ""; }; + C14F817D1681326600AAB80A /* InstanceCounter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InstanceCounter.cpp; sourceTree = ""; }; + C14F817E1681326600AAB80A /* InstanceCounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InstanceCounter.h; sourceTree = ""; }; + C14F817F1681326600AAB80A /* Interpreter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Interpreter.cpp; sourceTree = ""; }; + C14F81801681326600AAB80A /* Interpreter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Interpreter.h; sourceTree = ""; }; + C14F81811681326600AAB80A /* JobQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JobQueue.cpp; sourceTree = ""; }; + C14F81821681326600AAB80A /* JobQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JobQueue.h; sourceTree = ""; }; + C14F81831681326600AAB80A /* key.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = key.h; sourceTree = ""; }; + C14F81841681326600AAB80A /* Ledger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Ledger.cpp; sourceTree = ""; }; + C14F81851681326600AAB80A /* Ledger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ledger.h; sourceTree = ""; }; + C14F81861681326600AAB80A /* LedgerAcquire.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerAcquire.cpp; sourceTree = ""; }; + C14F81871681326600AAB80A /* LedgerAcquire.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerAcquire.h; sourceTree = ""; }; + C14F81881681326600AAB80A /* LedgerConsensus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerConsensus.cpp; sourceTree = ""; }; + C14F81891681326600AAB80A /* LedgerConsensus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerConsensus.h; sourceTree = ""; }; + C14F818A1681326600AAB80A /* LedgerEntrySet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerEntrySet.cpp; sourceTree = ""; }; + C14F818B1681326600AAB80A /* LedgerEntrySet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerEntrySet.h; sourceTree = ""; }; + C14F818C1681326600AAB80A /* LedgerFormats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerFormats.cpp; sourceTree = ""; }; + C14F818D1681326600AAB80A /* LedgerFormats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerFormats.h; sourceTree = ""; }; + C14F818E1681326600AAB80A /* LedgerHistory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerHistory.cpp; sourceTree = ""; }; + C14F818F1681326600AAB80A /* LedgerHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerHistory.h; sourceTree = ""; }; + C14F81901681326600AAB80A /* LedgerMaster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerMaster.cpp; sourceTree = ""; }; + C14F81911681326600AAB80A /* LedgerMaster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerMaster.h; sourceTree = ""; }; + C14F81921681326600AAB80A /* LedgerProposal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerProposal.cpp; sourceTree = ""; }; + C14F81931681326600AAB80A /* LedgerProposal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerProposal.h; sourceTree = ""; }; + C14F81941681326600AAB80A /* LedgerTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerTiming.cpp; sourceTree = ""; }; + C14F81951681326600AAB80A /* LedgerTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerTiming.h; sourceTree = ""; }; + C14F81961681326600AAB80A /* LoadManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoadManager.cpp; sourceTree = ""; }; + C14F81971681326600AAB80A /* LoadManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadManager.h; sourceTree = ""; }; + C14F81981681326600AAB80A /* LoadMonitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoadMonitor.cpp; sourceTree = ""; }; + C14F81991681326600AAB80A /* LoadMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadMonitor.h; sourceTree = ""; }; + C14F819A1681326600AAB80A /* Log.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Log.cpp; sourceTree = ""; }; + C14F819B1681326600AAB80A /* Log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Log.h; sourceTree = ""; }; + C14F819C1681326600AAB80A /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; + C14F819D1681326600AAB80A /* NetworkOPs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkOPs.cpp; sourceTree = ""; }; + C14F819E1681326600AAB80A /* NetworkOPs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkOPs.h; sourceTree = ""; }; + C14F819F1681326600AAB80A /* NetworkStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkStatus.h; sourceTree = ""; }; + C14F81A01681326600AAB80A /* NicknameState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NicknameState.cpp; sourceTree = ""; }; + C14F81A11681326600AAB80A /* NicknameState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NicknameState.h; sourceTree = ""; }; + C14F81A21681326600AAB80A /* Offer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Offer.cpp; sourceTree = ""; }; + C14F81A31681326600AAB80A /* Offer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Offer.h; sourceTree = ""; }; + C14F81A41681326600AAB80A /* OfferCancelTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OfferCancelTransactor.cpp; sourceTree = ""; }; + C14F81A51681326600AAB80A /* OfferCancelTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OfferCancelTransactor.h; sourceTree = ""; }; + C14F81A61681326600AAB80A /* OfferCreateTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OfferCreateTransactor.cpp; sourceTree = ""; }; + C14F81A71681326600AAB80A /* OfferCreateTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OfferCreateTransactor.h; sourceTree = ""; }; + C14F81A81681326600AAB80A /* Operation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Operation.cpp; sourceTree = ""; }; + C14F81A91681326600AAB80A /* Operation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Operation.h; sourceTree = ""; }; + C14F81AA1681326600AAB80A /* OrderBook.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OrderBook.cpp; sourceTree = ""; }; + C14F81AB1681326600AAB80A /* OrderBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OrderBook.h; sourceTree = ""; }; + C14F81AC1681326600AAB80A /* OrderBookDB.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OrderBookDB.cpp; sourceTree = ""; }; + C14F81AD1681326600AAB80A /* OrderBookDB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OrderBookDB.h; sourceTree = ""; }; + C14F81AE1681326600AAB80A /* PackedMessage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PackedMessage.cpp; sourceTree = ""; }; + C14F81AF1681326600AAB80A /* PackedMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackedMessage.h; sourceTree = ""; }; + C14F81B01681326600AAB80A /* ParameterTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParameterTable.cpp; sourceTree = ""; }; + C14F81B11681326600AAB80A /* ParameterTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParameterTable.h; sourceTree = ""; }; + C14F81B21681326600AAB80A /* ParseSection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParseSection.cpp; sourceTree = ""; }; + C14F81B31681326600AAB80A /* ParseSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParseSection.h; sourceTree = ""; }; + C14F81B41681326600AAB80A /* Pathfinder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Pathfinder.cpp; sourceTree = ""; }; + C14F81B51681326600AAB80A /* Pathfinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pathfinder.h; sourceTree = ""; }; + C14F81B61681326600AAB80A /* PaymentTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PaymentTransactor.cpp; sourceTree = ""; }; + C14F81B71681326600AAB80A /* PaymentTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaymentTransactor.h; sourceTree = ""; }; + C14F81B81681326600AAB80A /* Peer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Peer.cpp; sourceTree = ""; }; + C14F81B91681326600AAB80A /* Peer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Peer.h; sourceTree = ""; }; + C14F81BA1681326600AAB80A /* PeerDoor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PeerDoor.cpp; sourceTree = ""; }; + C14F81BB1681326600AAB80A /* PeerDoor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PeerDoor.h; sourceTree = ""; }; + C14F81BC1681326600AAB80A /* PlatRand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlatRand.cpp; sourceTree = ""; }; + C14F81BD1681326600AAB80A /* ProofOfWork.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProofOfWork.cpp; sourceTree = ""; }; + C14F81BE1681326600AAB80A /* ProofOfWork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProofOfWork.h; sourceTree = ""; }; + C14F81BF1681326600AAB80A /* PubKeyCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PubKeyCache.cpp; sourceTree = ""; }; + C14F81C01681326600AAB80A /* PubKeyCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PubKeyCache.h; sourceTree = ""; }; + C14F81C11681326600AAB80A /* RangeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RangeSet.cpp; sourceTree = ""; }; + C14F81C21681326600AAB80A /* RangeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RangeSet.h; sourceTree = ""; }; + C14F81C31681326600AAB80A /* RegularKeySetTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegularKeySetTransactor.cpp; sourceTree = ""; }; + C14F81C41681326600AAB80A /* RegularKeySetTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegularKeySetTransactor.h; sourceTree = ""; }; + C14F81C51681326600AAB80A /* rfc1751.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rfc1751.cpp; sourceTree = ""; }; + C14F81C61681326600AAB80A /* rfc1751.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rfc1751.h; sourceTree = ""; }; + C14F81C71681326600AAB80A /* ripple.proto */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ripple.proto; sourceTree = ""; }; + C14F81C81681326600AAB80A /* RippleAddress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RippleAddress.cpp; sourceTree = ""; }; + C14F81C91681326600AAB80A /* RippleAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RippleAddress.h; sourceTree = ""; }; + C14F81CA1681326600AAB80A /* RippleCalc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RippleCalc.cpp; sourceTree = ""; }; + C14F81CB1681326600AAB80A /* RippleCalc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RippleCalc.h; sourceTree = ""; }; + C14F81CC1681326600AAB80A /* RippleState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RippleState.cpp; sourceTree = ""; }; + C14F81CD1681326600AAB80A /* RippleState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RippleState.h; sourceTree = ""; }; + C14F81CE1681326600AAB80A /* rpc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rpc.cpp; sourceTree = ""; }; + C14F81CF1681326600AAB80A /* RPC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RPC.h; sourceTree = ""; }; + C14F81D01681326600AAB80A /* RPCDoor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RPCDoor.cpp; sourceTree = ""; }; + C14F81D11681326600AAB80A /* RPCDoor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RPCDoor.h; sourceTree = ""; }; + C14F81D21681326600AAB80A /* RPCErr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RPCErr.cpp; sourceTree = ""; }; + C14F81D31681326600AAB80A /* RPCErr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RPCErr.h; sourceTree = ""; }; + C14F81D41681326600AAB80A /* RPCHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RPCHandler.cpp; sourceTree = ""; }; + C14F81D51681326600AAB80A /* RPCHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RPCHandler.h; sourceTree = ""; }; + C14F81D61681326600AAB80A /* RPCServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RPCServer.cpp; sourceTree = ""; }; + C14F81D71681326600AAB80A /* RPCServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RPCServer.h; sourceTree = ""; }; + C14F81D81681326600AAB80A /* ScopedLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScopedLock.h; sourceTree = ""; }; + C14F81D91681326600AAB80A /* ScriptData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptData.cpp; sourceTree = ""; }; + C14F81DA1681326600AAB80A /* ScriptData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptData.h; sourceTree = ""; }; + C14F81DB1681326600AAB80A /* SecureAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecureAllocator.h; sourceTree = ""; }; + C14F81DC1681326600AAB80A /* SerializedLedger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedLedger.cpp; sourceTree = ""; }; + C14F81DD1681326600AAB80A /* SerializedLedger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedLedger.h; sourceTree = ""; }; + C14F81DE1681326600AAB80A /* SerializedObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedObject.cpp; sourceTree = ""; }; + C14F81DF1681326600AAB80A /* SerializedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedObject.h; sourceTree = ""; }; + C14F81E01681326600AAB80A /* SerializedTransaction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedTransaction.cpp; sourceTree = ""; }; + C14F81E11681326600AAB80A /* SerializedTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedTransaction.h; sourceTree = ""; }; + C14F81E21681326600AAB80A /* SerializedTypes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedTypes.cpp; sourceTree = ""; }; + C14F81E31681326600AAB80A /* SerializedTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedTypes.h; sourceTree = ""; }; + C14F81E41681326600AAB80A /* SerializedValidation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedValidation.cpp; sourceTree = ""; }; + C14F81E51681326600AAB80A /* SerializedValidation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedValidation.h; sourceTree = ""; }; + C14F81E61681326600AAB80A /* SerializeProto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializeProto.h; sourceTree = ""; }; + C14F81E71681326600AAB80A /* Serializer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Serializer.cpp; sourceTree = ""; }; + C14F81E81681326600AAB80A /* Serializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Serializer.h; sourceTree = ""; }; + C14F81E91681326600AAB80A /* SHAMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SHAMap.cpp; sourceTree = ""; }; + C14F81EA1681326600AAB80A /* SHAMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SHAMap.h; sourceTree = ""; }; + C14F81EB1681326600AAB80A /* SHAMapDiff.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SHAMapDiff.cpp; sourceTree = ""; }; + C14F81EC1681326600AAB80A /* SHAMapNodes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SHAMapNodes.cpp; sourceTree = ""; }; + C14F81ED1681326600AAB80A /* SHAMapSync.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SHAMapSync.cpp; sourceTree = ""; }; + C14F81EE1681326600AAB80A /* SHAMapSync.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SHAMapSync.h; sourceTree = ""; }; + C14F81EF1681326600AAB80A /* SNTPClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SNTPClient.cpp; sourceTree = ""; }; + C14F81F01681326600AAB80A /* SNTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SNTPClient.h; sourceTree = ""; }; + C14F81F11681326600AAB80A /* Suppression.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Suppression.cpp; sourceTree = ""; }; + C14F81F21681326600AAB80A /* Suppression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Suppression.h; sourceTree = ""; }; + C14F81F31681326600AAB80A /* TaggedCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TaggedCache.h; sourceTree = ""; }; + C14F81F41681326600AAB80A /* Transaction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Transaction.cpp; sourceTree = ""; }; + C14F81F51681326600AAB80A /* Transaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Transaction.h; sourceTree = ""; }; + C14F81F61681326600AAB80A /* TransactionEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionEngine.cpp; sourceTree = ""; }; + C14F81F71681326600AAB80A /* TransactionEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionEngine.h; sourceTree = ""; }; + C14F81F81681326600AAB80A /* TransactionErr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionErr.cpp; sourceTree = ""; }; + C14F81F91681326600AAB80A /* TransactionErr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionErr.h; sourceTree = ""; }; + C14F81FA1681326600AAB80A /* TransactionFormats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionFormats.cpp; sourceTree = ""; }; + C14F81FB1681326600AAB80A /* TransactionFormats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionFormats.h; sourceTree = ""; }; + C14F81FC1681326600AAB80A /* TransactionMaster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionMaster.cpp; sourceTree = ""; }; + C14F81FD1681326600AAB80A /* TransactionMaster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionMaster.h; sourceTree = ""; }; + C14F81FE1681326600AAB80A /* TransactionMeta.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionMeta.cpp; sourceTree = ""; }; + C14F81FF1681326600AAB80A /* TransactionMeta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionMeta.h; sourceTree = ""; }; + C14F82001681326600AAB80A /* Transactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Transactor.cpp; sourceTree = ""; }; + C14F82011681326600AAB80A /* Transactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Transactor.h; sourceTree = ""; }; + C14F82021681326600AAB80A /* TrustSetTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrustSetTransactor.cpp; sourceTree = ""; }; + C14F82031681326600AAB80A /* TrustSetTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrustSetTransactor.h; sourceTree = ""; }; + C14F82041681326600AAB80A /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; + C14F82051681326600AAB80A /* uint256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uint256.h; sourceTree = ""; }; + C14F82061681326600AAB80A /* UniqueNodeList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UniqueNodeList.cpp; sourceTree = ""; }; + C14F82071681326600AAB80A /* UniqueNodeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniqueNodeList.h; sourceTree = ""; }; + C14F82081681326600AAB80A /* utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = utils.cpp; sourceTree = ""; }; + C14F82091681326600AAB80A /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = ""; }; + C14F820A1681326600AAB80A /* ValidationCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ValidationCollection.cpp; sourceTree = ""; }; + C14F820B1681326600AAB80A /* ValidationCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValidationCollection.h; sourceTree = ""; }; + C14F820C1681326600AAB80A /* Version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Version.h; sourceTree = ""; }; + C14F820D1681326600AAB80A /* Wallet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Wallet.cpp; sourceTree = ""; }; + C14F820E1681326600AAB80A /* Wallet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Wallet.h; sourceTree = ""; }; + C14F820F1681326600AAB80A /* WalletAddTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WalletAddTransactor.cpp; sourceTree = ""; }; + C14F82101681326600AAB80A /* WalletAddTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WalletAddTransactor.h; sourceTree = ""; }; + C14F82111681326600AAB80A /* WSConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WSConnection.h; sourceTree = ""; }; + C14F82121681326600AAB80A /* WSDoor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WSDoor.cpp; sourceTree = ""; }; + C14F82131681326600AAB80A /* WSDoor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WSDoor.h; sourceTree = ""; }; + C14F82141681326600AAB80A /* WSHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WSHandler.h; sourceTree = ""; }; + C14F82161681326600AAB80A /* dependencies.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dependencies.txt; sourceTree = ""; }; + C14F82181681326600AAB80A /* uri.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = uri.txt; sourceTree = ""; }; + C14F821B1681326600AAB80A /* broadcast_admin.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = broadcast_admin.html; sourceTree = ""; }; + C14F821C1681326600AAB80A /* broadcast_admin_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = broadcast_admin_handler.hpp; sourceTree = ""; }; + C14F821D1681326600AAB80A /* broadcast_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = broadcast_handler.hpp; sourceTree = ""; }; + C14F821E1681326600AAB80A /* broadcast_server_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = broadcast_server_handler.hpp; sourceTree = ""; }; + C14F821F1681326600AAB80A /* broadcast_server_tls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = broadcast_server_tls.cpp; sourceTree = ""; }; + C14F82201681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F82231681326600AAB80A /* API.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = API.txt; sourceTree = ""; }; + C14F82251681326600AAB80A /* ajax.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ajax.html; sourceTree = ""; }; + C14F82261681326600AAB80A /* annotating.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = annotating.html; sourceTree = ""; }; + C14F82271681326600AAB80A /* arrow-down.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "arrow-down.gif"; sourceTree = ""; }; + C14F82281681326600AAB80A /* arrow-left.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "arrow-left.gif"; sourceTree = ""; }; + C14F82291681326600AAB80A /* arrow-right.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "arrow-right.gif"; sourceTree = ""; }; + C14F822A1681326600AAB80A /* arrow-up.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "arrow-up.gif"; sourceTree = ""; }; + C14F822B1681326600AAB80A /* basic.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = basic.html; sourceTree = ""; }; + C14F822C1681326600AAB80A /* data-eu-gdp-growth-1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth-1.json"; sourceTree = ""; }; + C14F822D1681326600AAB80A /* data-eu-gdp-growth-2.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth-2.json"; sourceTree = ""; }; + C14F822E1681326600AAB80A /* data-eu-gdp-growth-3.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth-3.json"; sourceTree = ""; }; + C14F822F1681326600AAB80A /* data-eu-gdp-growth-4.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth-4.json"; sourceTree = ""; }; + C14F82301681326600AAB80A /* data-eu-gdp-growth-5.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth-5.json"; sourceTree = ""; }; + C14F82311681326600AAB80A /* data-eu-gdp-growth.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth.json"; sourceTree = ""; }; + C14F82321681326600AAB80A /* data-japan-gdp-growth.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-japan-gdp-growth.json"; sourceTree = ""; }; + C14F82331681326600AAB80A /* data-usa-gdp-growth.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-usa-gdp-growth.json"; sourceTree = ""; }; + C14F82341681326600AAB80A /* graph-types.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "graph-types.html"; sourceTree = ""; }; + C14F82351681326600AAB80A /* hs-2004-27-a-large_web.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "hs-2004-27-a-large_web.jpg"; sourceTree = ""; }; + C14F82361681326600AAB80A /* image.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = image.html; sourceTree = ""; }; + C14F82371681326600AAB80A /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; + C14F82381681326600AAB80A /* interacting-axes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "interacting-axes.html"; sourceTree = ""; }; + C14F82391681326600AAB80A /* interacting.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = interacting.html; sourceTree = ""; }; + C14F823A1681326600AAB80A /* layout.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = layout.css; sourceTree = ""; }; + C14F823B1681326600AAB80A /* multiple-axes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "multiple-axes.html"; sourceTree = ""; }; + C14F823C1681326600AAB80A /* navigate.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = navigate.html; sourceTree = ""; }; + C14F823D1681326600AAB80A /* percentiles.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = percentiles.html; sourceTree = ""; }; + C14F823E1681326600AAB80A /* pie.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = pie.html; sourceTree = ""; }; + C14F823F1681326600AAB80A /* realtime.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = realtime.html; sourceTree = ""; }; + C14F82401681326600AAB80A /* resize.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = resize.html; sourceTree = ""; }; + C14F82411681326600AAB80A /* selection.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = selection.html; sourceTree = ""; }; + C14F82421681326600AAB80A /* setting-options.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "setting-options.html"; sourceTree = ""; }; + C14F82431681326600AAB80A /* stacking.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = stacking.html; sourceTree = ""; }; + C14F82441681326600AAB80A /* symbols.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = symbols.html; sourceTree = ""; }; + C14F82451681326600AAB80A /* thresholding.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = thresholding.html; sourceTree = ""; }; + C14F82461681326600AAB80A /* time.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = time.html; sourceTree = ""; }; + C14F82471681326600AAB80A /* tracking.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = tracking.html; sourceTree = ""; }; + C14F82481681326600AAB80A /* turning-series.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "turning-series.html"; sourceTree = ""; }; + C14F82491681326600AAB80A /* visitors.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = visitors.html; sourceTree = ""; }; + C14F824A1681326600AAB80A /* zooming.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = zooming.html; sourceTree = ""; }; + C14F824B1681326600AAB80A /* excanvas.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = excanvas.js; sourceTree = ""; }; + C14F824C1681326600AAB80A /* excanvas.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = excanvas.min.js; sourceTree = ""; }; + C14F824D1681326600AAB80A /* FAQ.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FAQ.txt; sourceTree = ""; }; + C14F824E1681326600AAB80A /* jquery.colorhelpers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.colorhelpers.js; sourceTree = ""; }; + C14F824F1681326600AAB80A /* jquery.colorhelpers.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.colorhelpers.min.js; sourceTree = ""; }; + C14F82501681326600AAB80A /* jquery.flot.crosshair.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.crosshair.js; sourceTree = ""; }; + C14F82511681326600AAB80A /* jquery.flot.crosshair.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.crosshair.min.js; sourceTree = ""; }; + C14F82521681326600AAB80A /* jquery.flot.fillbetween.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.fillbetween.js; sourceTree = ""; }; + C14F82531681326600AAB80A /* jquery.flot.fillbetween.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.fillbetween.min.js; sourceTree = ""; }; + C14F82541681326600AAB80A /* jquery.flot.image.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.image.js; sourceTree = ""; }; + C14F82551681326600AAB80A /* jquery.flot.image.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.image.min.js; sourceTree = ""; }; + C14F82561681326600AAB80A /* jquery.flot.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.js; sourceTree = ""; }; + C14F82571681326600AAB80A /* jquery.flot.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.min.js; sourceTree = ""; }; + C14F82581681326600AAB80A /* jquery.flot.navigate.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.navigate.js; sourceTree = ""; }; + C14F82591681326600AAB80A /* jquery.flot.navigate.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.navigate.min.js; sourceTree = ""; }; + C14F825A1681326600AAB80A /* jquery.flot.pie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.pie.js; sourceTree = ""; }; + C14F825B1681326600AAB80A /* jquery.flot.pie.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.pie.min.js; sourceTree = ""; }; + C14F825C1681326600AAB80A /* jquery.flot.resize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.resize.js; sourceTree = ""; }; + C14F825D1681326600AAB80A /* jquery.flot.resize.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.resize.min.js; sourceTree = ""; }; + C14F825E1681326600AAB80A /* jquery.flot.selection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.selection.js; sourceTree = ""; }; + C14F825F1681326600AAB80A /* jquery.flot.selection.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.selection.min.js; sourceTree = ""; }; + C14F82601681326600AAB80A /* jquery.flot.stack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.stack.js; sourceTree = ""; }; + C14F82611681326600AAB80A /* jquery.flot.stack.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.stack.min.js; sourceTree = ""; }; + C14F82621681326600AAB80A /* jquery.flot.symbol.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.symbol.js; sourceTree = ""; }; + C14F82631681326600AAB80A /* jquery.flot.symbol.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.symbol.min.js; sourceTree = ""; }; + C14F82641681326600AAB80A /* jquery.flot.threshold.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.threshold.js; sourceTree = ""; }; + C14F82651681326600AAB80A /* jquery.flot.threshold.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.threshold.min.js; sourceTree = ""; }; + C14F82661681326600AAB80A /* jquery.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.js; sourceTree = ""; }; + C14F82671681326600AAB80A /* jquery.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.min.js; sourceTree = ""; }; + C14F82681681326600AAB80A /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; + C14F82691681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F826A1681326600AAB80A /* NEWS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NEWS.txt; sourceTree = ""; }; + C14F826B1681326600AAB80A /* PLUGINS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PLUGINS.txt; sourceTree = ""; }; + C14F826C1681326600AAB80A /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; + C14F826D1681326600AAB80A /* md5.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = md5.js; sourceTree = ""; }; + C14F826E1681326600AAB80A /* wscmd.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = wscmd.hpp; sourceTree = ""; }; + C14F82701681326600AAB80A /* chat_client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chat_client.cpp; sourceTree = ""; }; + C14F82711681326600AAB80A /* chat_client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = chat_client.html; sourceTree = ""; }; + C14F82721681326600AAB80A /* chat_client_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chat_client_handler.cpp; sourceTree = ""; }; + C14F82731681326600AAB80A /* chat_client_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = chat_client_handler.hpp; sourceTree = ""; }; + C14F82741681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F82751681326600AAB80A /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; + C14F82771681326600AAB80A /* jquery-1.6.3.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jquery-1.6.3.min.js"; sourceTree = ""; }; + C14F82791681326600AAB80A /* chat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chat.cpp; sourceTree = ""; }; + C14F827A1681326600AAB80A /* chat.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = chat.hpp; sourceTree = ""; }; + C14F827B1681326600AAB80A /* chat_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chat_server.cpp; sourceTree = ""; }; + C14F827C1681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F827D1681326600AAB80A /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; + C14F827E1681326600AAB80A /* common.mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = common.mk; sourceTree = ""; }; + C14F82801681326600AAB80A /* concurrent_client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = concurrent_client.html; sourceTree = ""; }; + C14F82811681326600AAB80A /* concurrent_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = concurrent_server.cpp; sourceTree = ""; }; + C14F82821681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F82831681326600AAB80A /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; + C14F82851681326600AAB80A /* echo_client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = echo_client.cpp; sourceTree = ""; }; + C14F82861681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F82871681326600AAB80A /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; + C14F82891681326600AAB80A /* echo_client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = echo_client.html; sourceTree = ""; }; + C14F828A1681326600AAB80A /* echo_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = echo_server.cpp; sourceTree = ""; }; + C14F828B1681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F828C1681326600AAB80A /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; + C14F828E1681326600AAB80A /* echo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = echo.cpp; sourceTree = ""; }; + C14F828F1681326600AAB80A /* echo.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = echo.hpp; sourceTree = ""; }; + C14F82901681326600AAB80A /* echo_client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = echo_client.html; sourceTree = ""; }; + C14F82911681326600AAB80A /* echo_server_tls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = echo_server_tls.cpp; sourceTree = ""; }; + C14F82921681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F82931681326600AAB80A /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; + C14F82951681326600AAB80A /* fuzzing_client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fuzzing_client.cpp; sourceTree = ""; }; + C14F82961681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F82981681326600AAB80A /* echo_client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = echo_client.html; sourceTree = ""; }; + C14F82991681326600AAB80A /* fuzzing_server_tls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fuzzing_server_tls.cpp; sourceTree = ""; }; + C14F829A1681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F829B1681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F829D1681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F829E1681326600AAB80A /* stress_client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stress_client.cpp; sourceTree = ""; }; + C14F82A01681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F82A11681326600AAB80A /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; + C14F82A21681326600AAB80A /* telemetry_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = telemetry_server.cpp; sourceTree = ""; }; + C14F82A41681326600AAB80A /* case.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = case.cpp; sourceTree = ""; }; + C14F82A51681326600AAB80A /* case.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = case.hpp; sourceTree = ""; }; + C14F82A61681326600AAB80A /* generic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = generic.cpp; sourceTree = ""; }; + C14F82A71681326600AAB80A /* generic.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = generic.hpp; sourceTree = ""; }; + C14F82A81681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F82A91681326600AAB80A /* message_test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = message_test.html; sourceTree = ""; }; + C14F82AA1681326600AAB80A /* request.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = request.cpp; sourceTree = ""; }; + C14F82AB1681326600AAB80A /* request.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = request.hpp; sourceTree = ""; }; + C14F82AC1681326600AAB80A /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; + C14F82AD1681326600AAB80A /* stress_aggregate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stress_aggregate.cpp; sourceTree = ""; }; + C14F82AE1681326600AAB80A /* stress_aggregate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stress_aggregate.hpp; sourceTree = ""; }; + C14F82AF1681326600AAB80A /* stress_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stress_handler.cpp; sourceTree = ""; }; + C14F82B01681326600AAB80A /* stress_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stress_handler.hpp; sourceTree = ""; }; + C14F82B11681326600AAB80A /* stress_test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = stress_test.html; sourceTree = ""; }; + C14F82B31681326600AAB80A /* backbone-localstorage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "backbone-localstorage.js"; sourceTree = ""; }; + C14F82B41681326600AAB80A /* backbone.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backbone.js; sourceTree = ""; }; + C14F82B51681326600AAB80A /* jquery.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.min.js; sourceTree = ""; }; + C14F82B61681326600AAB80A /* underscore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = underscore.js; sourceTree = ""; }; + C14F82B71681326600AAB80A /* wscmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wscmd.cpp; sourceTree = ""; }; + C14F82B81681326600AAB80A /* wscmd.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = wscmd.hpp; sourceTree = ""; }; + C14F82B91681326600AAB80A /* wsperf.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wsperf.cfg; sourceTree = ""; }; + C14F82BA1681326600AAB80A /* wsperf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wsperf.cpp; sourceTree = ""; }; + C14F82BB1681326600AAB80A /* wsperf_commander.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = wsperf_commander.html; sourceTree = ""; }; + C14F82BC1681326600AAB80A /* license.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = license.txt; sourceTree = ""; }; + C14F82BD1681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F82BE1681326600AAB80A /* readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.txt; sourceTree = ""; }; + C14F82BF1681326600AAB80A /* SConstruct */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConstruct; sourceTree = ""; }; + C14F82C21681326600AAB80A /* base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = base64.cpp; sourceTree = ""; }; + C14F82C31681326600AAB80A /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base64.h; sourceTree = ""; }; + C14F82C41681326600AAB80A /* common.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = common.hpp; sourceTree = ""; }; + C14F82C51681326600AAB80A /* connection.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = connection.hpp; sourceTree = ""; }; + C14F82C61681326600AAB80A /* endpoint.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = endpoint.hpp; sourceTree = ""; }; + C14F82C81681326600AAB80A /* constants.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = constants.hpp; sourceTree = ""; }; + C14F82C91681326600AAB80A /* parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = parser.hpp; sourceTree = ""; }; + C14F82CB1681326600AAB80A /* logger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = logger.hpp; sourceTree = ""; }; + C14F82CD1681326600AAB80A /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = md5.c; sourceTree = ""; }; + C14F82CE1681326600AAB80A /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; + C14F82CF1681326600AAB80A /* md5.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = md5.hpp; sourceTree = ""; }; + C14F82D11681326600AAB80A /* control.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = control.hpp; sourceTree = ""; }; + C14F82D21681326600AAB80A /* data.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data.cpp; sourceTree = ""; }; + C14F82D31681326600AAB80A /* data.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = data.hpp; sourceTree = ""; }; + C14F82D41681326600AAB80A /* network_utilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = network_utilities.cpp; sourceTree = ""; }; + C14F82D51681326600AAB80A /* network_utilities.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = network_utilities.hpp; sourceTree = ""; }; + C14F82D71681326600AAB80A /* hybi.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = hybi.hpp; sourceTree = ""; }; + C14F82D81681326600AAB80A /* hybi_header.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hybi_header.cpp; sourceTree = ""; }; + C14F82D91681326600AAB80A /* hybi_header.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = hybi_header.hpp; sourceTree = ""; }; + C14F82DA1681326600AAB80A /* hybi_legacy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = hybi_legacy.hpp; sourceTree = ""; }; + C14F82DB1681326600AAB80A /* hybi_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hybi_util.cpp; sourceTree = ""; }; + C14F82DC1681326600AAB80A /* hybi_util.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = hybi_util.hpp; sourceTree = ""; }; + C14F82DD1681326600AAB80A /* processor.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = processor.hpp; sourceTree = ""; }; + C14F82DF1681326600AAB80A /* blank_rng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = blank_rng.cpp; sourceTree = ""; }; + C14F82E01681326600AAB80A /* blank_rng.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = blank_rng.hpp; sourceTree = ""; }; + C14F82E11681326600AAB80A /* boost_rng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = boost_rng.cpp; sourceTree = ""; }; + C14F82E21681326600AAB80A /* boost_rng.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = boost_rng.hpp; sourceTree = ""; }; + C14F82E41681326600AAB80A /* client.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = client.hpp; sourceTree = ""; }; + C14F82E51681326600AAB80A /* server.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = server.hpp; sourceTree = ""; }; + C14F82E61681326600AAB80A /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; + C14F82E81681326600AAB80A /* license.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = license.txt; sourceTree = ""; }; + C14F82E91681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F82EA1681326600AAB80A /* Makefile.nt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.nt; sourceTree = ""; }; + C14F82EB1681326600AAB80A /* sha.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sha.cpp; sourceTree = ""; }; + C14F82EC1681326600AAB80A /* sha1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sha1.cpp; sourceTree = ""; }; + C14F82ED1681326600AAB80A /* sha1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha1.h; sourceTree = ""; }; + C14F82EE1681326600AAB80A /* shacmp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shacmp.cpp; sourceTree = ""; }; + C14F82EF1681326600AAB80A /* shatest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shatest.cpp; sourceTree = ""; }; + C14F82F01681326600AAB80A /* shared_const_buffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shared_const_buffer.hpp; sourceTree = ""; }; + C14F82F21681326600AAB80A /* plain.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = plain.hpp; sourceTree = ""; }; + C14F82F31681326600AAB80A /* socket_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = socket_base.hpp; sourceTree = ""; }; + C14F82F41681326600AAB80A /* tls.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tls.hpp; sourceTree = ""; }; + C14F82F61681326600AAB80A /* client.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = client.pem; sourceTree = ""; }; + C14F82F71681326600AAB80A /* dh512.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dh512.pem; sourceTree = ""; }; + C14F82F81681326600AAB80A /* server.cer */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.cer; sourceTree = ""; }; + C14F82F91681326600AAB80A /* server.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.pem; sourceTree = ""; }; + C14F82FA1681326600AAB80A /* uri.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = uri.cpp; sourceTree = ""; }; + C14F82FB1681326600AAB80A /* uri.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = uri.hpp; sourceTree = ""; }; + C14F82FD1681326600AAB80A /* utf8_validator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = utf8_validator.hpp; sourceTree = ""; }; + C14F82FE1681326600AAB80A /* websocket_frame.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = websocket_frame.hpp; sourceTree = ""; }; + C14F82FF1681326600AAB80A /* websocketpp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = websocketpp.hpp; sourceTree = ""; }; + C14F83021681326600AAB80A /* hybi_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hybi_util.cpp; sourceTree = ""; }; + C14F83031681326600AAB80A /* logging.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = logging.cpp; sourceTree = ""; }; + C14F83041681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F83051681326600AAB80A /* parsing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parsing.cpp; sourceTree = ""; }; + C14F83061681326600AAB80A /* uri_perf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = uri_perf.cpp; sourceTree = ""; }; + C14F83071681326600AAB80A /* todo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = todo.txt; sourceTree = ""; }; + C14F83091681326600AAB80A /* project.bbprojectdata */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = project.bbprojectdata; sourceTree = ""; }; + C14F830A1681326600AAB80A /* Scratchpad.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Scratchpad.txt; sourceTree = ""; }; + C14F830B1681326600AAB80A /* Unix Worksheet.worksheet */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.worksheet; path = "Unix Worksheet.worksheet"; sourceTree = ""; }; + C14F830C1681326600AAB80A /* zaphoyd.bbprojectsettings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = zaphoyd.bbprojectsettings; sourceTree = ""; }; + C14F830D1681326600AAB80A /* websocketpp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = websocketpp.xcodeproj; sourceTree = ""; }; + C14F83121681326600AAB80A /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; + C14F83131681326600AAB80A /* common.vsprops */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = common.vsprops; sourceTree = ""; }; + C14F83151681326600AAB80A /* chatclient.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatclient.vcproj; sourceTree = ""; }; + C14F83161681326600AAB80A /* chatserver.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatserver.vcproj; sourceTree = ""; }; + C14F83171681326600AAB80A /* concurrent_server.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = concurrent_server.vcproj; sourceTree = ""; }; + C14F83181681326600AAB80A /* echoserver.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = echoserver.vcproj; sourceTree = ""; }; + C14F83191681326600AAB80A /* stdint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stdint.h; sourceTree = ""; }; + C14F831A1681326600AAB80A /* websocketpp.sln */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = websocketpp.sln; sourceTree = ""; }; + C14F831B1681326600AAB80A /* websocketpp.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = websocketpp.vcproj; sourceTree = ""; }; + C14F831D1681326600AAB80A /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; + C14F831F1681326600AAB80A /* chatclient.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatclient.vcxproj; sourceTree = ""; }; + C14F83201681326600AAB80A /* chatclient.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatclient.vcxproj.filters; sourceTree = ""; }; + C14F83211681326600AAB80A /* chatserver.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatserver.vcxproj; sourceTree = ""; }; + C14F83221681326600AAB80A /* chatserver.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatserver.vcxproj.filters; sourceTree = ""; }; + C14F83231681326600AAB80A /* echoclient.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = echoclient.vcxproj; sourceTree = ""; }; + C14F83241681326600AAB80A /* echoclient.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = echoclient.vcxproj.filters; sourceTree = ""; }; + C14F83251681326600AAB80A /* echoserver.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = echoserver.vcxproj; sourceTree = ""; }; + C14F83261681326600AAB80A /* echoserver.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = echoserver.vcxproj.filters; sourceTree = ""; }; + C14F83281681326600AAB80A /* wsperf.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = wsperf.vcxproj; sourceTree = ""; }; + C14F83291681326600AAB80A /* wsperf.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = wsperf.vcxproj.filters; sourceTree = ""; }; + C14F832A1681326600AAB80A /* readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.txt; sourceTree = ""; }; + C14F832B1681326600AAB80A /* websocketpp.sln */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = websocketpp.sln; sourceTree = ""; }; + C14F832C1681326600AAB80A /* websocketpp.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = websocketpp.vcxproj; sourceTree = ""; }; + C14F832D1681326600AAB80A /* websocketpp.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = websocketpp.vcxproj.filters; sourceTree = ""; }; + C14F832F1681326600AAB80A /* account.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = account.js; sourceTree = ""; }; + C14F83301681326600AAB80A /* amount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = amount.js; sourceTree = ""; }; + C14F83321681326600AAB80A /* cryptojs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cryptojs.js; sourceTree = ""; }; + C14F83341681326600AAB80A /* AES.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = AES.js; sourceTree = ""; }; + C14F83351681326600AAB80A /* BlockModes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = BlockModes.js; sourceTree = ""; }; + C14F83361681326600AAB80A /* Crypto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Crypto.js; sourceTree = ""; }; + C14F83371681326600AAB80A /* CryptoMath.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CryptoMath.js; sourceTree = ""; }; + C14F83381681326600AAB80A /* DES.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = DES.js; sourceTree = ""; }; + C14F83391681326600AAB80A /* HMAC.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = HMAC.js; sourceTree = ""; }; + C14F833A1681326600AAB80A /* MARC4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = MARC4.js; sourceTree = ""; }; + C14F833B1681326600AAB80A /* MD5.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = MD5.js; sourceTree = ""; }; + C14F833C1681326600AAB80A /* PBKDF2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = PBKDF2.js; sourceTree = ""; }; + C14F833D1681326600AAB80A /* PBKDF2Async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = PBKDF2Async.js; sourceTree = ""; }; + C14F833E1681326600AAB80A /* Rabbit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Rabbit.js; sourceTree = ""; }; + C14F833F1681326600AAB80A /* SHA1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = SHA1.js; sourceTree = ""; }; + C14F83401681326600AAB80A /* SHA256.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = SHA256.js; sourceTree = ""; }; + C14F83411681326600AAB80A /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; + C14F83421681326600AAB80A /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; + C14F83441681326600AAB80A /* PBKDF2-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "PBKDF2-test.js"; sourceTree = ""; }; + C14F83451681326600AAB80A /* test.coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.coffee; sourceTree = ""; }; + C14F83461681326600AAB80A /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; + C14F83471681326600AAB80A /* jsbn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jsbn.js; sourceTree = ""; }; + C14F83481681326600AAB80A /* network.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = network.js; sourceTree = ""; }; + C14F83491681326600AAB80A /* nodeutils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nodeutils.js; sourceTree = ""; }; + C14F834A1681326600AAB80A /* remote.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = remote.js; sourceTree = ""; }; + C14F834B1681326600AAB80A /* serializer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = serializer.js; sourceTree = ""; }; + C14F834E1681326600AAB80A /* browserTest.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = browserTest.html; sourceTree = ""; }; + C14F834F1681326600AAB80A /* browserUtil.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browserUtil.js; sourceTree = ""; }; + C14F83501681326600AAB80A /* rhinoUtil.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rhinoUtil.js; sourceTree = ""; }; + C14F83511681326600AAB80A /* test.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = test.css; sourceTree = ""; }; + C14F83531681326600AAB80A /* compiler.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = compiler.jar; sourceTree = ""; }; + C14F83541681326600AAB80A /* compress_with_closure.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = compress_with_closure.sh; sourceTree = ""; }; + C14F83551681326600AAB80A /* compress_with_yui.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = compress_with_yui.sh; sourceTree = ""; }; + C14F83561681326600AAB80A /* dewindowize.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = dewindowize.pl; sourceTree = ""; }; + C14F83571681326600AAB80A /* digitize.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = digitize.pl; sourceTree = ""; }; + C14F83581681326600AAB80A /* opacify.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = opacify.pl; sourceTree = ""; }; + C14F83591681326600AAB80A /* remove_constants.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = remove_constants.pl; sourceTree = ""; }; + C14F835A1681326600AAB80A /* yuicompressor-2.4.2.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = "yuicompressor-2.4.2.jar"; sourceTree = ""; }; + C14F835B1681326600AAB80A /* config.mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = config.mk; sourceTree = ""; }; + C14F835C1681326600AAB80A /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = configure; sourceTree = ""; }; + C14F835E1681326600AAB80A /* aes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = aes.js; sourceTree = ""; }; + C14F835F1681326600AAB80A /* bitArray.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bitArray.js; sourceTree = ""; }; + C14F83601681326600AAB80A /* bn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bn.js; sourceTree = ""; }; + C14F83611681326600AAB80A /* cbc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cbc.js; sourceTree = ""; }; + C14F83621681326600AAB80A /* ccm.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ccm.js; sourceTree = ""; }; + C14F83631681326600AAB80A /* codecBase64.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = codecBase64.js; sourceTree = ""; }; + C14F83641681326600AAB80A /* codecBytes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = codecBytes.js; sourceTree = ""; }; + C14F83651681326600AAB80A /* codecHex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = codecHex.js; sourceTree = ""; }; + C14F83661681326600AAB80A /* codecString.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = codecString.js; sourceTree = ""; }; + C14F83671681326600AAB80A /* convenience.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = convenience.js; sourceTree = ""; }; + C14F83681681326600AAB80A /* ecc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ecc.js; sourceTree = ""; }; + C14F83691681326600AAB80A /* hmac.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hmac.js; sourceTree = ""; }; + C14F836A1681326600AAB80A /* ocb2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ocb2.js; sourceTree = ""; }; + C14F836B1681326600AAB80A /* pbkdf2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pbkdf2.js; sourceTree = ""; }; + C14F836C1681326600AAB80A /* random.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = random.js; sourceTree = ""; }; + C14F836D1681326600AAB80A /* sha1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha1.js; sourceTree = ""; }; + C14F836E1681326600AAB80A /* sha256.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha256.js; sourceTree = ""; }; + C14F836F1681326600AAB80A /* sjcl.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sjcl.js; sourceTree = ""; }; + C14F83701681326600AAB80A /* srp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = srp.js; sourceTree = ""; }; + C14F83711681326600AAB80A /* core.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = core.js; sourceTree = ""; }; + C14F83721681326600AAB80A /* core_closure.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = core_closure.js; sourceTree = ""; }; + C14F83741681326600AAB80A /* alpha-arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "alpha-arrow.png"; sourceTree = ""; }; + C14F83751681326600AAB80A /* example.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = example.css; sourceTree = ""; }; + C14F83761681326600AAB80A /* example.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = example.js; sourceTree = ""; }; + C14F83771681326600AAB80A /* form.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = form.js; sourceTree = ""; }; + C14F83781681326600AAB80A /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; + C14F837C1681326600AAB80A /* Chain.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Chain.js; sourceTree = ""; }; + C14F837D1681326600AAB80A /* Dumper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Dumper.js; sourceTree = ""; }; + C14F837E1681326600AAB80A /* Hash.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Hash.js; sourceTree = ""; }; + C14F837F1681326600AAB80A /* Link.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Link.js; sourceTree = ""; }; + C14F83801681326600AAB80A /* Namespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Namespace.js; sourceTree = ""; }; + C14F83811681326600AAB80A /* Opt.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Opt.js; sourceTree = ""; }; + C14F83821681326600AAB80A /* Reflection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Reflection.js; sourceTree = ""; }; + C14F83831681326600AAB80A /* String.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = String.js; sourceTree = ""; }; + C14F83841681326600AAB80A /* Testrun.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Testrun.js; sourceTree = ""; }; + C14F83851681326600AAB80A /* frame.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = frame.js; sourceTree = ""; }; + C14F83871681326600AAB80A /* FOODOC.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = FOODOC.js; sourceTree = ""; }; + C14F83891681326600AAB80A /* DomReader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = DomReader.js; sourceTree = ""; }; + C14F838A1681326600AAB80A /* XMLDoc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = XMLDoc.js; sourceTree = ""; }; + C14F838B1681326600AAB80A /* XMLParse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = XMLParse.js; sourceTree = ""; }; + C14F838C1681326600AAB80A /* XMLDOC.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = XMLDOC.js; sourceTree = ""; }; + C14F838F1681326600AAB80A /* DocComment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = DocComment.js; sourceTree = ""; }; + C14F83901681326600AAB80A /* DocTag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = DocTag.js; sourceTree = ""; }; + C14F83911681326600AAB80A /* JsDoc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = JsDoc.js; sourceTree = ""; }; + C14F83921681326600AAB80A /* JsPlate.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = JsPlate.js; sourceTree = ""; }; + C14F83931681326600AAB80A /* Lang.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Lang.js; sourceTree = ""; }; + C14F83941681326600AAB80A /* Parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Parser.js; sourceTree = ""; }; + C14F83951681326600AAB80A /* PluginManager.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = PluginManager.js; sourceTree = ""; }; + C14F83961681326600AAB80A /* Symbol.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Symbol.js; sourceTree = ""; }; + C14F83971681326600AAB80A /* SymbolSet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = SymbolSet.js; sourceTree = ""; }; + C14F83981681326600AAB80A /* TextStream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TextStream.js; sourceTree = ""; }; + C14F83991681326600AAB80A /* Token.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Token.js; sourceTree = ""; }; + C14F839A1681326600AAB80A /* TokenReader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TokenReader.js; sourceTree = ""; }; + C14F839B1681326600AAB80A /* TokenStream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TokenStream.js; sourceTree = ""; }; + C14F839C1681326600AAB80A /* Util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Util.js; sourceTree = ""; }; + C14F839D1681326600AAB80A /* Walker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Walker.js; sourceTree = ""; }; + C14F839E1681326600AAB80A /* JSDOC.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = JSDOC.js; sourceTree = ""; }; + C14F839F1681326600AAB80A /* main.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main.js; sourceTree = ""; }; + C14F83A11681326600AAB80A /* commentSrcJson.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = commentSrcJson.js; sourceTree = ""; }; + C14F83A21681326600AAB80A /* frameworkPrototype.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = frameworkPrototype.js; sourceTree = ""; }; + C14F83A31681326600AAB80A /* functionCall.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = functionCall.js; sourceTree = ""; }; + C14F83A41681326600AAB80A /* publishSrcHilite.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = publishSrcHilite.js; sourceTree = ""; }; + C14F83A51681326600AAB80A /* symbolLink.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = symbolLink.js; sourceTree = ""; }; + C14F83A61681326600AAB80A /* tagParamConfig.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tagParamConfig.js; sourceTree = ""; }; + C14F83A71681326600AAB80A /* tagSynonyms.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tagSynonyms.js; sourceTree = ""; }; + C14F83A81681326600AAB80A /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; + C14F83AA1681326600AAB80A /* runner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runner.js; sourceTree = ""; }; + C14F83AB1681326600AAB80A /* TestDoc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TestDoc.js; sourceTree = ""; }; + C14F83AD1681326600AAB80A /* addon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = addon.js; sourceTree = ""; }; + C14F83AE1681326600AAB80A /* anon_inner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = anon_inner.js; sourceTree = ""; }; + C14F83AF1681326600AAB80A /* augments.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = augments.js; sourceTree = ""; }; + C14F83B01681326600AAB80A /* augments2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = augments2.js; sourceTree = ""; }; + C14F83B11681326600AAB80A /* borrows.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borrows.js; sourceTree = ""; }; + C14F83B21681326600AAB80A /* borrows2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borrows2.js; sourceTree = ""; }; + C14F83B31681326600AAB80A /* config.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = config.js; sourceTree = ""; }; + C14F83B41681326600AAB80A /* constructs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = constructs.js; sourceTree = ""; }; + C14F83B51681326600AAB80A /* encoding.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = encoding.js; sourceTree = ""; }; + C14F83B61681326600AAB80A /* encoding_other.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = encoding_other.js; sourceTree = ""; }; + C14F83B71681326600AAB80A /* event.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event.js; sourceTree = ""; }; + C14F83B81681326600AAB80A /* exports.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = exports.js; sourceTree = ""; }; + C14F83B91681326600AAB80A /* functions_anon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = functions_anon.js; sourceTree = ""; }; + C14F83BA1681326600AAB80A /* functions_nested.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = functions_nested.js; sourceTree = ""; }; + C14F83BB1681326600AAB80A /* global.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = global.js; sourceTree = ""; }; + C14F83BC1681326600AAB80A /* globals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = globals.js; sourceTree = ""; }; + C14F83BD1681326600AAB80A /* ignore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ignore.js; sourceTree = ""; }; + C14F83BE1681326600AAB80A /* inner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inner.js; sourceTree = ""; }; + C14F83BF1681326600AAB80A /* jsdoc_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jsdoc_test.js; sourceTree = ""; }; + C14F83C01681326600AAB80A /* lend.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lend.js; sourceTree = ""; }; + C14F83C11681326600AAB80A /* memberof.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = memberof.js; sourceTree = ""; }; + C14F83C21681326600AAB80A /* memberof2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = memberof2.js; sourceTree = ""; }; + C14F83C31681326600AAB80A /* memberof3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = memberof3.js; sourceTree = ""; }; + C14F83C41681326600AAB80A /* memberof_constructor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = memberof_constructor.js; sourceTree = ""; }; + C14F83C51681326600AAB80A /* module.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = module.js; sourceTree = ""; }; + C14F83C61681326600AAB80A /* multi_methods.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = multi_methods.js; sourceTree = ""; }; + C14F83C71681326600AAB80A /* name.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = name.js; sourceTree = ""; }; + C14F83C81681326600AAB80A /* namespace_nested.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = namespace_nested.js; sourceTree = ""; }; + C14F83C91681326600AAB80A /* nocode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nocode.js; sourceTree = ""; }; + C14F83CA1681326600AAB80A /* oblit_anon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = oblit_anon.js; sourceTree = ""; }; + C14F83CB1681326600AAB80A /* overview.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = overview.js; sourceTree = ""; }; + C14F83CC1681326600AAB80A /* param_inline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = param_inline.js; sourceTree = ""; }; + C14F83CD1681326600AAB80A /* params_optional.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = params_optional.js; sourceTree = ""; }; + C14F83CE1681326600AAB80A /* prototype.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = prototype.js; sourceTree = ""; }; + C14F83CF1681326600AAB80A /* prototype_nested.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = prototype_nested.js; sourceTree = ""; }; + C14F83D01681326600AAB80A /* prototype_oblit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = prototype_oblit.js; sourceTree = ""; }; + C14F83D11681326600AAB80A /* prototype_oblit_constructor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = prototype_oblit_constructor.js; sourceTree = ""; }; + C14F83D21681326600AAB80A /* public.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = public.js; sourceTree = ""; }; + C14F83D41681326600AAB80A /* code.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = code.js; sourceTree = ""; }; + C14F83D51681326600AAB80A /* notcode.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = notcode.txt; sourceTree = ""; }; + C14F83D61681326600AAB80A /* shared.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shared.js; sourceTree = ""; }; + C14F83D71681326600AAB80A /* shared2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shared2.js; sourceTree = ""; }; + C14F83D81681326600AAB80A /* shortcuts.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shortcuts.js; sourceTree = ""; }; + C14F83D91681326600AAB80A /* static_this.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = static_this.js; sourceTree = ""; }; + C14F83DA1681326600AAB80A /* synonyms.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = synonyms.js; sourceTree = ""; }; + C14F83DB1681326600AAB80A /* tosource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tosource.js; sourceTree = ""; }; + C14F83DC1681326600AAB80A /* variable_redefine.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = variable_redefine.js; sourceTree = ""; }; + C14F83DD1681326600AAB80A /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; + C14F83DE1681326600AAB80A /* changes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = changes.txt; sourceTree = ""; }; + C14F83E01681326600AAB80A /* sample.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sample.conf; sourceTree = ""; }; + C14F83E21681326600AAB80A /* build.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = build.xml; sourceTree = ""; }; + C14F83E31681326600AAB80A /* build_1.4.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = build_1.4.xml; sourceTree = ""; }; + C14F83E51681326600AAB80A /* js.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = js.jar; sourceTree = ""; }; + C14F83E71681326600AAB80A /* JsDebugRun.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = JsDebugRun.java; sourceTree = ""; }; + C14F83E81681326600AAB80A /* JsRun.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = JsRun.java; sourceTree = ""; }; + C14F83E91681326600AAB80A /* jsdebug.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = jsdebug.jar; sourceTree = ""; }; + C14F83EA1681326600AAB80A /* jsrun.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = jsrun.jar; sourceTree = ""; }; + C14F83EB1681326600AAB80A /* jsrun.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = jsrun.sh; sourceTree = ""; }; + C14F83EC1681326600AAB80A /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; + C14F83EF1681326600AAB80A /* allclasses.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = allclasses.tmpl; sourceTree = ""; }; + C14F83F01681326600AAB80A /* allfiles.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = allfiles.tmpl; sourceTree = ""; }; + C14F83F11681326600AAB80A /* class.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = class.tmpl; sourceTree = ""; }; + C14F83F31681326600AAB80A /* default.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = default.css; sourceTree = ""; }; + C14F83F41681326600AAB80A /* index.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = index.tmpl; sourceTree = ""; }; + C14F83F51681326600AAB80A /* publish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = publish.js; sourceTree = ""; }; + C14F83F71681326600AAB80A /* header.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = header.html; sourceTree = ""; }; + C14F83F81681326600AAB80A /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; + C14F83F91681326600AAB80A /* symbol.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = symbol.tmpl; sourceTree = ""; }; + C14F83FB1681326600AAB80A /* coding_guidelines.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = coding_guidelines.pl; sourceTree = ""; }; + C14F83FC1681326600AAB80A /* jslint_rhino.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jslint_rhino.js; sourceTree = ""; }; + C14F83FD1681326600AAB80A /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + C14F83FF1681326600AAB80A /* bsd.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bsd.txt; sourceTree = ""; }; + C14F84001681326600AAB80A /* COPYRIGHT */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYRIGHT; sourceTree = ""; }; + C14F84011681326600AAB80A /* gpl-2.0.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "gpl-2.0.txt"; sourceTree = ""; }; + C14F84021681326600AAB80A /* gpl-3.0.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "gpl-3.0.txt"; sourceTree = ""; }; + C14F84031681326600AAB80A /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = INSTALL; sourceTree = ""; }; + C14F84041681326600AAB80A /* sjcl.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sjcl.js; sourceTree = ""; }; + C14F84061681326600AAB80A /* aes_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = aes_test.js; sourceTree = ""; }; + C14F84071681326600AAB80A /* aes_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = aes_vectors.js; sourceTree = ""; }; + C14F84081681326600AAB80A /* bn_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bn_test.js; sourceTree = ""; }; + C14F84091681326600AAB80A /* bn_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bn_vectors.js; sourceTree = ""; }; + C14F840A1681326600AAB80A /* cbc_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cbc_test.js; sourceTree = ""; }; + C14F840B1681326600AAB80A /* cbc_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cbc_vectors.js; sourceTree = ""; }; + C14F840C1681326600AAB80A /* ccm_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ccm_test.js; sourceTree = ""; }; + C14F840D1681326600AAB80A /* ccm_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ccm_vectors.js; sourceTree = ""; }; + C14F840E1681326600AAB80A /* ecdh_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ecdh_test.js; sourceTree = ""; }; + C14F840F1681326600AAB80A /* ecdsa_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ecdsa_test.js; sourceTree = ""; }; + C14F84101681326600AAB80A /* hmac_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hmac_test.js; sourceTree = ""; }; + C14F84111681326600AAB80A /* hmac_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hmac_vectors.js; sourceTree = ""; }; + C14F84121681326600AAB80A /* ocb2_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ocb2_test.js; sourceTree = ""; }; + C14F84131681326600AAB80A /* ocb2_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ocb2_vectors.js; sourceTree = ""; }; + C14F84141681326600AAB80A /* pbkdf2_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pbkdf2_test.js; sourceTree = ""; }; + C14F84151681326600AAB80A /* run_tests_browser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run_tests_browser.js; sourceTree = ""; }; + C14F84161681326600AAB80A /* run_tests_rhino.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run_tests_rhino.js; sourceTree = ""; }; + C14F84171681326600AAB80A /* sha1_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha1_test.js; sourceTree = ""; }; + C14F84181681326600AAB80A /* sha1_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha1_vectors.js; sourceTree = ""; }; + C14F84191681326600AAB80A /* sha256_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha256_test.js; sourceTree = ""; }; + C14F841A1681326600AAB80A /* sha256_test_brute_force.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha256_test_brute_force.js; sourceTree = ""; }; + C14F841B1681326600AAB80A /* sha256_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha256_vectors.js; sourceTree = ""; }; + C14F841C1681326600AAB80A /* srp_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = srp_test.js; sourceTree = ""; }; + C14F841D1681326600AAB80A /* srp_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = srp_vectors.js; sourceTree = ""; }; + C14F841E1681326600AAB80A /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; + C14F841F1681326600AAB80A /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; + C14F84201681326600AAB80A /* utils.web.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.web.js; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + C14F81241681323400AAB80A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + C10365CA168147DF00D9D15C /* build */ = { + isa = PBXGroup; + children = ( + C10365C8168147D200D9D15C /* ripple.pb.cc */, + ); + name = build; + sourceTree = ""; + }; + C14F811C1681323300AAB80A = { + isa = PBXGroup; + children = ( + C10365CA168147DF00D9D15C /* build */, + C14F812A1681323400AAB80A /* rippled */, + C14F81281681323400AAB80A /* Products */, + ); + sourceTree = ""; + }; + C14F81281681323400AAB80A /* Products */ = { + isa = PBXGroup; + children = ( + C14F81271681323400AAB80A /* rippled */, + ); + name = Products; + sourceTree = ""; + }; + C14F812A1681323400AAB80A /* rippled */ = { + isa = PBXGroup; + children = ( + C14F81341681326600AAB80A /* src */, + C14F812D1681323400AAB80A /* rippled.1 */, + ); + path = rippled; + sourceTree = ""; + }; + C14F81341681326600AAB80A /* src */ = { + isa = PBXGroup; + children = ( + C14F81351681326600AAB80A /* cpp */, + C14F832E1681326600AAB80A /* js */, + ); + name = src; + path = ../../src; + sourceTree = ""; + }; + C14F81351681326600AAB80A /* cpp */ = { + isa = PBXGroup; + children = ( + C14F81361681326600AAB80A /* database */, + C14F81451681326600AAB80A /* json */, + C14F81571681326600AAB80A /* ripple */, + C14F82151681326600AAB80A /* websocketpp */, + ); + path = cpp; + sourceTree = ""; + }; + C14F81361681326600AAB80A /* database */ = { + isa = PBXGroup; + children = ( + C14F81371681326600AAB80A /* database.cpp */, + C14F81381681326600AAB80A /* database.h */, + C14F81391681326600AAB80A /* linux */, + C14F813C1681326600AAB80A /* sqlite3.c */, + C14F813D1681326600AAB80A /* sqlite3.h */, + C14F813E1681326600AAB80A /* sqlite3ext.h */, + C14F813F1681326600AAB80A /* SqliteDatabase.cpp */, + C14F81401681326600AAB80A /* SqliteDatabase.h */, + C14F81411681326600AAB80A /* win */, + ); + path = database; + sourceTree = ""; + }; + C14F81391681326600AAB80A /* linux */ = { + isa = PBXGroup; + children = ( + C14F813A1681326600AAB80A /* mysqldatabase.cpp */, + C14F813B1681326600AAB80A /* mysqldatabase.h */, + ); + path = linux; + sourceTree = ""; + }; + C14F81411681326600AAB80A /* win */ = { + isa = PBXGroup; + children = ( + C14F81421681326600AAB80A /* dbutility.h */, + C14F81431681326600AAB80A /* windatabase.cpp */, + C14F81441681326600AAB80A /* windatabase.h */, + ); + path = win; + sourceTree = ""; + }; + C14F81451681326600AAB80A /* json */ = { + isa = PBXGroup; + children = ( + C14F81461681326600AAB80A /* autolink.h */, + C14F81471681326600AAB80A /* config.h */, + C14F81481681326600AAB80A /* features.h */, + C14F81491681326600AAB80A /* forwards.h */, + C14F814A1681326600AAB80A /* json.h */, + C14F814B1681326600AAB80A /* json_batchallocator.h */, + C14F814C1681326600AAB80A /* json_internalarray.inl */, + C14F814D1681326600AAB80A /* json_internalmap.inl */, + C14F814E1681326600AAB80A /* json_reader.cpp */, + C14F814F1681326600AAB80A /* json_value.cpp */, + C14F81501681326600AAB80A /* json_valueiterator.inl */, + C14F81511681326600AAB80A /* json_writer.cpp */, + C14F81521681326600AAB80A /* LICENSE */, + C14F81531681326600AAB80A /* reader.h */, + C14F81541681326600AAB80A /* value.h */, + C14F81551681326600AAB80A /* version */, + C14F81561681326600AAB80A /* writer.h */, + ); + path = json; + sourceTree = ""; + }; + C14F81571681326600AAB80A /* ripple */ = { + isa = PBXGroup; + children = ( + C14F81581681326600AAB80A /* AccountItems.cpp */, + C14F81591681326600AAB80A /* AccountItems.h */, + C14F815A1681326600AAB80A /* AccountSetTransactor.cpp */, + C14F815B1681326600AAB80A /* AccountSetTransactor.h */, + C14F815C1681326600AAB80A /* AccountState.cpp */, + C14F815D1681326600AAB80A /* AccountState.h */, + C14F815E1681326600AAB80A /* Amount.cpp */, + C14F815F1681326600AAB80A /* Application.cpp */, + C14F81601681326600AAB80A /* Application.h */, + C14F81611681326600AAB80A /* base58.h */, + C14F81621681326600AAB80A /* bignum.h */, + C14F81631681326600AAB80A /* BitcoinUtil.cpp */, + C14F81641681326600AAB80A /* BitcoinUtil.h */, + C14F81651681326600AAB80A /* CallRPC.cpp */, + C14F81661681326600AAB80A /* CallRPC.h */, + C14F81671681326600AAB80A /* CanonicalTXSet.cpp */, + C14F81681681326600AAB80A /* CanonicalTXSet.h */, + C14F81691681326600AAB80A /* Config.cpp */, + C14F816A1681326600AAB80A /* Config.h */, + C14F816B1681326600AAB80A /* ConnectionPool.cpp */, + C14F816C1681326600AAB80A /* ConnectionPool.h */, + C14F816D1681326600AAB80A /* Contract.cpp */, + C14F816E1681326600AAB80A /* Contract.h */, + C14F816F1681326600AAB80A /* DBInit.cpp */, + C14F81701681326600AAB80A /* DeterministicKeys.cpp */, + C14F81711681326600AAB80A /* ECIES.cpp */, + C14F81721681326600AAB80A /* FeatureTable.cpp */, + C14F81731681326600AAB80A /* FeatureTable.h */, + C14F81741681326600AAB80A /* FieldNames.cpp */, + C14F81751681326600AAB80A /* FieldNames.h */, + C14F81761681326600AAB80A /* HashedObject.cpp */, + C14F81771681326600AAB80A /* HashedObject.h */, + C14F81781681326600AAB80A /* HashPrefixes.h */, + C14F81791681326600AAB80A /* HTTPRequest.cpp */, + C14F817A1681326600AAB80A /* HTTPRequest.h */, + C14F817B1681326600AAB80A /* HttpsClient.cpp */, + C14F817C1681326600AAB80A /* HttpsClient.h */, + C14F817D1681326600AAB80A /* InstanceCounter.cpp */, + C14F817E1681326600AAB80A /* InstanceCounter.h */, + C14F817F1681326600AAB80A /* Interpreter.cpp */, + C14F81801681326600AAB80A /* Interpreter.h */, + C14F81811681326600AAB80A /* JobQueue.cpp */, + C14F81821681326600AAB80A /* JobQueue.h */, + C14F81831681326600AAB80A /* key.h */, + C14F81841681326600AAB80A /* Ledger.cpp */, + C14F81851681326600AAB80A /* Ledger.h */, + C14F81861681326600AAB80A /* LedgerAcquire.cpp */, + C14F81871681326600AAB80A /* LedgerAcquire.h */, + C14F81881681326600AAB80A /* LedgerConsensus.cpp */, + C14F81891681326600AAB80A /* LedgerConsensus.h */, + C14F818A1681326600AAB80A /* LedgerEntrySet.cpp */, + C14F818B1681326600AAB80A /* LedgerEntrySet.h */, + C14F818C1681326600AAB80A /* LedgerFormats.cpp */, + C14F818D1681326600AAB80A /* LedgerFormats.h */, + C14F818E1681326600AAB80A /* LedgerHistory.cpp */, + C14F818F1681326600AAB80A /* LedgerHistory.h */, + C14F81901681326600AAB80A /* LedgerMaster.cpp */, + C14F81911681326600AAB80A /* LedgerMaster.h */, + C14F81921681326600AAB80A /* LedgerProposal.cpp */, + C14F81931681326600AAB80A /* LedgerProposal.h */, + C14F81941681326600AAB80A /* LedgerTiming.cpp */, + C14F81951681326600AAB80A /* LedgerTiming.h */, + C14F81961681326600AAB80A /* LoadManager.cpp */, + C14F81971681326600AAB80A /* LoadManager.h */, + C14F81981681326600AAB80A /* LoadMonitor.cpp */, + C14F81991681326600AAB80A /* LoadMonitor.h */, + C14F819A1681326600AAB80A /* Log.cpp */, + C14F819B1681326600AAB80A /* Log.h */, + C14F819C1681326600AAB80A /* main.cpp */, + C14F819D1681326600AAB80A /* NetworkOPs.cpp */, + C14F819E1681326600AAB80A /* NetworkOPs.h */, + C14F819F1681326600AAB80A /* NetworkStatus.h */, + C14F81A01681326600AAB80A /* NicknameState.cpp */, + C14F81A11681326600AAB80A /* NicknameState.h */, + C14F81A21681326600AAB80A /* Offer.cpp */, + C14F81A31681326600AAB80A /* Offer.h */, + C14F81A41681326600AAB80A /* OfferCancelTransactor.cpp */, + C14F81A51681326600AAB80A /* OfferCancelTransactor.h */, + C14F81A61681326600AAB80A /* OfferCreateTransactor.cpp */, + C14F81A71681326600AAB80A /* OfferCreateTransactor.h */, + C14F81A81681326600AAB80A /* Operation.cpp */, + C14F81A91681326600AAB80A /* Operation.h */, + C14F81AA1681326600AAB80A /* OrderBook.cpp */, + C14F81AB1681326600AAB80A /* OrderBook.h */, + C14F81AC1681326600AAB80A /* OrderBookDB.cpp */, + C14F81AD1681326600AAB80A /* OrderBookDB.h */, + C14F81AE1681326600AAB80A /* PackedMessage.cpp */, + C14F81AF1681326600AAB80A /* PackedMessage.h */, + C14F81B01681326600AAB80A /* ParameterTable.cpp */, + C14F81B11681326600AAB80A /* ParameterTable.h */, + C14F81B21681326600AAB80A /* ParseSection.cpp */, + C14F81B31681326600AAB80A /* ParseSection.h */, + C14F81B41681326600AAB80A /* Pathfinder.cpp */, + C14F81B51681326600AAB80A /* Pathfinder.h */, + C14F81B61681326600AAB80A /* PaymentTransactor.cpp */, + C14F81B71681326600AAB80A /* PaymentTransactor.h */, + C14F81B81681326600AAB80A /* Peer.cpp */, + C14F81B91681326600AAB80A /* Peer.h */, + C14F81BA1681326600AAB80A /* PeerDoor.cpp */, + C14F81BB1681326600AAB80A /* PeerDoor.h */, + C14F81BC1681326600AAB80A /* PlatRand.cpp */, + C14F81BD1681326600AAB80A /* ProofOfWork.cpp */, + C14F81BE1681326600AAB80A /* ProofOfWork.h */, + C14F81BF1681326600AAB80A /* PubKeyCache.cpp */, + C14F81C01681326600AAB80A /* PubKeyCache.h */, + C14F81C11681326600AAB80A /* RangeSet.cpp */, + C14F81C21681326600AAB80A /* RangeSet.h */, + C14F81C31681326600AAB80A /* RegularKeySetTransactor.cpp */, + C14F81C41681326600AAB80A /* RegularKeySetTransactor.h */, + C14F81C51681326600AAB80A /* rfc1751.cpp */, + C14F81C61681326600AAB80A /* rfc1751.h */, + C14F81C71681326600AAB80A /* ripple.proto */, + C14F81C81681326600AAB80A /* RippleAddress.cpp */, + C14F81C91681326600AAB80A /* RippleAddress.h */, + C14F81CA1681326600AAB80A /* RippleCalc.cpp */, + C14F81CB1681326600AAB80A /* RippleCalc.h */, + C14F81CC1681326600AAB80A /* RippleState.cpp */, + C14F81CD1681326600AAB80A /* RippleState.h */, + C14F81CE1681326600AAB80A /* rpc.cpp */, + C14F81CF1681326600AAB80A /* RPC.h */, + C14F81D01681326600AAB80A /* RPCDoor.cpp */, + C14F81D11681326600AAB80A /* RPCDoor.h */, + C14F81D21681326600AAB80A /* RPCErr.cpp */, + C14F81D31681326600AAB80A /* RPCErr.h */, + C14F81D41681326600AAB80A /* RPCHandler.cpp */, + C14F81D51681326600AAB80A /* RPCHandler.h */, + C14F81D61681326600AAB80A /* RPCServer.cpp */, + C14F81D71681326600AAB80A /* RPCServer.h */, + C14F81D81681326600AAB80A /* ScopedLock.h */, + C14F81D91681326600AAB80A /* ScriptData.cpp */, + C14F81DA1681326600AAB80A /* ScriptData.h */, + C14F81DB1681326600AAB80A /* SecureAllocator.h */, + C14F81DC1681326600AAB80A /* SerializedLedger.cpp */, + C14F81DD1681326600AAB80A /* SerializedLedger.h */, + C14F81DE1681326600AAB80A /* SerializedObject.cpp */, + C14F81DF1681326600AAB80A /* SerializedObject.h */, + C14F81E01681326600AAB80A /* SerializedTransaction.cpp */, + C14F81E11681326600AAB80A /* SerializedTransaction.h */, + C14F81E21681326600AAB80A /* SerializedTypes.cpp */, + C14F81E31681326600AAB80A /* SerializedTypes.h */, + C14F81E41681326600AAB80A /* SerializedValidation.cpp */, + C14F81E51681326600AAB80A /* SerializedValidation.h */, + C14F81E61681326600AAB80A /* SerializeProto.h */, + C14F81E71681326600AAB80A /* Serializer.cpp */, + C14F81E81681326600AAB80A /* Serializer.h */, + C14F81E91681326600AAB80A /* SHAMap.cpp */, + C14F81EA1681326600AAB80A /* SHAMap.h */, + C14F81EB1681326600AAB80A /* SHAMapDiff.cpp */, + C14F81EC1681326600AAB80A /* SHAMapNodes.cpp */, + C14F81ED1681326600AAB80A /* SHAMapSync.cpp */, + C14F81EE1681326600AAB80A /* SHAMapSync.h */, + C14F81EF1681326600AAB80A /* SNTPClient.cpp */, + C14F81F01681326600AAB80A /* SNTPClient.h */, + C14F81F11681326600AAB80A /* Suppression.cpp */, + C14F81F21681326600AAB80A /* Suppression.h */, + C14F81F31681326600AAB80A /* TaggedCache.h */, + C14F81F41681326600AAB80A /* Transaction.cpp */, + C14F81F51681326600AAB80A /* Transaction.h */, + C14F81F61681326600AAB80A /* TransactionEngine.cpp */, + C14F81F71681326600AAB80A /* TransactionEngine.h */, + C14F81F81681326600AAB80A /* TransactionErr.cpp */, + C14F81F91681326600AAB80A /* TransactionErr.h */, + C14F81FA1681326600AAB80A /* TransactionFormats.cpp */, + C14F81FB1681326600AAB80A /* TransactionFormats.h */, + C14F81FC1681326600AAB80A /* TransactionMaster.cpp */, + C14F81FD1681326600AAB80A /* TransactionMaster.h */, + C14F81FE1681326600AAB80A /* TransactionMeta.cpp */, + C14F81FF1681326600AAB80A /* TransactionMeta.h */, + C14F82001681326600AAB80A /* Transactor.cpp */, + C14F82011681326600AAB80A /* Transactor.h */, + C14F82021681326600AAB80A /* TrustSetTransactor.cpp */, + C14F82031681326600AAB80A /* TrustSetTransactor.h */, + C14F82041681326600AAB80A /* types.h */, + C14F82051681326600AAB80A /* uint256.h */, + C14F82061681326600AAB80A /* UniqueNodeList.cpp */, + C14F82071681326600AAB80A /* UniqueNodeList.h */, + C14F82081681326600AAB80A /* utils.cpp */, + C14F82091681326600AAB80A /* utils.h */, + C14F820A1681326600AAB80A /* ValidationCollection.cpp */, + C14F820B1681326600AAB80A /* ValidationCollection.h */, + C14F820C1681326600AAB80A /* Version.h */, + C14F820D1681326600AAB80A /* Wallet.cpp */, + C14F820E1681326600AAB80A /* Wallet.h */, + C14F820F1681326600AAB80A /* WalletAddTransactor.cpp */, + C14F82101681326600AAB80A /* WalletAddTransactor.h */, + C14F82111681326600AAB80A /* WSConnection.h */, + C14F82121681326600AAB80A /* WSDoor.cpp */, + C14F82131681326600AAB80A /* WSDoor.h */, + C14F82141681326600AAB80A /* WSHandler.h */, + ); + path = ripple; + sourceTree = ""; + }; + C14F82151681326600AAB80A /* websocketpp */ = { + isa = PBXGroup; + children = ( + C14F82161681326600AAB80A /* dependencies.txt */, + C14F82171681326600AAB80A /* doc */, + C14F82191681326600AAB80A /* examples */, + C14F82BC1681326600AAB80A /* license.txt */, + C14F82BD1681326600AAB80A /* Makefile */, + C14F82BE1681326600AAB80A /* readme.txt */, + C14F82BF1681326600AAB80A /* SConstruct */, + C14F82C01681326600AAB80A /* src */, + C14F83001681326600AAB80A /* test */, + C14F83071681326600AAB80A /* todo.txt */, + C14F83081681326600AAB80A /* websocketpp.bbprojectd */, + C14F830D1681326600AAB80A /* websocketpp.xcodeproj */, + C14F83101681326600AAB80A /* windows */, + ); + path = websocketpp; + sourceTree = ""; + }; + C14F82171681326600AAB80A /* doc */ = { + isa = PBXGroup; + children = ( + C14F82181681326600AAB80A /* uri.txt */, + ); + path = doc; + sourceTree = ""; + }; + C14F82191681326600AAB80A /* examples */ = { + isa = PBXGroup; + children = ( + C14F821A1681326600AAB80A /* broadcast_server_tls */, + C14F826F1681326600AAB80A /* chat_client */, + C14F82781681326600AAB80A /* chat_server */, + C14F827E1681326600AAB80A /* common.mk */, + C14F827F1681326600AAB80A /* concurrent_server */, + C14F82841681326600AAB80A /* echo_client */, + C14F82881681326600AAB80A /* echo_server */, + C14F828D1681326600AAB80A /* echo_server_tls */, + C14F82941681326600AAB80A /* fuzzing_client */, + C14F82971681326600AAB80A /* fuzzing_server_tls */, + C14F829B1681326600AAB80A /* Makefile */, + C14F829C1681326600AAB80A /* stress_client */, + C14F829F1681326600AAB80A /* telemetry_server */, + C14F82A31681326600AAB80A /* wsperf */, + ); + path = examples; + sourceTree = ""; + }; + C14F821A1681326600AAB80A /* broadcast_server_tls */ = { + isa = PBXGroup; + children = ( + C14F821B1681326600AAB80A /* broadcast_admin.html */, + C14F821C1681326600AAB80A /* broadcast_admin_handler.hpp */, + C14F821D1681326600AAB80A /* broadcast_handler.hpp */, + C14F821E1681326600AAB80A /* broadcast_server_handler.hpp */, + C14F821F1681326600AAB80A /* broadcast_server_tls.cpp */, + C14F82201681326600AAB80A /* Makefile */, + C14F82211681326600AAB80A /* vendor */, + C14F826E1681326600AAB80A /* wscmd.hpp */, + ); + path = broadcast_server_tls; + sourceTree = ""; + }; + C14F82211681326600AAB80A /* vendor */ = { + isa = PBXGroup; + children = ( + C14F82221681326600AAB80A /* flot */, + C14F826D1681326600AAB80A /* md5.js */, + ); + path = vendor; + sourceTree = ""; + }; + C14F82221681326600AAB80A /* flot */ = { + isa = PBXGroup; + children = ( + C14F82231681326600AAB80A /* API.txt */, + C14F82241681326600AAB80A /* examples */, + C14F824B1681326600AAB80A /* excanvas.js */, + C14F824C1681326600AAB80A /* excanvas.min.js */, + C14F824D1681326600AAB80A /* FAQ.txt */, + C14F824E1681326600AAB80A /* jquery.colorhelpers.js */, + C14F824F1681326600AAB80A /* jquery.colorhelpers.min.js */, + C14F82501681326600AAB80A /* jquery.flot.crosshair.js */, + C14F82511681326600AAB80A /* jquery.flot.crosshair.min.js */, + C14F82521681326600AAB80A /* jquery.flot.fillbetween.js */, + C14F82531681326600AAB80A /* jquery.flot.fillbetween.min.js */, + C14F82541681326600AAB80A /* jquery.flot.image.js */, + C14F82551681326600AAB80A /* jquery.flot.image.min.js */, + C14F82561681326600AAB80A /* jquery.flot.js */, + C14F82571681326600AAB80A /* jquery.flot.min.js */, + C14F82581681326600AAB80A /* jquery.flot.navigate.js */, + C14F82591681326600AAB80A /* jquery.flot.navigate.min.js */, + C14F825A1681326600AAB80A /* jquery.flot.pie.js */, + C14F825B1681326600AAB80A /* jquery.flot.pie.min.js */, + C14F825C1681326600AAB80A /* jquery.flot.resize.js */, + C14F825D1681326600AAB80A /* jquery.flot.resize.min.js */, + C14F825E1681326600AAB80A /* jquery.flot.selection.js */, + C14F825F1681326600AAB80A /* jquery.flot.selection.min.js */, + C14F82601681326600AAB80A /* jquery.flot.stack.js */, + C14F82611681326600AAB80A /* jquery.flot.stack.min.js */, + C14F82621681326600AAB80A /* jquery.flot.symbol.js */, + C14F82631681326600AAB80A /* jquery.flot.symbol.min.js */, + C14F82641681326600AAB80A /* jquery.flot.threshold.js */, + C14F82651681326600AAB80A /* jquery.flot.threshold.min.js */, + C14F82661681326600AAB80A /* jquery.js */, + C14F82671681326600AAB80A /* jquery.min.js */, + C14F82681681326600AAB80A /* LICENSE.txt */, + C14F82691681326600AAB80A /* Makefile */, + C14F826A1681326600AAB80A /* NEWS.txt */, + C14F826B1681326600AAB80A /* PLUGINS.txt */, + C14F826C1681326600AAB80A /* README.txt */, + ); + path = flot; + sourceTree = ""; + }; + C14F82241681326600AAB80A /* examples */ = { + isa = PBXGroup; + children = ( + C14F82251681326600AAB80A /* ajax.html */, + C14F82261681326600AAB80A /* annotating.html */, + C14F82271681326600AAB80A /* arrow-down.gif */, + C14F82281681326600AAB80A /* arrow-left.gif */, + C14F82291681326600AAB80A /* arrow-right.gif */, + C14F822A1681326600AAB80A /* arrow-up.gif */, + C14F822B1681326600AAB80A /* basic.html */, + C14F822C1681326600AAB80A /* data-eu-gdp-growth-1.json */, + C14F822D1681326600AAB80A /* data-eu-gdp-growth-2.json */, + C14F822E1681326600AAB80A /* data-eu-gdp-growth-3.json */, + C14F822F1681326600AAB80A /* data-eu-gdp-growth-4.json */, + C14F82301681326600AAB80A /* data-eu-gdp-growth-5.json */, + C14F82311681326600AAB80A /* data-eu-gdp-growth.json */, + C14F82321681326600AAB80A /* data-japan-gdp-growth.json */, + C14F82331681326600AAB80A /* data-usa-gdp-growth.json */, + C14F82341681326600AAB80A /* graph-types.html */, + C14F82351681326600AAB80A /* hs-2004-27-a-large_web.jpg */, + C14F82361681326600AAB80A /* image.html */, + C14F82371681326600AAB80A /* index.html */, + C14F82381681326600AAB80A /* interacting-axes.html */, + C14F82391681326600AAB80A /* interacting.html */, + C14F823A1681326600AAB80A /* layout.css */, + C14F823B1681326600AAB80A /* multiple-axes.html */, + C14F823C1681326600AAB80A /* navigate.html */, + C14F823D1681326600AAB80A /* percentiles.html */, + C14F823E1681326600AAB80A /* pie.html */, + C14F823F1681326600AAB80A /* realtime.html */, + C14F82401681326600AAB80A /* resize.html */, + C14F82411681326600AAB80A /* selection.html */, + C14F82421681326600AAB80A /* setting-options.html */, + C14F82431681326600AAB80A /* stacking.html */, + C14F82441681326600AAB80A /* symbols.html */, + C14F82451681326600AAB80A /* thresholding.html */, + C14F82461681326600AAB80A /* time.html */, + C14F82471681326600AAB80A /* tracking.html */, + C14F82481681326600AAB80A /* turning-series.html */, + C14F82491681326600AAB80A /* visitors.html */, + C14F824A1681326600AAB80A /* zooming.html */, + ); + path = examples; + sourceTree = ""; + }; + C14F826F1681326600AAB80A /* chat_client */ = { + isa = PBXGroup; + children = ( + C14F82701681326600AAB80A /* chat_client.cpp */, + C14F82711681326600AAB80A /* chat_client.html */, + C14F82721681326600AAB80A /* chat_client_handler.cpp */, + C14F82731681326600AAB80A /* chat_client_handler.hpp */, + C14F82741681326600AAB80A /* Makefile */, + C14F82751681326600AAB80A /* SConscript */, + C14F82761681326600AAB80A /* vendor */, + ); + path = chat_client; + sourceTree = ""; + }; + C14F82761681326600AAB80A /* vendor */ = { + isa = PBXGroup; + children = ( + C14F82771681326600AAB80A /* jquery-1.6.3.min.js */, + ); + path = vendor; + sourceTree = ""; + }; + C14F82781681326600AAB80A /* chat_server */ = { + isa = PBXGroup; + children = ( + C14F82791681326600AAB80A /* chat.cpp */, + C14F827A1681326600AAB80A /* chat.hpp */, + C14F827B1681326600AAB80A /* chat_server.cpp */, + C14F827C1681326600AAB80A /* Makefile */, + C14F827D1681326600AAB80A /* SConscript */, + ); + path = chat_server; + sourceTree = ""; + }; + C14F827F1681326600AAB80A /* concurrent_server */ = { + isa = PBXGroup; + children = ( + C14F82801681326600AAB80A /* concurrent_client.html */, + C14F82811681326600AAB80A /* concurrent_server.cpp */, + C14F82821681326600AAB80A /* Makefile */, + C14F82831681326600AAB80A /* SConscript */, + ); + path = concurrent_server; + sourceTree = ""; + }; + C14F82841681326600AAB80A /* echo_client */ = { + isa = PBXGroup; + children = ( + C14F82851681326600AAB80A /* echo_client.cpp */, + C14F82861681326600AAB80A /* Makefile */, + C14F82871681326600AAB80A /* SConscript */, + ); + path = echo_client; + sourceTree = ""; + }; + C14F82881681326600AAB80A /* echo_server */ = { + isa = PBXGroup; + children = ( + C14F82891681326600AAB80A /* echo_client.html */, + C14F828A1681326600AAB80A /* echo_server.cpp */, + C14F828B1681326600AAB80A /* Makefile */, + C14F828C1681326600AAB80A /* SConscript */, + ); + path = echo_server; + sourceTree = ""; + }; + C14F828D1681326600AAB80A /* echo_server_tls */ = { + isa = PBXGroup; + children = ( + C14F828E1681326600AAB80A /* echo.cpp */, + C14F828F1681326600AAB80A /* echo.hpp */, + C14F82901681326600AAB80A /* echo_client.html */, + C14F82911681326600AAB80A /* echo_server_tls.cpp */, + C14F82921681326600AAB80A /* Makefile */, + C14F82931681326600AAB80A /* SConscript */, + ); + path = echo_server_tls; + sourceTree = ""; + }; + C14F82941681326600AAB80A /* fuzzing_client */ = { + isa = PBXGroup; + children = ( + C14F82951681326600AAB80A /* fuzzing_client.cpp */, + C14F82961681326600AAB80A /* Makefile */, + ); + path = fuzzing_client; + sourceTree = ""; + }; + C14F82971681326600AAB80A /* fuzzing_server_tls */ = { + isa = PBXGroup; + children = ( + C14F82981681326600AAB80A /* echo_client.html */, + C14F82991681326600AAB80A /* fuzzing_server_tls.cpp */, + C14F829A1681326600AAB80A /* Makefile */, + ); + path = fuzzing_server_tls; + sourceTree = ""; + }; + C14F829C1681326600AAB80A /* stress_client */ = { + isa = PBXGroup; + children = ( + C14F829D1681326600AAB80A /* Makefile */, + C14F829E1681326600AAB80A /* stress_client.cpp */, + ); + path = stress_client; + sourceTree = ""; + }; + C14F829F1681326600AAB80A /* telemetry_server */ = { + isa = PBXGroup; + children = ( + C14F82A01681326600AAB80A /* Makefile */, + C14F82A11681326600AAB80A /* SConscript */, + C14F82A21681326600AAB80A /* telemetry_server.cpp */, + ); + path = telemetry_server; + sourceTree = ""; + }; + C14F82A31681326600AAB80A /* wsperf */ = { + isa = PBXGroup; + children = ( + C14F82A41681326600AAB80A /* case.cpp */, + C14F82A51681326600AAB80A /* case.hpp */, + C14F82A61681326600AAB80A /* generic.cpp */, + C14F82A71681326600AAB80A /* generic.hpp */, + C14F82A81681326600AAB80A /* Makefile */, + C14F82A91681326600AAB80A /* message_test.html */, + C14F82AA1681326600AAB80A /* request.cpp */, + C14F82AB1681326600AAB80A /* request.hpp */, + C14F82AC1681326600AAB80A /* SConscript */, + C14F82AD1681326600AAB80A /* stress_aggregate.cpp */, + C14F82AE1681326600AAB80A /* stress_aggregate.hpp */, + C14F82AF1681326600AAB80A /* stress_handler.cpp */, + C14F82B01681326600AAB80A /* stress_handler.hpp */, + C14F82B11681326600AAB80A /* stress_test.html */, + C14F82B21681326600AAB80A /* vendor */, + C14F82B71681326600AAB80A /* wscmd.cpp */, + C14F82B81681326600AAB80A /* wscmd.hpp */, + C14F82B91681326600AAB80A /* wsperf.cfg */, + C14F82BA1681326600AAB80A /* wsperf.cpp */, + C14F82BB1681326600AAB80A /* wsperf_commander.html */, + ); + path = wsperf; + sourceTree = ""; + }; + C14F82B21681326600AAB80A /* vendor */ = { + isa = PBXGroup; + children = ( + C14F82B31681326600AAB80A /* backbone-localstorage.js */, + C14F82B41681326600AAB80A /* backbone.js */, + C14F82B51681326600AAB80A /* jquery.min.js */, + C14F82B61681326600AAB80A /* underscore.js */, + ); + path = vendor; + sourceTree = ""; + }; + C14F82C01681326600AAB80A /* src */ = { + isa = PBXGroup; + children = ( + C14F82C11681326600AAB80A /* base64 */, + C14F82C41681326600AAB80A /* common.hpp */, + C14F82C51681326600AAB80A /* connection.hpp */, + C14F82C61681326600AAB80A /* endpoint.hpp */, + C14F82C71681326600AAB80A /* http */, + C14F82CA1681326600AAB80A /* logger */, + C14F82CC1681326600AAB80A /* md5 */, + C14F82D01681326600AAB80A /* messages */, + C14F82D41681326600AAB80A /* network_utilities.cpp */, + C14F82D51681326600AAB80A /* network_utilities.hpp */, + C14F82D61681326600AAB80A /* processors */, + C14F82DE1681326600AAB80A /* rng */, + C14F82E31681326600AAB80A /* roles */, + C14F82E61681326600AAB80A /* SConscript */, + C14F82E71681326600AAB80A /* sha1 */, + C14F82F01681326600AAB80A /* shared_const_buffer.hpp */, + C14F82F11681326600AAB80A /* sockets */, + C14F82F51681326600AAB80A /* ssl */, + C14F82FA1681326600AAB80A /* uri.cpp */, + C14F82FB1681326600AAB80A /* uri.hpp */, + C14F82FC1681326600AAB80A /* utf8_validator */, + C14F82FE1681326600AAB80A /* websocket_frame.hpp */, + C14F82FF1681326600AAB80A /* websocketpp.hpp */, + ); + path = src; + sourceTree = ""; + }; + C14F82C11681326600AAB80A /* base64 */ = { + isa = PBXGroup; + children = ( + C14F82C21681326600AAB80A /* base64.cpp */, + C14F82C31681326600AAB80A /* base64.h */, + ); + path = base64; + sourceTree = ""; + }; + C14F82C71681326600AAB80A /* http */ = { + isa = PBXGroup; + children = ( + C14F82C81681326600AAB80A /* constants.hpp */, + C14F82C91681326600AAB80A /* parser.hpp */, + ); + path = http; + sourceTree = ""; + }; + C14F82CA1681326600AAB80A /* logger */ = { + isa = PBXGroup; + children = ( + C14F82CB1681326600AAB80A /* logger.hpp */, + ); + path = logger; + sourceTree = ""; + }; + C14F82CC1681326600AAB80A /* md5 */ = { + isa = PBXGroup; + children = ( + C14F82CD1681326600AAB80A /* md5.c */, + C14F82CE1681326600AAB80A /* md5.h */, + C14F82CF1681326600AAB80A /* md5.hpp */, + ); + path = md5; + sourceTree = ""; + }; + C14F82D01681326600AAB80A /* messages */ = { + isa = PBXGroup; + children = ( + C14F82D11681326600AAB80A /* control.hpp */, + C14F82D21681326600AAB80A /* data.cpp */, + C14F82D31681326600AAB80A /* data.hpp */, + ); + path = messages; + sourceTree = ""; + }; + C14F82D61681326600AAB80A /* processors */ = { + isa = PBXGroup; + children = ( + C14F82D71681326600AAB80A /* hybi.hpp */, + C14F82D81681326600AAB80A /* hybi_header.cpp */, + C14F82D91681326600AAB80A /* hybi_header.hpp */, + C14F82DA1681326600AAB80A /* hybi_legacy.hpp */, + C14F82DB1681326600AAB80A /* hybi_util.cpp */, + C14F82DC1681326600AAB80A /* hybi_util.hpp */, + C14F82DD1681326600AAB80A /* processor.hpp */, + ); + path = processors; + sourceTree = ""; + }; + C14F82DE1681326600AAB80A /* rng */ = { + isa = PBXGroup; + children = ( + C14F82DF1681326600AAB80A /* blank_rng.cpp */, + C14F82E01681326600AAB80A /* blank_rng.hpp */, + C14F82E11681326600AAB80A /* boost_rng.cpp */, + C14F82E21681326600AAB80A /* boost_rng.hpp */, + ); + path = rng; + sourceTree = ""; + }; + C14F82E31681326600AAB80A /* roles */ = { + isa = PBXGroup; + children = ( + C14F82E41681326600AAB80A /* client.hpp */, + C14F82E51681326600AAB80A /* server.hpp */, + ); + path = roles; + sourceTree = ""; + }; + C14F82E71681326600AAB80A /* sha1 */ = { + isa = PBXGroup; + children = ( + C14F82E81681326600AAB80A /* license.txt */, + C14F82E91681326600AAB80A /* Makefile */, + C14F82EA1681326600AAB80A /* Makefile.nt */, + C14F82EB1681326600AAB80A /* sha.cpp */, + C14F82EC1681326600AAB80A /* sha1.cpp */, + C14F82ED1681326600AAB80A /* sha1.h */, + C14F82EE1681326600AAB80A /* shacmp.cpp */, + C14F82EF1681326600AAB80A /* shatest.cpp */, + ); + path = sha1; + sourceTree = ""; + }; + C14F82F11681326600AAB80A /* sockets */ = { + isa = PBXGroup; + children = ( + C14F82F21681326600AAB80A /* plain.hpp */, + C14F82F31681326600AAB80A /* socket_base.hpp */, + C14F82F41681326600AAB80A /* tls.hpp */, + ); + path = sockets; + sourceTree = ""; + }; + C14F82F51681326600AAB80A /* ssl */ = { + isa = PBXGroup; + children = ( + C14F82F61681326600AAB80A /* client.pem */, + C14F82F71681326600AAB80A /* dh512.pem */, + C14F82F81681326600AAB80A /* server.cer */, + C14F82F91681326600AAB80A /* server.pem */, + ); + path = ssl; + sourceTree = ""; + }; + C14F82FC1681326600AAB80A /* utf8_validator */ = { + isa = PBXGroup; + children = ( + C14F82FD1681326600AAB80A /* utf8_validator.hpp */, + ); + path = utf8_validator; + sourceTree = ""; + }; + C14F83001681326600AAB80A /* test */ = { + isa = PBXGroup; + children = ( + C14F83011681326600AAB80A /* basic */, + ); + path = test; + sourceTree = ""; + }; + C14F83011681326600AAB80A /* basic */ = { + isa = PBXGroup; + children = ( + C14F83021681326600AAB80A /* hybi_util.cpp */, + C14F83031681326600AAB80A /* logging.cpp */, + C14F83041681326600AAB80A /* Makefile */, + C14F83051681326600AAB80A /* parsing.cpp */, + C14F83061681326600AAB80A /* uri_perf.cpp */, + ); + path = basic; + sourceTree = ""; + }; + C14F83081681326600AAB80A /* websocketpp.bbprojectd */ = { + isa = PBXGroup; + children = ( + C14F83091681326600AAB80A /* project.bbprojectdata */, + C14F830A1681326600AAB80A /* Scratchpad.txt */, + C14F830B1681326600AAB80A /* Unix Worksheet.worksheet */, + C14F830C1681326600AAB80A /* zaphoyd.bbprojectsettings */, + ); + path = websocketpp.bbprojectd; + sourceTree = ""; + }; + C14F830E1681326600AAB80A /* Products */ = { + isa = PBXGroup; + children = ( + C14F85A81681326700AAB80A /* libwebsocketpp.a */, + C14F85AA1681326700AAB80A /* libwebsocketpp.dylib */, + C14F85AC1681326700AAB80A /* echo_server */, + C14F85AE1681326700AAB80A /* chat_client */, + C14F85B01681326700AAB80A /* echo_client */, + C14F85B21681326700AAB80A /* Policy Test */, + C14F85B41681326700AAB80A /* echo_server_tls */, + C14F85B61681326700AAB80A /* fuzzing_server */, + C14F85B81681326700AAB80A /* fuzzing_client */, + C14F85BA1681326700AAB80A /* broadcast_server */, + C14F85BC1681326700AAB80A /* stress_client */, + C14F85BE1681326700AAB80A /* concurrent_server */, + C14F85C01681326700AAB80A /* wsperf */, + ); + name = Products; + sourceTree = ""; + }; + C14F83101681326600AAB80A /* windows */ = { + isa = PBXGroup; + children = ( + C14F83111681326600AAB80A /* vcpp2008 */, + C14F831C1681326600AAB80A /* vcpp2010 */, + ); + path = windows; + sourceTree = ""; + }; + C14F83111681326600AAB80A /* vcpp2008 */ = { + isa = PBXGroup; + children = ( + C14F83121681326600AAB80A /* .gitignore */, + C14F83131681326600AAB80A /* common.vsprops */, + C14F83141681326600AAB80A /* examples */, + C14F83191681326600AAB80A /* stdint.h */, + C14F831A1681326600AAB80A /* websocketpp.sln */, + C14F831B1681326600AAB80A /* websocketpp.vcproj */, + ); + path = vcpp2008; + sourceTree = ""; + }; + C14F83141681326600AAB80A /* examples */ = { + isa = PBXGroup; + children = ( + C14F83151681326600AAB80A /* chatclient.vcproj */, + C14F83161681326600AAB80A /* chatserver.vcproj */, + C14F83171681326600AAB80A /* concurrent_server.vcproj */, + C14F83181681326600AAB80A /* echoserver.vcproj */, + ); + path = examples; + sourceTree = ""; + }; + C14F831C1681326600AAB80A /* vcpp2010 */ = { + isa = PBXGroup; + children = ( + C14F831D1681326600AAB80A /* .gitignore */, + C14F831E1681326600AAB80A /* examples */, + C14F832A1681326600AAB80A /* readme.txt */, + C14F832B1681326600AAB80A /* websocketpp.sln */, + C14F832C1681326600AAB80A /* websocketpp.vcxproj */, + C14F832D1681326600AAB80A /* websocketpp.vcxproj.filters */, + ); + path = vcpp2010; + sourceTree = ""; + }; + C14F831E1681326600AAB80A /* examples */ = { + isa = PBXGroup; + children = ( + C14F831F1681326600AAB80A /* chatclient.vcxproj */, + C14F83201681326600AAB80A /* chatclient.vcxproj.filters */, + C14F83211681326600AAB80A /* chatserver.vcxproj */, + C14F83221681326600AAB80A /* chatserver.vcxproj.filters */, + C14F83231681326600AAB80A /* echoclient.vcxproj */, + C14F83241681326600AAB80A /* echoclient.vcxproj.filters */, + C14F83251681326600AAB80A /* echoserver.vcxproj */, + C14F83261681326600AAB80A /* echoserver.vcxproj.filters */, + C14F83271681326600AAB80A /* wsperf */, + ); + path = examples; + sourceTree = ""; + }; + C14F83271681326600AAB80A /* wsperf */ = { + isa = PBXGroup; + children = ( + C14F83281681326600AAB80A /* wsperf.vcxproj */, + C14F83291681326600AAB80A /* wsperf.vcxproj.filters */, + ); + path = wsperf; + sourceTree = ""; + }; + C14F832E1681326600AAB80A /* js */ = { + isa = PBXGroup; + children = ( + C14F832F1681326600AAB80A /* account.js */, + C14F83301681326600AAB80A /* amount.js */, + C14F83311681326600AAB80A /* cryptojs */, + C14F83461681326600AAB80A /* index.js */, + C14F83471681326600AAB80A /* jsbn.js */, + C14F83481681326600AAB80A /* network.js */, + C14F83491681326600AAB80A /* nodeutils.js */, + C14F834A1681326600AAB80A /* remote.js */, + C14F834B1681326600AAB80A /* serializer.js */, + C14F834C1681326600AAB80A /* sjcl */, + C14F841F1681326600AAB80A /* utils.js */, + C14F84201681326600AAB80A /* utils.web.js */, + ); + path = js; + sourceTree = ""; + }; + C14F83311681326600AAB80A /* cryptojs */ = { + isa = PBXGroup; + children = ( + C14F83321681326600AAB80A /* cryptojs.js */, + C14F83331681326600AAB80A /* lib */, + C14F83411681326600AAB80A /* package.json */, + C14F83421681326600AAB80A /* README.md */, + C14F83431681326600AAB80A /* test */, + ); + path = cryptojs; + sourceTree = ""; + }; + C14F83331681326600AAB80A /* lib */ = { + isa = PBXGroup; + children = ( + C14F83341681326600AAB80A /* AES.js */, + C14F83351681326600AAB80A /* BlockModes.js */, + C14F83361681326600AAB80A /* Crypto.js */, + C14F83371681326600AAB80A /* CryptoMath.js */, + C14F83381681326600AAB80A /* DES.js */, + C14F83391681326600AAB80A /* HMAC.js */, + C14F833A1681326600AAB80A /* MARC4.js */, + C14F833B1681326600AAB80A /* MD5.js */, + C14F833C1681326600AAB80A /* PBKDF2.js */, + C14F833D1681326600AAB80A /* PBKDF2Async.js */, + C14F833E1681326600AAB80A /* Rabbit.js */, + C14F833F1681326600AAB80A /* SHA1.js */, + C14F83401681326600AAB80A /* SHA256.js */, + ); + path = lib; + sourceTree = ""; + }; + C14F83431681326600AAB80A /* test */ = { + isa = PBXGroup; + children = ( + C14F83441681326600AAB80A /* PBKDF2-test.js */, + C14F83451681326600AAB80A /* test.coffee */, + ); + path = test; + sourceTree = ""; + }; + C14F834C1681326600AAB80A /* sjcl */ = { + isa = PBXGroup; + children = ( + C14F834D1681326600AAB80A /* browserTest */, + C14F83521681326600AAB80A /* compress */, + C14F835B1681326600AAB80A /* config.mk */, + C14F835C1681326600AAB80A /* configure */, + C14F835D1681326600AAB80A /* core */, + C14F83711681326600AAB80A /* core.js */, + C14F83721681326600AAB80A /* core_closure.js */, + C14F83731681326600AAB80A /* demo */, + C14F83791681326600AAB80A /* jsdoc_toolkit-2.3.3-beta */, + C14F83FA1681326600AAB80A /* lint */, + C14F83FD1681326600AAB80A /* Makefile */, + C14F83FE1681326600AAB80A /* README */, + C14F84041681326600AAB80A /* sjcl.js */, + C14F84051681326600AAB80A /* test */, + ); + path = sjcl; + sourceTree = ""; + }; + C14F834D1681326600AAB80A /* browserTest */ = { + isa = PBXGroup; + children = ( + C14F834E1681326600AAB80A /* browserTest.html */, + C14F834F1681326600AAB80A /* browserUtil.js */, + C14F83501681326600AAB80A /* rhinoUtil.js */, + C14F83511681326600AAB80A /* test.css */, + ); + path = browserTest; + sourceTree = ""; + }; + C14F83521681326600AAB80A /* compress */ = { + isa = PBXGroup; + children = ( + C14F83531681326600AAB80A /* compiler.jar */, + C14F83541681326600AAB80A /* compress_with_closure.sh */, + C14F83551681326600AAB80A /* compress_with_yui.sh */, + C14F83561681326600AAB80A /* dewindowize.pl */, + C14F83571681326600AAB80A /* digitize.pl */, + C14F83581681326600AAB80A /* opacify.pl */, + C14F83591681326600AAB80A /* remove_constants.pl */, + C14F835A1681326600AAB80A /* yuicompressor-2.4.2.jar */, + ); + path = compress; + sourceTree = ""; + }; + C14F835D1681326600AAB80A /* core */ = { + isa = PBXGroup; + children = ( + C14F835E1681326600AAB80A /* aes.js */, + C14F835F1681326600AAB80A /* bitArray.js */, + C14F83601681326600AAB80A /* bn.js */, + C14F83611681326600AAB80A /* cbc.js */, + C14F83621681326600AAB80A /* ccm.js */, + C14F83631681326600AAB80A /* codecBase64.js */, + C14F83641681326600AAB80A /* codecBytes.js */, + C14F83651681326600AAB80A /* codecHex.js */, + C14F83661681326600AAB80A /* codecString.js */, + C14F83671681326600AAB80A /* convenience.js */, + C14F83681681326600AAB80A /* ecc.js */, + C14F83691681326600AAB80A /* hmac.js */, + C14F836A1681326600AAB80A /* ocb2.js */, + C14F836B1681326600AAB80A /* pbkdf2.js */, + C14F836C1681326600AAB80A /* random.js */, + C14F836D1681326600AAB80A /* sha1.js */, + C14F836E1681326600AAB80A /* sha256.js */, + C14F836F1681326600AAB80A /* sjcl.js */, + C14F83701681326600AAB80A /* srp.js */, + ); + path = core; + sourceTree = ""; + }; + C14F83731681326600AAB80A /* demo */ = { + isa = PBXGroup; + children = ( + C14F83741681326600AAB80A /* alpha-arrow.png */, + C14F83751681326600AAB80A /* example.css */, + C14F83761681326600AAB80A /* example.js */, + C14F83771681326600AAB80A /* form.js */, + C14F83781681326600AAB80A /* index.html */, + ); + path = demo; + sourceTree = ""; + }; + C14F83791681326600AAB80A /* jsdoc_toolkit-2.3.3-beta */ = { + isa = PBXGroup; + children = ( + C14F837A1681326600AAB80A /* app */, + C14F83DE1681326600AAB80A /* changes.txt */, + C14F83DF1681326600AAB80A /* conf */, + C14F83E11681326600AAB80A /* java */, + C14F83E91681326600AAB80A /* jsdebug.jar */, + C14F83EA1681326600AAB80A /* jsrun.jar */, + C14F83EB1681326600AAB80A /* jsrun.sh */, + C14F83EC1681326600AAB80A /* README.txt */, + C14F83ED1681326600AAB80A /* templates */, + ); + path = "jsdoc_toolkit-2.3.3-beta"; + sourceTree = ""; + }; + C14F837A1681326600AAB80A /* app */ = { + isa = PBXGroup; + children = ( + C14F837B1681326600AAB80A /* frame */, + C14F83851681326600AAB80A /* frame.js */, + C14F83861681326600AAB80A /* handlers */, + C14F838D1681326600AAB80A /* lib */, + C14F839F1681326600AAB80A /* main.js */, + C14F83A01681326600AAB80A /* plugins */, + C14F83A81681326600AAB80A /* run.js */, + C14F83A91681326600AAB80A /* t */, + C14F83AC1681326600AAB80A /* test */, + C14F83DD1681326600AAB80A /* test.js */, + ); + path = app; + sourceTree = ""; + }; + C14F837B1681326600AAB80A /* frame */ = { + isa = PBXGroup; + children = ( + C14F837C1681326600AAB80A /* Chain.js */, + C14F837D1681326600AAB80A /* Dumper.js */, + C14F837E1681326600AAB80A /* Hash.js */, + C14F837F1681326600AAB80A /* Link.js */, + C14F83801681326600AAB80A /* Namespace.js */, + C14F83811681326600AAB80A /* Opt.js */, + C14F83821681326600AAB80A /* Reflection.js */, + C14F83831681326600AAB80A /* String.js */, + C14F83841681326600AAB80A /* Testrun.js */, + ); + path = frame; + sourceTree = ""; + }; + C14F83861681326600AAB80A /* handlers */ = { + isa = PBXGroup; + children = ( + C14F83871681326600AAB80A /* FOODOC.js */, + C14F83881681326600AAB80A /* XMLDOC */, + C14F838C1681326600AAB80A /* XMLDOC.js */, + ); + path = handlers; + sourceTree = ""; + }; + C14F83881681326600AAB80A /* XMLDOC */ = { + isa = PBXGroup; + children = ( + C14F83891681326600AAB80A /* DomReader.js */, + C14F838A1681326600AAB80A /* XMLDoc.js */, + C14F838B1681326600AAB80A /* XMLParse.js */, + ); + path = XMLDOC; + sourceTree = ""; + }; + C14F838D1681326600AAB80A /* lib */ = { + isa = PBXGroup; + children = ( + C14F838E1681326600AAB80A /* JSDOC */, + C14F839E1681326600AAB80A /* JSDOC.js */, + ); + path = lib; + sourceTree = ""; + }; + C14F838E1681326600AAB80A /* JSDOC */ = { + isa = PBXGroup; + children = ( + C14F838F1681326600AAB80A /* DocComment.js */, + C14F83901681326600AAB80A /* DocTag.js */, + C14F83911681326600AAB80A /* JsDoc.js */, + C14F83921681326600AAB80A /* JsPlate.js */, + C14F83931681326600AAB80A /* Lang.js */, + C14F83941681326600AAB80A /* Parser.js */, + C14F83951681326600AAB80A /* PluginManager.js */, + C14F83961681326600AAB80A /* Symbol.js */, + C14F83971681326600AAB80A /* SymbolSet.js */, + C14F83981681326600AAB80A /* TextStream.js */, + C14F83991681326600AAB80A /* Token.js */, + C14F839A1681326600AAB80A /* TokenReader.js */, + C14F839B1681326600AAB80A /* TokenStream.js */, + C14F839C1681326600AAB80A /* Util.js */, + C14F839D1681326600AAB80A /* Walker.js */, + ); + path = JSDOC; + sourceTree = ""; + }; + C14F83A01681326600AAB80A /* plugins */ = { + isa = PBXGroup; + children = ( + C14F83A11681326600AAB80A /* commentSrcJson.js */, + C14F83A21681326600AAB80A /* frameworkPrototype.js */, + C14F83A31681326600AAB80A /* functionCall.js */, + C14F83A41681326600AAB80A /* publishSrcHilite.js */, + C14F83A51681326600AAB80A /* symbolLink.js */, + C14F83A61681326600AAB80A /* tagParamConfig.js */, + C14F83A71681326600AAB80A /* tagSynonyms.js */, + ); + path = plugins; + sourceTree = ""; + }; + C14F83A91681326600AAB80A /* t */ = { + isa = PBXGroup; + children = ( + C14F83AA1681326600AAB80A /* runner.js */, + C14F83AB1681326600AAB80A /* TestDoc.js */, + ); + path = t; + sourceTree = ""; + }; + C14F83AC1681326600AAB80A /* test */ = { + isa = PBXGroup; + children = ( + C14F83AD1681326600AAB80A /* addon.js */, + C14F83AE1681326600AAB80A /* anon_inner.js */, + C14F83AF1681326600AAB80A /* augments.js */, + C14F83B01681326600AAB80A /* augments2.js */, + C14F83B11681326600AAB80A /* borrows.js */, + C14F83B21681326600AAB80A /* borrows2.js */, + C14F83B31681326600AAB80A /* config.js */, + C14F83B41681326600AAB80A /* constructs.js */, + C14F83B51681326600AAB80A /* encoding.js */, + C14F83B61681326600AAB80A /* encoding_other.js */, + C14F83B71681326600AAB80A /* event.js */, + C14F83B81681326600AAB80A /* exports.js */, + C14F83B91681326600AAB80A /* functions_anon.js */, + C14F83BA1681326600AAB80A /* functions_nested.js */, + C14F83BB1681326600AAB80A /* global.js */, + C14F83BC1681326600AAB80A /* globals.js */, + C14F83BD1681326600AAB80A /* ignore.js */, + C14F83BE1681326600AAB80A /* inner.js */, + C14F83BF1681326600AAB80A /* jsdoc_test.js */, + C14F83C01681326600AAB80A /* lend.js */, + C14F83C11681326600AAB80A /* memberof.js */, + C14F83C21681326600AAB80A /* memberof2.js */, + C14F83C31681326600AAB80A /* memberof3.js */, + C14F83C41681326600AAB80A /* memberof_constructor.js */, + C14F83C51681326600AAB80A /* module.js */, + C14F83C61681326600AAB80A /* multi_methods.js */, + C14F83C71681326600AAB80A /* name.js */, + C14F83C81681326600AAB80A /* namespace_nested.js */, + C14F83C91681326600AAB80A /* nocode.js */, + C14F83CA1681326600AAB80A /* oblit_anon.js */, + C14F83CB1681326600AAB80A /* overview.js */, + C14F83CC1681326600AAB80A /* param_inline.js */, + C14F83CD1681326600AAB80A /* params_optional.js */, + C14F83CE1681326600AAB80A /* prototype.js */, + C14F83CF1681326600AAB80A /* prototype_nested.js */, + C14F83D01681326600AAB80A /* prototype_oblit.js */, + C14F83D11681326600AAB80A /* prototype_oblit_constructor.js */, + C14F83D21681326600AAB80A /* public.js */, + C14F83D31681326600AAB80A /* scripts */, + C14F83D61681326600AAB80A /* shared.js */, + C14F83D71681326600AAB80A /* shared2.js */, + C14F83D81681326600AAB80A /* shortcuts.js */, + C14F83D91681326600AAB80A /* static_this.js */, + C14F83DA1681326600AAB80A /* synonyms.js */, + C14F83DB1681326600AAB80A /* tosource.js */, + C14F83DC1681326600AAB80A /* variable_redefine.js */, + ); + path = test; + sourceTree = ""; + }; + C14F83D31681326600AAB80A /* scripts */ = { + isa = PBXGroup; + children = ( + C14F83D41681326600AAB80A /* code.js */, + C14F83D51681326600AAB80A /* notcode.txt */, + ); + path = scripts; + sourceTree = ""; + }; + C14F83DF1681326600AAB80A /* conf */ = { + isa = PBXGroup; + children = ( + C14F83E01681326600AAB80A /* sample.conf */, + ); + path = conf; + sourceTree = ""; + }; + C14F83E11681326600AAB80A /* java */ = { + isa = PBXGroup; + children = ( + C14F83E21681326600AAB80A /* build.xml */, + C14F83E31681326600AAB80A /* build_1.4.xml */, + C14F83E41681326600AAB80A /* classes */, + C14F83E61681326600AAB80A /* src */, + ); + path = java; + sourceTree = ""; + }; + C14F83E41681326600AAB80A /* classes */ = { + isa = PBXGroup; + children = ( + C14F83E51681326600AAB80A /* js.jar */, + ); + path = classes; + sourceTree = ""; + }; + C14F83E61681326600AAB80A /* src */ = { + isa = PBXGroup; + children = ( + C14F83E71681326600AAB80A /* JsDebugRun.java */, + C14F83E81681326600AAB80A /* JsRun.java */, + ); + path = src; + sourceTree = ""; + }; + C14F83ED1681326600AAB80A /* templates */ = { + isa = PBXGroup; + children = ( + C14F83EE1681326600AAB80A /* codeview */, + ); + path = templates; + sourceTree = ""; + }; + C14F83EE1681326600AAB80A /* codeview */ = { + isa = PBXGroup; + children = ( + C14F83EF1681326600AAB80A /* allclasses.tmpl */, + C14F83F01681326600AAB80A /* allfiles.tmpl */, + C14F83F11681326600AAB80A /* class.tmpl */, + C14F83F21681326600AAB80A /* css */, + C14F83F41681326600AAB80A /* index.tmpl */, + C14F83F51681326600AAB80A /* publish.js */, + C14F83F61681326600AAB80A /* static */, + C14F83F91681326600AAB80A /* symbol.tmpl */, + ); + path = codeview; + sourceTree = ""; + }; + C14F83F21681326600AAB80A /* css */ = { + isa = PBXGroup; + children = ( + C14F83F31681326600AAB80A /* default.css */, + ); + path = css; + sourceTree = ""; + }; + C14F83F61681326600AAB80A /* static */ = { + isa = PBXGroup; + children = ( + C14F83F71681326600AAB80A /* header.html */, + C14F83F81681326600AAB80A /* index.html */, + ); + path = static; + sourceTree = ""; + }; + C14F83FA1681326600AAB80A /* lint */ = { + isa = PBXGroup; + children = ( + C14F83FB1681326600AAB80A /* coding_guidelines.pl */, + C14F83FC1681326600AAB80A /* jslint_rhino.js */, + ); + path = lint; + sourceTree = ""; + }; + C14F83FE1681326600AAB80A /* README */ = { + isa = PBXGroup; + children = ( + C14F83FF1681326600AAB80A /* bsd.txt */, + C14F84001681326600AAB80A /* COPYRIGHT */, + C14F84011681326600AAB80A /* gpl-2.0.txt */, + C14F84021681326600AAB80A /* gpl-3.0.txt */, + C14F84031681326600AAB80A /* INSTALL */, + ); + path = README; + sourceTree = ""; + }; + C14F84051681326600AAB80A /* test */ = { + isa = PBXGroup; + children = ( + C14F84061681326600AAB80A /* aes_test.js */, + C14F84071681326600AAB80A /* aes_vectors.js */, + C14F84081681326600AAB80A /* bn_test.js */, + C14F84091681326600AAB80A /* bn_vectors.js */, + C14F840A1681326600AAB80A /* cbc_test.js */, + C14F840B1681326600AAB80A /* cbc_vectors.js */, + C14F840C1681326600AAB80A /* ccm_test.js */, + C14F840D1681326600AAB80A /* ccm_vectors.js */, + C14F840E1681326600AAB80A /* ecdh_test.js */, + C14F840F1681326600AAB80A /* ecdsa_test.js */, + C14F84101681326600AAB80A /* hmac_test.js */, + C14F84111681326600AAB80A /* hmac_vectors.js */, + C14F84121681326600AAB80A /* ocb2_test.js */, + C14F84131681326600AAB80A /* ocb2_vectors.js */, + C14F84141681326600AAB80A /* pbkdf2_test.js */, + C14F84151681326600AAB80A /* run_tests_browser.js */, + C14F84161681326600AAB80A /* run_tests_rhino.js */, + C14F84171681326600AAB80A /* sha1_test.js */, + C14F84181681326600AAB80A /* sha1_vectors.js */, + C14F84191681326600AAB80A /* sha256_test.js */, + C14F841A1681326600AAB80A /* sha256_test_brute_force.js */, + C14F841B1681326600AAB80A /* sha256_vectors.js */, + C14F841C1681326600AAB80A /* srp_test.js */, + C14F841D1681326600AAB80A /* srp_vectors.js */, + C14F841E1681326600AAB80A /* test.js */, + ); + path = test; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + C14F81261681323400AAB80A /* rippled */ = { + isa = PBXNativeTarget; + buildConfigurationList = C14F81311681323400AAB80A /* Build configuration list for PBXNativeTarget "rippled" */; + buildPhases = ( + C14F81231681323400AAB80A /* Sources */, + C14F81241681323400AAB80A /* Frameworks */, + C14F81251681323400AAB80A /* CopyFiles */, + ); + buildRules = ( + C14F85C11681357800AAB80A /* PBXBuildRule */, + ); + dependencies = ( + ); + name = rippled; + productName = rippled; + productReference = C14F81271681323400AAB80A /* rippled */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + C14F811E1681323300AAB80A /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0450; + ORGANIZATIONNAME = Jcar; + }; + buildConfigurationList = C14F81211681323300AAB80A /* Build configuration list for PBXProject "rippled" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = C14F811C1681323300AAB80A; + productRefGroup = C14F81281681323400AAB80A /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = C14F830E1681326600AAB80A /* Products */; + ProjectRef = C14F830D1681326600AAB80A /* websocketpp.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + C14F81261681323400AAB80A /* rippled */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + C14F85A81681326700AAB80A /* libwebsocketpp.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libwebsocketpp.a; + remoteRef = C14F85A71681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85AA1681326700AAB80A /* libwebsocketpp.dylib */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.dylib"; + path = libwebsocketpp.dylib; + remoteRef = C14F85A91681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85AC1681326700AAB80A /* echo_server */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = echo_server; + remoteRef = C14F85AB1681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85AE1681326700AAB80A /* chat_client */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = chat_client; + remoteRef = C14F85AD1681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85B01681326700AAB80A /* echo_client */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = echo_client; + remoteRef = C14F85AF1681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85B21681326700AAB80A /* Policy Test */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + name = "Policy Test"; + path = policy_test; + remoteRef = C14F85B11681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85B41681326700AAB80A /* echo_server_tls */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = echo_server_tls; + remoteRef = C14F85B31681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85B61681326700AAB80A /* fuzzing_server */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = fuzzing_server; + remoteRef = C14F85B51681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85B81681326700AAB80A /* fuzzing_client */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = fuzzing_client; + remoteRef = C14F85B71681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85BA1681326700AAB80A /* broadcast_server */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = broadcast_server; + remoteRef = C14F85B91681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85BC1681326700AAB80A /* stress_client */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = stress_client; + remoteRef = C14F85BB1681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85BE1681326700AAB80A /* concurrent_server */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = concurrent_server; + remoteRef = C14F85BD1681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + C14F85C01681326700AAB80A /* wsperf */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = wsperf; + remoteRef = C14F85BF1681326700AAB80A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXSourcesBuildPhase section */ + C14F81231681323400AAB80A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C14F842F1681326700AAB80A /* database.cpp in Sources */, + C14F84311681326700AAB80A /* sqlite3.c in Sources */, + C14F84321681326700AAB80A /* SqliteDatabase.cpp in Sources */, + C14F84341681326700AAB80A /* json_reader.cpp in Sources */, + C14F84351681326700AAB80A /* json_value.cpp in Sources */, + C14F84361681326700AAB80A /* json_writer.cpp in Sources */, + C14F84371681326700AAB80A /* AccountItems.cpp in Sources */, + C14F84381681326700AAB80A /* AccountSetTransactor.cpp in Sources */, + C14F84391681326700AAB80A /* AccountState.cpp in Sources */, + C14F843A1681326700AAB80A /* Amount.cpp in Sources */, + C14F843B1681326700AAB80A /* Application.cpp in Sources */, + C14F843C1681326700AAB80A /* BitcoinUtil.cpp in Sources */, + C14F843D1681326700AAB80A /* CallRPC.cpp in Sources */, + C14F843E1681326700AAB80A /* CanonicalTXSet.cpp in Sources */, + C14F843F1681326700AAB80A /* Config.cpp in Sources */, + C14F84401681326700AAB80A /* ConnectionPool.cpp in Sources */, + C14F84411681326700AAB80A /* Contract.cpp in Sources */, + C14F84421681326700AAB80A /* DBInit.cpp in Sources */, + C14F84431681326700AAB80A /* DeterministicKeys.cpp in Sources */, + C14F84441681326700AAB80A /* ECIES.cpp in Sources */, + C14F84451681326700AAB80A /* FeatureTable.cpp in Sources */, + C14F84461681326700AAB80A /* FieldNames.cpp in Sources */, + C14F84471681326700AAB80A /* HashedObject.cpp in Sources */, + C14F84481681326700AAB80A /* HTTPRequest.cpp in Sources */, + C14F84491681326700AAB80A /* HttpsClient.cpp in Sources */, + C14F844A1681326700AAB80A /* InstanceCounter.cpp in Sources */, + C14F844B1681326700AAB80A /* Interpreter.cpp in Sources */, + C14F844C1681326700AAB80A /* JobQueue.cpp in Sources */, + C14F844D1681326700AAB80A /* Ledger.cpp in Sources */, + C14F844E1681326700AAB80A /* LedgerAcquire.cpp in Sources */, + C14F844F1681326700AAB80A /* LedgerConsensus.cpp in Sources */, + C14F84501681326700AAB80A /* LedgerEntrySet.cpp in Sources */, + C14F84511681326700AAB80A /* LedgerFormats.cpp in Sources */, + C14F84521681326700AAB80A /* LedgerHistory.cpp in Sources */, + C14F84531681326700AAB80A /* LedgerMaster.cpp in Sources */, + C14F84541681326700AAB80A /* LedgerProposal.cpp in Sources */, + C14F84551681326700AAB80A /* LedgerTiming.cpp in Sources */, + C14F84561681326700AAB80A /* LoadManager.cpp in Sources */, + C14F84571681326700AAB80A /* LoadMonitor.cpp in Sources */, + C14F84581681326700AAB80A /* Log.cpp in Sources */, + C14F84591681326700AAB80A /* main.cpp in Sources */, + C14F845A1681326700AAB80A /* NetworkOPs.cpp in Sources */, + C14F845B1681326700AAB80A /* NicknameState.cpp in Sources */, + C14F845C1681326700AAB80A /* Offer.cpp in Sources */, + C14F845D1681326700AAB80A /* OfferCancelTransactor.cpp in Sources */, + C14F845E1681326700AAB80A /* OfferCreateTransactor.cpp in Sources */, + C14F845F1681326700AAB80A /* Operation.cpp in Sources */, + C14F84601681326700AAB80A /* OrderBook.cpp in Sources */, + C14F84611681326700AAB80A /* OrderBookDB.cpp in Sources */, + C14F84621681326700AAB80A /* PackedMessage.cpp in Sources */, + C14F84631681326700AAB80A /* ParameterTable.cpp in Sources */, + C14F84641681326700AAB80A /* ParseSection.cpp in Sources */, + C14F84651681326700AAB80A /* Pathfinder.cpp in Sources */, + C14F84661681326700AAB80A /* PaymentTransactor.cpp in Sources */, + C14F84671681326700AAB80A /* Peer.cpp in Sources */, + C14F84681681326700AAB80A /* PeerDoor.cpp in Sources */, + C14F84691681326700AAB80A /* PlatRand.cpp in Sources */, + C14F846A1681326700AAB80A /* ProofOfWork.cpp in Sources */, + C14F846B1681326700AAB80A /* PubKeyCache.cpp in Sources */, + C14F846C1681326700AAB80A /* RangeSet.cpp in Sources */, + C14F846D1681326700AAB80A /* RegularKeySetTransactor.cpp in Sources */, + C14F846E1681326700AAB80A /* rfc1751.cpp in Sources */, + C14F846F1681326700AAB80A /* RippleAddress.cpp in Sources */, + C14F84701681326700AAB80A /* RippleCalc.cpp in Sources */, + C14F84711681326700AAB80A /* RippleState.cpp in Sources */, + C14F84721681326700AAB80A /* rpc.cpp in Sources */, + C14F84731681326700AAB80A /* RPCDoor.cpp in Sources */, + C14F84741681326700AAB80A /* RPCErr.cpp in Sources */, + C14F84751681326700AAB80A /* RPCHandler.cpp in Sources */, + C14F84761681326700AAB80A /* RPCServer.cpp in Sources */, + C14F84771681326700AAB80A /* ScriptData.cpp in Sources */, + C14F84781681326700AAB80A /* SerializedLedger.cpp in Sources */, + C14F84791681326700AAB80A /* SerializedObject.cpp in Sources */, + C14F847A1681326700AAB80A /* SerializedTransaction.cpp in Sources */, + C14F847B1681326700AAB80A /* SerializedTypes.cpp in Sources */, + C14F847C1681326700AAB80A /* SerializedValidation.cpp in Sources */, + C14F847D1681326700AAB80A /* Serializer.cpp in Sources */, + C14F847E1681326700AAB80A /* SHAMap.cpp in Sources */, + C14F847F1681326700AAB80A /* SHAMapDiff.cpp in Sources */, + C14F84801681326700AAB80A /* SHAMapNodes.cpp in Sources */, + C14F84811681326700AAB80A /* SHAMapSync.cpp in Sources */, + C14F84821681326700AAB80A /* SNTPClient.cpp in Sources */, + C14F84831681326700AAB80A /* Suppression.cpp in Sources */, + C14F84841681326700AAB80A /* Transaction.cpp in Sources */, + C14F84851681326700AAB80A /* TransactionEngine.cpp in Sources */, + C14F84861681326700AAB80A /* TransactionErr.cpp in Sources */, + C14F84871681326700AAB80A /* TransactionFormats.cpp in Sources */, + C14F84881681326700AAB80A /* TransactionMaster.cpp in Sources */, + C14F84891681326700AAB80A /* TransactionMeta.cpp in Sources */, + C14F848A1681326700AAB80A /* Transactor.cpp in Sources */, + C14F848B1681326700AAB80A /* TrustSetTransactor.cpp in Sources */, + C14F848C1681326700AAB80A /* UniqueNodeList.cpp in Sources */, + C14F848D1681326700AAB80A /* utils.cpp in Sources */, + C14F848E1681326700AAB80A /* ValidationCollection.cpp in Sources */, + C14F848F1681326700AAB80A /* Wallet.cpp in Sources */, + C14F84901681326700AAB80A /* WalletAddTransactor.cpp in Sources */, + C14F84911681326700AAB80A /* WSDoor.cpp in Sources */, + C14F84D81681326700AAB80A /* base64.cpp in Sources */, + C14F84D91681326700AAB80A /* md5.c in Sources */, + C14F84DA1681326700AAB80A /* data.cpp in Sources */, + C14F84DB1681326700AAB80A /* network_utilities.cpp in Sources */, + C14F84DC1681326700AAB80A /* hybi_header.cpp in Sources */, + C14F84DD1681326700AAB80A /* hybi_util.cpp in Sources */, + C14F84DE1681326700AAB80A /* blank_rng.cpp in Sources */, + C14F84DF1681326700AAB80A /* boost_rng.cpp in Sources */, + C14F84E21681326700AAB80A /* sha1.cpp in Sources */, + C14F84E51681326700AAB80A /* uri.cpp in Sources */, + C10365C9168147D200D9D15C /* ripple.pb.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + C14F812F1681323400AAB80A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + "BOOST_TEST_DYN_LINK=1", + "BOOST_FILESYSTEM_NO_DEPRECATED=1", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + ../build/proto/, + /usr/local/include/, + /opt/local/include/, + ); + LIBRARY_SEARCH_PATHS = ( + /usr/local/lib/, + /opt/local/lib/, + ); + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "-lssl", + "-lcrypto", + "-lboost_date_time-mt", + "-lboost_filesystem-mt", + "-lboost_program_options-mt", + "-lboost_regex-mt", + "-lboost_system-mt", + "-lboost_thread-mt", + "-lprotobuf", + "-ldl", + "-lz", + ); + SDKROOT = macosx; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Debug; + }; + C14F81301681323400AAB80A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + ../build/proto/, + /usr/local/include/, + /opt/local/include/, + ); + LIBRARY_SEARCH_PATHS = ( + /usr/local/lib/, + /opt/local/lib/, + ); + MACOSX_DEPLOYMENT_TARGET = 10.8; + OTHER_LDFLAGS = ( + "-lssl", + "-lcrypto", + "-lboost_date_time-mt", + "-lboost_filesystem-mt", + "-lboost_program_options-mt", + "-lboost_regex-mt", + "-lboost_system-mt", + "-lboost_thread-mt", + "-lprotobuf", + "-ldl", + "-lz", + ); + SDKROOT = macosx; + USER_HEADER_SEARCH_PATHS = ""; + }; + name = Release; + }; + C14F81321681323400AAB80A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; + CLANG_CXX_LIBRARY = "libstdc++"; + GCC_C_LANGUAGE_STANDARD = "compiler-default"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + /opt/local/lib, + /usr/local/Cellar/boost/1.50.0/lib, + /usr/local/Cellar/protobuf/2.4.1/lib, + ); + OTHER_LDFLAGS = ( + "-lssl", + "-lcrypto", + "-lboost_date_time-mt", + "-lboost_filesystem-mt", + "-lboost_program_options-mt", + "-lboost_regex-mt", + "-lboost_system-mt", + "-lboost_thread-mt", + "-lprotobuf", + "-ldl", + "-lz", + "-lboost_random-mt", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + C14F81331681323400AAB80A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; + CLANG_CXX_LIBRARY = "libstdc++"; + GCC_C_LANGUAGE_STANDARD = "compiler-default"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + /opt/local/lib, + /usr/local/Cellar/boost/1.50.0/lib, + /usr/local/Cellar/protobuf/2.4.1/lib, + ); + OTHER_LDFLAGS = ( + "-lssl", + "-lcrypto", + "-lboost_date_time-mt", + "-lboost_filesystem-mt", + "-lboost_program_options-mt", + "-lboost_regex-mt", + "-lboost_system-mt", + "-lboost_thread-mt", + "-lprotobuf", + "-ldl", + "-lz", + "-lboost_random-mt", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + C14F81211681323300AAB80A /* Build configuration list for PBXProject "rippled" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C14F812F1681323400AAB80A /* Debug */, + C14F81301681323400AAB80A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C14F81311681323400AAB80A /* Build configuration list for PBXNativeTarget "rippled" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C14F81321681323400AAB80A /* Debug */, + C14F81331681323400AAB80A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = C14F811E1681323300AAB80A /* Project object */; +} diff --git a/rippled/rippled.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/rippled/rippled.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..94793d09d --- /dev/null +++ b/rippled/rippled.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/rippled/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate b/rippled/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..446f385db9b2f20af2dccf662f979c35405088f2 GIT binary patch literal 31625 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 N5SsfVgocsH?EnPcTaW+% literal 0 HcmV?d00001 diff --git a/rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/rippled.xcscheme b/rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/rippled.xcscheme new file mode 100644 index 000000000..e9fee66a9 --- /dev/null +++ b/rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/rippled.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist b/rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..03ec442e0 --- /dev/null +++ b/rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + rippled.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + C14F81261681323400AAB80A + + primary + + + + + diff --git a/rippled/rippled/rippled.1 b/rippled/rippled/rippled.1 new file mode 100644 index 0000000000000000000000000000000000000000..c94248ae6baa9f963da886168721cd17b2df630f GIT binary patch literal 3121 zcmbVO%Wm5^6x|!hKU`!pDG=LZcT>#Hsh!q9VjHnjOfV@7N}?rBBvK`*xc>V&my-NQ z+M*dR5{f+cb$EEm-sAbLNz_Kkgf`X`R0w@Bct>VK*H+4_<@l0(CTS);##AIG?s-|1 zx$yFmgih)yCom;l@2t~%JYPylquiOl!WSH#U}$4335pF{cuBc(Ug?x0n$jzy-HBO% za|SLm)(130Wuj`UBa?pRY~N+V%6_3-+&@VcPR9uihW){Z{$NO_zsGYLk5&_6kSD83 zqy}&e!s5c3)QW<%C}dr<(3Qx^$(S=HT@{hEY(9517Iv#N#>{a#y?F8k;!EB)kb1HoirZauii6_r$gd z?85S~0mOjl9I`hXhrD`C{&P&)HM6(I?ysR1xkgsZ>BT#)3N=1R4{8k~Yo1vr?2OUW zplgAJ#M!10u{GokCDN%>Lz8rH;P%piXsbeMkF<~c%n~q(s+d43h2^R^<~9R&?m!dL z!%i+AX7j~zx;)v!eH+qD7MG! zo{EIL{O*aRyC@I!9gk4!R6A)s!jLOPEYCV4WaK>eI)#So>X6WRjP?}TB*(eRsp~~b z-K|QHQCA^n?L&*XlBv?{59=vX4&Gog^}!()PJhT@BI2xGEUk=X0;_08Y!OO4>x>WK z+r&s5`HX%H!E|qupN4C{IIKp`VKO;IKo{k4^_yIzCTA-Vm>GG<@Oc4Tp-Q!L4>W`ZSv_SJRIzjac}VloBOU zq|D~1bBr%-@L-E+)y^NyDUA!X2u~uu5t`fj{~JznghtlO$%IBX%Q>G{WOBoe5%f`9Y#c0iY$EXEO!>tTEt3L3Vv(P1d){bBZf zQ!Nv4b^oc|uckqPhH>+(p(ky&`Vuz|+8Q3lEd2^SvnGqpKTnsd`Q5|5w}msaH^-gj ejop#j@T(jr1oko$&!|0+RcZCD3P%U;%Krej&!mL_ literal 0 HcmV?d00001 diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d6cb697d5037a54ed4edda44f75394b442b695e8 GIT binary patch literal 6148 zcmeHK%}N6?5Kh{vyQt8M;BoQfL8L{c9y~0iir$0@9#nMK6GgL=~MMCnPhl?{E_DZbw<` zyu3UdZdKO2YPD7yt$D**4V}%6?a|0}9Jl=BEUm2X>>mYpqx*;4{7j|sS2VK7_zsUS zIEmY4uM;PoYj`NSpl($9Dg77tSI0(Ri3kJ2fG{vs4Ddne%uiKTl8i7Q4EzQIbUt`c zLZ30WXpRmvrUU@eGtvlb^Y{mP+qK~S16iG5AB(7rG1Oi3IoExBm+g;Ez|wK`*Zz2IZ1lLfG{vs4Cqp$*{CBWzFWT} vM|Z6Uy?~NXTyF7W3Jh}WvCJOJu-kkV{Q>1h&%)g4blh$f6Blcp_NxH literal 0 HcmV?d00001 diff --git a/src/cpp/.DS_Store b/src/cpp/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..cff9b957df864947d120933cad2b8c01e36f7a16 GIT binary patch literal 6148 zcmeHKOHUL*5Uzq1W_ifSOMJxDbvXx5^!Yx&PY3*3zy}A4^mC&02x_f&2`cDs>IeYH> zh3<>Svfh)k@@oZOWO#?W+)ueBwybvrlTX zAlg&ub#W*%k#SEjKX_8sblg+Udfa0)Q#$e*G9M~;4Tj-1WFQOApbGEcJ?y|o_zd6S z7u2v5`*9G5aRkTlCYm^fGq{L0GAv*bOIXJ3Xr89sui%oJR{_2uq2VhiXME4)UV-!? zrX4E4sM$mlp{TAH7=@GGP=2PuYJ^cZpj?^eQ7fam zp`cuy^oDc?G$V}1xB_tn8Y|EoJ?i58zx((5e`8Sm6jvawz_F?TCMGkJDN0G5t%s5m yXRSf}gjkU9t41h8Xi&$o6vR1$;U;MrR literal 0 HcmV?d00001 diff --git a/src/cpp/ripple/.DS_Store b/src/cpp/ripple/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..389f5fe737ddcbef8044bcd0c7c5f21cac6bf188 GIT binary patch literal 24580 zcmeHO%Tip)5v`U$G)=z%Jy3YVQmYBe5w;0OID(PT1hO?U7K}&B8K4DNyo|t>ywcA4 z1bu=&K^yP2@CWD<^az%j=&JC)~J zwL+CP!t$c;J5gyi52u#IKrB}7q-JAeA)`nv5t2uX|BQBcg|PR zz_kT;f>rx*I1MXUzn|i$*8g@D9{%O9(dQu6`K�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 literal 0 HcmV?d00001 diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/WebSocket++ Dynamic Library.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/WebSocket++ Dynamic Library.xcscheme new file mode 100644 index 000000000..7dfc43ef0 --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/WebSocket++ Dynamic Library.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/WebSocket++ Static Library.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/WebSocket++ Static Library.xcscheme new file mode 100644 index 000000000..a96540790 --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/WebSocket++ Static Library.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/broadcast_server.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/broadcast_server.xcscheme new file mode 100644 index 000000000..63b475212 --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/broadcast_server.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/chat_client.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/chat_client.xcscheme new file mode 100644 index 000000000..cc7c5a1d2 --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/chat_client.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/concurrent_server.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/concurrent_server.xcscheme new file mode 100644 index 000000000..613c1f849 --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/concurrent_server.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_client.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_client.xcscheme new file mode 100644 index 000000000..8c3c3a0da --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_client.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_server.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_server.xcscheme new file mode 100644 index 000000000..71d40c23e --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_server.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_server_tls.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_server_tls.xcscheme new file mode 100644 index 000000000..bb5c6a32e --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/echo_server_tls.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/fuzzing_client.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/fuzzing_client.xcscheme new file mode 100644 index 000000000..5eb718b0c --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/fuzzing_client.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/fuzzing_server.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/fuzzing_server.xcscheme new file mode 100644 index 000000000..946a25ac9 --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/fuzzing_server.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/policy_test.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/policy_test.xcscheme new file mode 100644 index 000000000..e0ead1e66 --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/policy_test.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/stress_client.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/stress_client.xcscheme new file mode 100644 index 000000000..11018e7c9 --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/stress_client.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/wsperf.xcscheme b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/wsperf.xcscheme new file mode 100644 index 000000000..60f89c058 --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/wsperf.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 000000000..2bb5923fe --- /dev/null +++ b/src/cpp/websocketpp/websocketpp.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,142 @@ + + + + + SchemeUserState + + WebSocket++ Dynamic Library.xcscheme + + orderHint + 2 + + WebSocket++ Static Library.xcscheme + + orderHint + 1 + + broadcast_server.xcscheme + + orderHint + 10 + + chat_client.xcscheme + + orderHint + 4 + + concurrent_server.xcscheme + + orderHint + 12 + + echo_client.xcscheme + + orderHint + 5 + + echo_server.xcscheme + + orderHint + 3 + + echo_server_tls.xcscheme + + orderHint + 7 + + fuzzing_client.xcscheme + + orderHint + 9 + + fuzzing_server.xcscheme + + orderHint + 8 + + policy_test.xcscheme + + orderHint + 6 + + stress_client.xcscheme + + orderHint + 11 + + wsperf.xcscheme + + orderHint + 13 + + + SuppressBuildableAutocreation + + B61A51BE14DC271900456432 + + primary + + + B663884A1487D73200DDAE13 + + primary + + + B6732457148FAEEB00FC2B04 + + primary + + + B6732470148FB0FC00FC2B04 + + primary + + + B67324881491A16500FC2B04 + + primary + + + B67324A11491A7F100FC2B04 + + primary + + + B682887C143745F2002BA48B + + primary + + + B6CF181B1437C397009295BE + + primary + + + B6DF1C681434A7A30029A1B1 + + primary + + + B6DF1C711434A8280029A1B1 + + primary + + + B6DF1CD01435ED910029A1B1 + + primary + + + B6E7E7721505532E00394909 + + primary + + + B6FE8D4E14730AE900B32547 + + primary + + + + + diff --git a/test/.DS_Store b/test/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..20bf395382b301d68d67b26686c9df9fc2346ed3 GIT binary patch literal 6148 zcmeHKOHu+c5Pd-wsC;)WXX!?(yup-(R=L#+C@?CDV8Ng)=NKN!19%&J-3b_AKvouI zrK#j)GI`U}FPSs}V9v*#GoTKj#3EQcV3lKXU&@LVTu+T?^cj7mIAKXJS{WTWf&xK- zT~k25-74hd@##MykMXs{sA+tCdQ9niINzhz$N1s- ztB`ZgU-BzcV)dD2yfU^FkDEPegg&oIPl>*>?4`3EHTP|e#Oia)oQ;I~b~f{5CQZqU zvZ}lx-nNU=NJ`k7uLAKo=WxMW#bt?fo4H(ImgmedTV1Z2QQoT2_$FR_6|U3S z_>GE!vuJ!~1MiHkMLz?+?K9gySuTH0BwGIolxhc!Ia{oBXff15fuKN8V6K4d4-t!C z>@c&aTL&vW0uYPrR%2WKCI}~T7(2`?@(#^dD$!DnJ7O41XMg0z#SSxzmJZ_%AI5ps zbi@%xy%Qr|&`hils-QqnU`c^JdtI0Of3g1jzr+fcL4lyae^S5{n>WpKM&xqqN^FvA tBbHkhF&URxR0=DXj Date: Tue, 18 Dec 2012 17:37:21 -0800 Subject: [PATCH 033/525] minor xcodeuserstate alteration #1 --- .../UserInterfaceState.xcuserstate | Bin 31625 -> 34133 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rippled/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate b/rippled/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate index 446f385db9b2f20af2dccf662f979c35405088f2..bc48b355d3a02e1838441d3bcf34198d55ae1340 100644 GIT binary patch delta 16350 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 n|_CW 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 From 7d2cfdc06384d1c34b9087525961b6c490c908df Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 18:08:29 -0800 Subject: [PATCH 034/525] Fix OfferCreate handling of reserves. --- src/cpp/ripple/OfferCreateTransactor.cpp | 18 +++++++++++------- src/cpp/ripple/PaymentTransactor.cpp | 2 +- src/cpp/ripple/TransactionErr.cpp | 3 ++- src/cpp/ripple/TransactionErr.h | 3 ++- src/cpp/ripple/TrustSetTransactor.cpp | 2 +- 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index 92a085e01..0d6ccfc3d 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -326,6 +326,16 @@ TER OfferCreateTransactor::doApply() terResult = terUNFUNDED; } + else if (isSetBit(mParams, tapOPEN_LEDGER)) // Ledger is not final, can vote no. + { + const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); + const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); + // The reserve required to create the line. + const uint64 uReserveCreate = theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE + uOwnerCount*theConfig.FEE_OWNER_RESERVE); + + if (saSrcXRPBalance.getNValue() < uReserveCreate) // Have enough reserve prior to creating offer? + terResult = terINSUF_RESERVE_OFFER; + } if (tesSUCCESS == terResult && !saTakerPays.isNative()) { @@ -384,16 +394,10 @@ TER OfferCreateTransactor::doApply() // Log(lsWARNING) << "doOfferCreate: takeOffers: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); // Log(lsWARNING) << "doOfferCreate: takeOffers: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); - const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); - const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); - // The reserve required to create the line. - const uint64 uReserveCreate = theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE + (uOwnerCount+1)* theConfig.FEE_OWNER_RESERVE); - if (tesSUCCESS == terResult && saTakerPays // Still wanting something. && saTakerGets // Still offering something. - && mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).isPositive() // Still funded. - && saSrcXRPBalance.getNValue() >= uReserveCreate) // Have enough reserve to create offer. + && mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).isPositive()) // Still funded. { // We need to place the remainder of the offer into its order book. Log(lsINFO) << boost::str(boost::format("doOfferCreate: offer not fully consumed: saTakerPays=%s saTakerGets=%s") diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index c4d8a7c6f..a911dfbe7 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -83,7 +83,7 @@ TER PaymentTransactor::doApply() // Another transaction could create the account and then this transaction would succeed. return terNO_DST; } - else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote. + else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, can vote no. && saDstAmount.getNValue() < theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE)) // Reserve is not scaled by load. { Log(lsINFO) << "doPayment: Delay transaction: Destination account does not exist. Insufficent payment to create account."; diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index a36107e3b..3b8838774 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -50,7 +50,8 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { terDIR_FULL, "terDIR_FULL", "Can not add entry to full dir." }, { terFUNDS_SPENT, "terFUNDS_SPENT", "Can't set password, password set funds already spent." }, { terINSUF_FEE_B, "terINSUF_FEE_B", "Account balance can't pay fee." }, - { terINSUF_RESERVE, "terINSUF_RESERVE", "Insufficent reserve to add trust line." }, + { terINSUF_RESERVE_LINE, "terINSUF_RESERVE_LINE", "Insufficent reserve to add trust line." }, + { terINSUF_RESERVE_OFFER, "terINSUF_RESERVE_OFFER", "Insufficent reserve to create offer." }, { terNO_ACCOUNT, "terNO_ACCOUNT", "The source account does not exist." }, { terNO_DST, "terNO_DST", "Destination does not exist. Send XRP to create it." }, { terNO_DST_INSUF_XRP, "terNO_DST_INSUF_XRP", "Destination does not exist. Too little XRP sent to create it." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 0a17405ec..552b4fcb9 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -80,7 +80,8 @@ enum TER // aka TransactionEngineResult terDIR_FULL, terFUNDS_SPENT, terINSUF_FEE_B, - terINSUF_RESERVE, + terINSUF_RESERVE_LINE, + terINSUF_RESERVE_OFFER, terNO_ACCOUNT, terNO_DST, terNO_DST_INSUF_XRP, diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index 0447e13e4..26d14fa9d 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -239,7 +239,7 @@ TER TrustSetTransactor::doApply() Log(lsINFO) << "doTrustSet: Delay transaction: Insufficent reserve to add trust line."; // Another transaction could provide XRP to the account and then this transaction would succeed. - terResult = terINSUF_RESERVE; + terResult = terINSUF_RESERVE_LINE; } else { From 8236c57abc587d2a6e08c52874d1e1f1a5fa2dec Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 18:17:18 -0800 Subject: [PATCH 035/525] Banish .DS_Store files. --- .DS_Store | Bin 15364 -> 0 bytes .gitignore | 3 +++ bin/.DS_Store | Bin 6148 -> 0 bytes src/.DS_Store | Bin 6148 -> 0 bytes src/cpp/.DS_Store | Bin 6148 -> 0 bytes src/cpp/ripple/.DS_Store | Bin 24580 -> 0 bytes test/.DS_Store | Bin 6148 -> 0 bytes 7 files changed, 3 insertions(+) delete mode 100644 .DS_Store delete mode 100644 bin/.DS_Store delete mode 100644 src/.DS_Store delete mode 100644 src/cpp/.DS_Store delete mode 100644 src/cpp/ripple/.DS_Store delete mode 100644 test/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 546bb98bdb0f8fe8ce0fd6edef222684f6529b06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15364 zcmeI1-%k@k5XWaJKUzQ}8pZf@(Fc9NrWF-Pe5eRU5;ew}V4?=wUWIDuk@gChidO#y zANVWu-|)d_{{g?Vx5eA*(e#O^nN9ZQe$346d}epb9z>)Tnr@cJA)+KY%gJ#Z zVj4f^-qi-oo%4_i_T-g{Rj-Jv$u3>FAq0eg5D)@FKnVOD1n`^9EjboQISK(GAOsEw zaD8ylS>}vv2U3>~9P}0dauBz5!@2(BAJX9)kU1mUfy5m&6_`Q>rpjzFl-WC|z#PwW zM!y}%z?_tRGyIr0E3-pUX6vCGtxhTzNI41tA<#{L_wETQQiW>E)$smZt>DQ8^dI~C z+RSJbw;P*gm;bT2S*#wg)PPJMy*|}+Fes*`-Y0b`NrkyJ@ zbGy5#WHL4RA$jUt`ugpMh1TocH*fVQNtpsc$AasF<2#(07`F2DTGgwq;SOsLA^s)^ zRLQj&&=)+th(2!^43kS`+JvS@uOhljMz>*fN9YbM(@k2Udz7aoTU&jLcpiaPnYN+t zb?1U^L3?jsH=GfrY;8(Y*7mPQz6Z^pW;A0|)Ba0=e^@jSMKtFRV8K?Mc#n5kZBdDK zK%fpkFYI^fn8Mamy{$2Z=bE~Yk=3bTd*hgOQSXdp9Ns+5f0Z`$SrZYIyX=s&h}|X? zFzS~$u0cOdFA%#I7rSLQOb?K|8?;DwEuU@-nG)u}S`3-* zAu?kTFKJ}6+lrZltwyoxcs13KZ66+*u!`hBF$3GCfjshjT!j^{6c!^f8N3U1Qc>Tvg(vg?&xL`idVdR+D8rhTpR?ep`Fi zYaL_wjibh@Q?+%y?v6My7m66C(u9Bz5CTF#2nd0`2qXe6hrj=0_j=g>|NHVKN4i@GV8C9lXW{qn~dXTV9qtQe`#M!c_xcb@Rptl*6`Jn;>R z*ycWBr}b`Qen-r-UST#^MfJ)$KL_hPOX}^gLdj}dEF-S0b;!-g{TS!C6%BJpQBws} z0aaj!3b1F3O^-e5s0ye8s=!78`94^>U>>md=sq1B+!la1Vb~ex@}npm8!!*pd*m6K z@l>Lxny|$%p3b-pd3nIzqo>1!&4&qhHerWi+}(M7>(XIzk2V!Z diff --git a/src/.DS_Store b/src/.DS_Store deleted file mode 100644 index d6cb697d5037a54ed4edda44f75394b442b695e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%}N6?5Kh{vyQt8M;BoQfL8L{c9y~0iir$0@9#nMK6GgL=~MMCnPhl?{E_DZbw<` zyu3UdZdKO2YPD7yt$D**4V}%6?a|0}9Jl=BEUm2X>>mYpqx*;4{7j|sS2VK7_zsUS zIEmY4uM;PoYj`NSpl($9Dg77tSI0(Ri3kJ2fG{vs4Ddne%uiKTl8i7Q4EzQIbUt`c zLZ30WXpRmvrUU@eGtvlb^Y{mP+qK~S16iG5AB(7rG1Oi3IoExBm+g;Ez|wK`*Zz2IZ1lLfG{vs4Cqp$*{CBWzFWT} vM|Z6Uy?~NXTyF7W3Jh}WvCJOJu-kkV{Q>1h&%)g4blh$f6Blcp_NxH diff --git a/src/cpp/.DS_Store b/src/cpp/.DS_Store deleted file mode 100644 index cff9b957df864947d120933cad2b8c01e36f7a16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOHUL*5Uzq1W_ifSOMJxDbvXx5^!Yx&PY3*3zy}A4^mC&02x_f&2`cDs>IeYH> zh3<>Svfh)k@@oZOWO#?W+)ueBwybvrlTX zAlg&ub#W*%k#SEjKX_8sblg+Udfa0)Q#$e*G9M~;4Tj-1WFQOApbGEcJ?y|o_zd6S z7u2v5`*9G5aRkTlCYm^fGq{L0GAv*bOIXJ3Xr89sui%oJR{_2uq2VhiXME4)UV-!? zrX4E4sM$mlp{TAH7=@GGP=2PuYJ^cZpj?^eQ7fam zp`cuy^oDc?G$V}1xB_tn8Y|EoJ?i58zx((5e`8Sm6jvawz_F?TCMGkJDN0G5t%s5m yXRSf}gjkU9t41h8Xi&$o6vR1$;U;MrR diff --git a/src/cpp/ripple/.DS_Store b/src/cpp/ripple/.DS_Store deleted file mode 100644 index 389f5fe737ddcbef8044bcd0c7c5f21cac6bf188..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24580 zcmeHO%Tip)5v`U$G)=z%Jy3YVQmYBe5w;0OID(PT1hO?U7K}&B8K4DNyo|t>ywcA4 z1bu=&K^yP2@CWD<^az%j=&JC)~J zwL+CP!t$c;J5gyi52u#IKrB}7q-JAeA)`nv5t2uX|BQBcg|PR zz_kT;f>rx*I1MXUzn|i$*8g@D9{%O9(dQu6`K�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 diff --git a/test/.DS_Store b/test/.DS_Store deleted file mode 100644 index 20bf395382b301d68d67b26686c9df9fc2346ed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOHu+c5Pd-wsC;)WXX!?(yup-(R=L#+C@?CDV8Ng)=NKN!19%&J-3b_AKvouI zrK#j)GI`U}FPSs}V9v*#GoTKj#3EQcV3lKXU&@LVTu+T?^cj7mIAKXJS{WTWf&xK- zT~k25-74hd@##MykMXs{sA+tCdQ9niINzhz$N1s- ztB`ZgU-BzcV)dD2yfU^FkDEPegg&oIPl>*>?4`3EHTP|e#Oia)oQ;I~b~f{5CQZqU zvZ}lx-nNU=NJ`k7uLAKo=WxMW#bt?fo4H(ImgmedTV1Z2QQoT2_$FR_6|U3S z_>GE!vuJ!~1MiHkMLz?+?K9gySuTH0BwGIolxhc!Ia{oBXff15fuKN8V6K4d4-t!C z>@c&aTL&vW0uYPrR%2WKCI}~T7(2`?@(#^dD$!DnJ7O41XMg0z#SSxzmJZ_%AI5ps zbi@%xy%Qr|&`hils-QqnU`c^JdtI0Of3g1jzr+fcL4lyae^S5{n>WpKM&xqqN^FvA tBbHkhF&URxR0=DXj Date: Tue, 18 Dec 2012 18:24:08 -0800 Subject: [PATCH 036/525] Banish local validators.txt. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ae1174955..8a9dbd0da 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,5 @@ db/*.db-journal # Ignore customized configs rippled.cfg +validators.txt test/config.js From ec0b0828cfe7e335df14d6f11e1e999435837933 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 18 Dec 2012 18:24:08 -0800 Subject: [PATCH 037/525] Banish local validators.txt. --- .gitignore | 1 + validators.txt | 25 ------------------------- 2 files changed, 1 insertion(+), 25 deletions(-) delete mode 100644 validators.txt diff --git a/.gitignore b/.gitignore index ae1174955..8a9dbd0da 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,5 @@ db/*.db-journal # Ignore customized configs rippled.cfg +validators.txt test/config.js diff --git a/validators.txt b/validators.txt deleted file mode 100644 index cde2a6711..000000000 --- a/validators.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# Default validators.txt -# -# A list of domains to bootstrap a nodes UNLs or for clients to indirectly -# locate IPs to contact the Newcoin network. -# -# This file is UTF-8 with Dos, UNIX, or Mac style end of lines. -# Blank lines and lines starting with a '#' are ignored. -# All other lines should be hankos or domain names. -# -# [validators]: -# List of nodes to accept as validators specified by public key or domain. -# -# For domains, newcoind will probe for https web servers at the specified -# domain in the following order: ripple.DOMAIN, www.DOMAIN, DOMAIN -# -# Examples: redstem.com -# n9KorY8QtTdRx7TVDpwnG9NvyxsDwHUKUEeDLY3AkiGncVaSXZi5 -# n9MqiExBcoG19UXwoLjBJnhsxEhAZMuWwJDRdkyDz1EkEkwzQTNt John Doe -# - -[validators] -n9KPnVLn7ewVzHvn218DcEYsnWLzKerTDwhpofhk4Ym1RUq4TeGw first -n9LFzWuhKNvXStHAuemfRKFVECLApowncMAM5chSCL9R5ECHGN4V second -n94rSdgTyBNGvYg8pZXGuNt59Y5bGAZGxbxyvjDaqD9ceRAgD85P third From 4d63e98d92b51e9e7d6b0676fc1723b788c58c9d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Dec 2012 07:07:46 -0800 Subject: [PATCH 038/525] Transaction Queue class to allow for multi-threaded signature checking while still retiring transactions in order by account. --- src/cpp/ripple/TransactionQueue.cpp | 85 +++++++++++++++++++++++++++++ src/cpp/ripple/TransactionQueue.h | 67 +++++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 src/cpp/ripple/TransactionQueue.cpp create mode 100644 src/cpp/ripple/TransactionQueue.h diff --git a/src/cpp/ripple/TransactionQueue.cpp b/src/cpp/ripple/TransactionQueue.cpp new file mode 100644 index 000000000..d6aab1050 --- /dev/null +++ b/src/cpp/ripple/TransactionQueue.cpp @@ -0,0 +1,85 @@ +#include "TransactionQueue.h" + +bool TXQueue::addEntryForSigCheck(TXQEntry::ref entry) +{ // we always dispatch a thread to check the signature + boost::mutex::scoped_lock sl(mLock); + mQueue[entry->getAccount()].push_back(entry); + return true; // we always need to dispatch a thread to check the signature +} + +bool TXQueue::addEntryForExecution(TXQEntry::ref entry, bool isNew) +{ + boost::mutex::scoped_lock sl(mLock); + entry->mSigChecked = true; + + if (isNew) + mQueue[entry->getAccount()].push_back(entry); + + if (mQueue.count(entry->getAccount()) != 0) + return false; // A thread is already handling this account + + mThreads.insert(entry->getAccount()); + return true; // A thread needs to handle this account +} + +void TXQueue::removeEntry(TXQEntry::ref entry) +{ + boost::mutex::scoped_lock sl(mLock); + + boost::unordered_map::iterator mIt = mQueue.find(entry->getAccount()); + if (mIt == mQueue.end()) + return; + + listType& txList = mIt->second; + for (listType::iterator listIt = txList.begin(), listEnd = txList.end(); listIt != listEnd; ++listIt) + if (*listIt == entry) + { + txList.erase(listIt); + if (txList.empty()) + mQueue.erase(mIt); + return; + } +} + +TXQEntry::pointer TXQueue::getJob(const RippleAddress& account, TXQEntry::ref finished) +{ + boost::mutex::scoped_lock sl(mLock); + + assert(mQueue.count(account) != 0); + + boost::unordered_map::iterator mIt = mQueue.find(account); + if (mIt != mQueue.end()) + { + listType& txList = mIt->second; + if (txList.empty()) + { + assert(!finished); + mQueue.erase(mIt); + } + else + { + TXQEntry::pointer e = txList.front(); + if (finished) + { + assert(e == finished); // We should have done the head job in this list + txList.pop_front(); + if (txList.empty()) // No more jobs for this account + { + e.reset(); + mQueue.erase(mIt); + } + else + e = txList.front(); + } + + if (e && e->getSigChecked()) // The next job is ready to do + return e; + } + } + else + assert(!finished); // If we finished a job, it should be there + + // No job to do now, release the thread + mThreads.erase(account); + return TXQEntry::pointer(); +} diff --git a/src/cpp/ripple/TransactionQueue.h b/src/cpp/ripple/TransactionQueue.h new file mode 100644 index 000000000..aa3b9c609 --- /dev/null +++ b/src/cpp/ripple/TransactionQueue.h @@ -0,0 +1,67 @@ +#ifndef TRANSACTIONQUEUE__H +#define TRANSACTIONQUEUE__H + +// Allow transactions to be signature checked out of sequence but retired in sequence + +#include + +#include +#include +#include +#include + +#include "Transaction.h" +#include "RippleAddress.h" + +class TXQeueue; + +class TXQEntry +{ + friend class TXQueue; + +public: + typedef boost::shared_ptr pointer; + typedef const boost::shared_ptr& ref; + +protected: + RippleAddress mAccount; + Transaction::pointer mTxn; + bool mSigChecked; + +public: + TXQEntry(const RippleAddress& ra, Transaction::ref tx, bool sigChecked) + : mAccount(ra), mTxn(tx), mSigChecked(sigChecked) { ; } + TXQEntry() : mSigChecked(false) { ; } + + const RippleAddress& getAccount() const { return mAccount; } + Transaction::ref getTransaction() const { return mTxn; } + bool getSigChecked() const { return mSigChecked; } +}; + +class TXQueue +{ +protected: + typedef std::list listType; + + boost::unordered_set mThreads; + boost::unordered_map mQueue; + boost::mutex mLock; + +public: + + TXQueue() { ; } + + // Return: true = must dispatch signature checker thread + bool addEntryForSigCheck(TXQEntry::ref); + + // Call only if signature is okay. Returns true if new account, must dispatch + bool addEntryForExecution(TXQEntry::ref, bool isNew); + + // Call if signature is bad + void removeEntry(TXQEntry::ref); + + // Transaction execution interface + TXQEntry::pointer getJob(const RippleAddress& account, TXQEntry::ref finishedJob); +}; + +#endif From 07e4da4f418e921b9b9b49df50e865e9862693d5 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Dec 2012 09:06:49 -0800 Subject: [PATCH 039/525] Rewrite. Simpler, fixes some additional inter-account races, and performs better. --- src/cpp/ripple/TransactionQueue.cpp | 86 +++++++++-------------------- src/cpp/ripple/TransactionQueue.h | 32 +++++------ 2 files changed, 42 insertions(+), 76 deletions(-) diff --git a/src/cpp/ripple/TransactionQueue.cpp b/src/cpp/ripple/TransactionQueue.cpp index d6aab1050..da4809874 100644 --- a/src/cpp/ripple/TransactionQueue.cpp +++ b/src/cpp/ripple/TransactionQueue.cpp @@ -3,83 +3,49 @@ bool TXQueue::addEntryForSigCheck(TXQEntry::ref entry) { // we always dispatch a thread to check the signature boost::mutex::scoped_lock sl(mLock); - mQueue[entry->getAccount()].push_back(entry); - return true; // we always need to dispatch a thread to check the signature + + return mTxMap.insert(valueType(entry->getID(), entry)).second; } -bool TXQueue::addEntryForExecution(TXQEntry::ref entry, bool isNew) +bool TXQueue::addEntryForExecution(TXQEntry::ref entry) { boost::mutex::scoped_lock sl(mLock); + entry->mSigChecked = true; + if (!mTxMap.insert(valueType(entry->getID(), entry)).second) + mTxMap.left.find(entry->getID())->second->mSigChecked = true; - if (isNew) - mQueue[entry->getAccount()].push_back(entry); + if (mRunning) + return false; - if (mQueue.count(entry->getAccount()) != 0) - return false; // A thread is already handling this account - - mThreads.insert(entry->getAccount()); + mRunning = true; return true; // A thread needs to handle this account } -void TXQueue::removeEntry(TXQEntry::ref entry) +void TXQueue::removeEntry(const uint256& id) { boost::mutex::scoped_lock sl(mLock); - boost::unordered_map::iterator mIt = mQueue.find(entry->getAccount()); - if (mIt == mQueue.end()) - return; - - listType& txList = mIt->second; - for (listType::iterator listIt = txList.begin(), listEnd = txList.end(); listIt != listEnd; ++listIt) - if (*listIt == entry) - { - txList.erase(listIt); - if (txList.empty()) - mQueue.erase(mIt); - return; - } + mTxMap.left.erase(id); } -TXQEntry::pointer TXQueue::getJob(const RippleAddress& account, TXQEntry::ref finished) +void TXQueue::getJob(TXQEntry::pointer &job) { boost::mutex::scoped_lock sl(mLock); - assert(mQueue.count(account) != 0); + if (job) + mTxMap.left.erase(job->getID()); - boost::unordered_map::iterator mIt = mQueue.find(account); - if (mIt != mQueue.end()) - { - listType& txList = mIt->second; - if (txList.empty()) - { - assert(!finished); - mQueue.erase(mIt); - } - else - { - TXQEntry::pointer e = txList.front(); - if (finished) - { - assert(e == finished); // We should have done the head job in this list - txList.pop_front(); - if (txList.empty()) // No more jobs for this account - { - e.reset(); - mQueue.erase(mIt); - } - else - e = txList.front(); - } - - if (e && e->getSigChecked()) // The next job is ready to do - return e; - } - } - else - assert(!finished); // If we finished a job, it should be there - - // No job to do now, release the thread - mThreads.erase(account); - return TXQEntry::pointer(); + mapType::left_map::iterator it = mTxMap.left.begin(); + if (it == mTxMap.left.end() || !it->second->mSigChecked) + job.reset(); + else job = it->second; +} + +bool TXQueue::stopProcessing() +{ // returns true if a new thread must be dispatched + boost::mutex::scoped_lock sl(mLock); + + mapType::left_map::iterator it = mTxMap.left.begin(); + return (it != mTxMap.left.end()) && it->second->mSigChecked; } diff --git a/src/cpp/ripple/TransactionQueue.h b/src/cpp/ripple/TransactionQueue.h index aa3b9c609..0c7590648 100644 --- a/src/cpp/ripple/TransactionQueue.h +++ b/src/cpp/ripple/TransactionQueue.h @@ -3,15 +3,13 @@ // Allow transactions to be signature checked out of sequence but retired in sequence -#include - #include -#include -#include #include +#include +#include +#include #include "Transaction.h" -#include "RippleAddress.h" class TXQeueue; @@ -24,28 +22,29 @@ public: typedef const boost::shared_ptr& ref; protected: - RippleAddress mAccount; Transaction::pointer mTxn; bool mSigChecked; public: - TXQEntry(const RippleAddress& ra, Transaction::ref tx, bool sigChecked) - : mAccount(ra), mTxn(tx), mSigChecked(sigChecked) { ; } + TXQEntry(Transaction::ref tx, bool sigChecked) : mTxn(tx), mSigChecked(sigChecked) { ; } TXQEntry() : mSigChecked(false) { ; } - const RippleAddress& getAccount() const { return mAccount; } Transaction::ref getTransaction() const { return mTxn; } bool getSigChecked() const { return mSigChecked; } + const uint256& getID() const { return mTxn->getID(); } }; class TXQueue { protected: - typedef std::list listType; + typedef boost::bimaps::unordered_set_of leftType; + typedef boost::bimaps::list_of rightType; + typedef boost::bimap mapType; + typedef mapType::value_type valueType; - boost::unordered_set mThreads; - boost::unordered_map mQueue; - boost::mutex mLock; + mapType mTxMap; + bool mRunning; + boost::mutex mLock; public: @@ -55,13 +54,14 @@ public: bool addEntryForSigCheck(TXQEntry::ref); // Call only if signature is okay. Returns true if new account, must dispatch - bool addEntryForExecution(TXQEntry::ref, bool isNew); + bool addEntryForExecution(TXQEntry::ref); // Call if signature is bad - void removeEntry(TXQEntry::ref); + void removeEntry(const uint256& txID); // Transaction execution interface - TXQEntry::pointer getJob(const RippleAddress& account, TXQEntry::ref finishedJob); + void getJob(TXQEntry::pointer&); + bool stopProcessing(); }; #endif From edcd8286d2980ba7a0ad762cdd263a0bb8576845 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Dec 2012 09:37:05 -0800 Subject: [PATCH 040/525] Add callback support. --- src/cpp/ripple/TransactionQueue.cpp | 45 +++++++++++++++++++++++++---- src/cpp/ripple/TransactionQueue.h | 11 +++++-- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/TransactionQueue.cpp b/src/cpp/ripple/TransactionQueue.cpp index da4809874..45eab57b6 100644 --- a/src/cpp/ripple/TransactionQueue.cpp +++ b/src/cpp/ripple/TransactionQueue.cpp @@ -1,10 +1,30 @@ #include "TransactionQueue.h" +#include + +void TXQEntry::addCallbacks(const TXQEntry& otherEntry) +{ + BOOST_FOREACH(const stCallback& callback, otherEntry.mCallbacks) + mCallbacks.push_back(callback); +} + +void TXQEntry::doCallbacks(TER result) +{ + BOOST_FOREACH(const stCallback& callback, mCallbacks) + callback(mTxn, result); +} + bool TXQueue::addEntryForSigCheck(TXQEntry::ref entry) { // we always dispatch a thread to check the signature boost::mutex::scoped_lock sl(mLock); - return mTxMap.insert(valueType(entry->getID(), entry)).second; + if (!mTxMap.insert(valueType(entry->getID(), entry)).second) + { + if (!entry->mCallbacks.empty()) + mTxMap.left.find(entry->getID())->second->addCallbacks(*entry); + return false; + } + return true; } bool TXQueue::addEntryForExecution(TXQEntry::ref entry) @@ -12,8 +32,14 @@ bool TXQueue::addEntryForExecution(TXQEntry::ref entry) boost::mutex::scoped_lock sl(mLock); entry->mSigChecked = true; - if (!mTxMap.insert(valueType(entry->getID(), entry)).second) - mTxMap.left.find(entry->getID())->second->mSigChecked = true; + + std::pair it = mTxMap.insert(valueType(entry->getID(), entry)); + if (!it.second) + { // There was an existing entry + it.first->right->mSigChecked = true; + if (!entry->mCallbacks.empty()) + it.first->right->addCallbacks(*entry); + } if (mRunning) return false; @@ -22,11 +48,20 @@ bool TXQueue::addEntryForExecution(TXQEntry::ref entry) return true; // A thread needs to handle this account } -void TXQueue::removeEntry(const uint256& id) +TXQEntry::pointer TXQueue::removeEntry(const uint256& id) { + TXQEntry::pointer ret; + boost::mutex::scoped_lock sl(mLock); - mTxMap.left.erase(id); + mapType::left_map::iterator it = mTxMap.left.find(id); + if (it != mTxMap.left.end()) + { + ret = it->second; + mTxMap.left.erase(it); + } + + return ret; } void TXQueue::getJob(TXQEntry::pointer &job) diff --git a/src/cpp/ripple/TransactionQueue.h b/src/cpp/ripple/TransactionQueue.h index 0c7590648..65f7b6391 100644 --- a/src/cpp/ripple/TransactionQueue.h +++ b/src/cpp/ripple/TransactionQueue.h @@ -3,6 +3,7 @@ // Allow transactions to be signature checked out of sequence but retired in sequence +#include #include #include #include @@ -20,10 +21,14 @@ class TXQEntry public: typedef boost::shared_ptr pointer; typedef const boost::shared_ptr& ref; + typedef boost::function stCallback; // must complete immediately protected: Transaction::pointer mTxn; bool mSigChecked; + std::list mCallbacks; + + void addCallbacks(const TXQEntry& otherEntry); public: TXQEntry(Transaction::ref tx, bool sigChecked) : mTxn(tx), mSigChecked(sigChecked) { ; } @@ -32,6 +37,8 @@ public: Transaction::ref getTransaction() const { return mTxn; } bool getSigChecked() const { return mSigChecked; } const uint256& getID() const { return mTxn->getID(); } + + void doCallbacks(TER); }; class TXQueue @@ -56,8 +63,8 @@ public: // Call only if signature is okay. Returns true if new account, must dispatch bool addEntryForExecution(TXQEntry::ref); - // Call if signature is bad - void removeEntry(const uint256& txID); + // Call if signature is bad (returns entry so you can run its callbacks) + TXQEntry::pointer removeEntry(const uint256& txID); // Transaction execution interface void getJob(TXQEntry::pointer&); From cc7b1434c78f4926f56dee6406180b1bb93fd396 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Dec 2012 11:31:33 -0800 Subject: [PATCH 041/525] Begin tying in the new transaction queue code. --- newcoin.vcxproj | 2 + newcoin.vcxproj.filters | 6 +++ ripple2010.vcxproj | 2 + ripple2010.vcxproj.filters | 6 +++ src/cpp/ripple/Application.h | 3 ++ src/cpp/ripple/NetworkOPs.cpp | 82 +++++++++++++++++++++++++++++ src/cpp/ripple/NetworkOPs.h | 1 + src/cpp/ripple/TransactionQueue.cpp | 18 +++++-- src/cpp/ripple/TransactionQueue.h | 2 +- 9 files changed, 118 insertions(+), 4 deletions(-) diff --git a/newcoin.vcxproj b/newcoin.vcxproj index b5839160e..8f29a10d6 100644 --- a/newcoin.vcxproj +++ b/newcoin.vcxproj @@ -177,6 +177,7 @@ + @@ -284,6 +285,7 @@ + diff --git a/newcoin.vcxproj.filters b/newcoin.vcxproj.filters index 25533c2dc..535986aa0 100644 --- a/newcoin.vcxproj.filters +++ b/newcoin.vcxproj.filters @@ -264,6 +264,9 @@ Source Files + + Source Files + Source Files @@ -605,6 +608,9 @@ Header Files + + Header Files + Header Files diff --git a/ripple2010.vcxproj b/ripple2010.vcxproj index ed3106e81..c09787f99 100644 --- a/ripple2010.vcxproj +++ b/ripple2010.vcxproj @@ -173,6 +173,7 @@ + @@ -274,6 +275,7 @@ + diff --git a/ripple2010.vcxproj.filters b/ripple2010.vcxproj.filters index 0f3ccb451..2c8ed95fc 100644 --- a/ripple2010.vcxproj.filters +++ b/ripple2010.vcxproj.filters @@ -264,6 +264,9 @@ Source Files + + Source Files + Source Files @@ -599,6 +602,9 @@ Header Files + + Header Files + Header Files diff --git a/src/cpp/ripple/Application.h b/src/cpp/ripple/Application.h index b0e58d209..bfaac4c83 100644 --- a/src/cpp/ripple/Application.h +++ b/src/cpp/ripple/Application.h @@ -23,6 +23,7 @@ #include "RPCHandler.h" #include "ProofOfWork.h" #include "LoadManager.h" +#include "TransactionQueue.h" class RPCDoor; class PeerDoor; @@ -64,6 +65,7 @@ class Application ProofOfWorkGenerator mPOWGen; LoadManager mLoadMgr; LoadFeeTrack mFeeTrack; + TXQueue mTxnQueue; DatabaseCon *mRpcDB, *mTxnDB, *mLedgerDB, *mWalletDB, *mHashNodeDB, *mNetNodeDB; @@ -110,6 +112,7 @@ public: boost::recursive_mutex& getMasterLock() { return mMasterLock; } ProofOfWorkGenerator& getPowGen() { return mPOWGen; } LoadManager& getLoadManager() { return mLoadMgr; } + TXQueue& getTxnQueue() { return mTxnQueue; } bool isNew(const uint256& s) { return mSuppressions.addSuppression(s); } diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 1488ba346..dfddfc608 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -177,6 +177,88 @@ Transaction::pointer NetworkOPs::submitTransactionSync(const Transaction::pointe return tpTransNew; } +void NetworkOPs::runTransactionQueue() +{ + TXQEntry::pointer txn; + + for (int i = 0; i < 10; ++i) + { + theApp->getTxnQueue().getJob(txn); + if (!txn) + return; + + { + LoadEvent::autoptr ev = theApp->getJobQueue().getLoadEventAP(jtTXN_PROC); + + boost::recursive_mutex::scoped_lock sl(theApp->getMasterLock()); + + Transaction::pointer dbtx = theApp->getMasterTransaction().fetch(txn->getID(), true); + assert(dbtx); + + TER r = mLedgerMaster->doTransaction(*dbtx->getSTransaction(), tapOPEN_LEDGER | tapNO_CHECK_SIGN); + dbtx->setResult(r); + + if (isTemMalformed(r)) // malformed, cache bad + theApp->isNewFlag(txn->getID(), SF_BAD); + else if(isTelLocal(r) || isTerRetry(r)) // can be retried + theApp->isNewFlag(txn->getID(), SF_RETRY); + + + bool relay = true; + + if (isTerRetry(r)) + { // transaction should be held + cLog(lsDEBUG) << "Transaction should be held: " << r; + dbtx->setStatus(HELD); + theApp->getMasterTransaction().canonicalize(dbtx, true); + mLedgerMaster->addHeldTransaction(dbtx); + relay = false; + } + else if (r == tefPAST_SEQ) + { // duplicate or conflict + cLog(lsINFO) << "Transaction is obsolete"; + dbtx->setStatus(OBSOLETE); + relay = false; + } + else if (r == tesSUCCESS) + { + cLog(lsINFO) << "Transaction is now included in open ledger"; + dbtx->setStatus(INCLUDED); + theApp->getMasterTransaction().canonicalize(dbtx, true); + } + else + { + cLog(lsDEBUG) << "Status other than success " << r; + if (mMode == omFULL) + relay = false; + dbtx->setStatus(INVALID); + } + + if (relay) + { + std::set peers; + if (theApp->getSuppression().swapSet(txn->getID(), peers, SF_RELAYED)) + { + ripple::TMTransaction tx; + Serializer s; + dbtx->getSTransaction()->add(s); + tx.set_rawtransaction(&s.getData().front(), s.getLength()); + tx.set_status(ripple::tsCURRENT); + tx.set_receivetimestamp(getNetworkTimeNC()); // FIXME: This should be when we received it + + PackedMessage::pointer packet = boost::make_shared(tx, ripple::mtTRANSACTION); + theApp->getConnectionPool().relayMessageBut(peers, packet); + } + } + + txn->doCallbacks(r); + } + } + + if (theApp->getTxnQueue().stopProcessing(txn)) + theApp->getIOService().post(boost::bind(&NetworkOPs::runTransactionQueue, this)); +} + Transaction::pointer NetworkOPs::processTransaction(Transaction::pointer trans, stCallback callback) { LoadEvent::autoptr ev = theApp->getJobQueue().getLoadEventAP(jtTXN_PROC); diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 25211db63..e31bdb0e9 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -148,6 +148,7 @@ public: void submitTransaction(Job&, SerializedTransaction::pointer, stCallback callback = stCallback()); Transaction::pointer submitTransactionSync(const Transaction::pointer& tpTrans); + void runTransactionQueue(); Transaction::pointer processTransaction(Transaction::pointer, stCallback); Transaction::pointer processTransaction(Transaction::pointer transaction) { return processTransaction(transaction, stCallback()); } diff --git a/src/cpp/ripple/TransactionQueue.cpp b/src/cpp/ripple/TransactionQueue.cpp index 45eab57b6..7bc6f2d32 100644 --- a/src/cpp/ripple/TransactionQueue.cpp +++ b/src/cpp/ripple/TransactionQueue.cpp @@ -67,20 +67,32 @@ TXQEntry::pointer TXQueue::removeEntry(const uint256& id) void TXQueue::getJob(TXQEntry::pointer &job) { boost::mutex::scoped_lock sl(mLock); + assert(mRunning); if (job) mTxMap.left.erase(job->getID()); mapType::left_map::iterator it = mTxMap.left.begin(); if (it == mTxMap.left.end() || !it->second->mSigChecked) + { job.reset(); - else job = it->second; + mRunning = false; + } + else + job = it->second; } -bool TXQueue::stopProcessing() +bool TXQueue::stopProcessing(TXQEntry::ref finishedJob) { // returns true if a new thread must be dispatched boost::mutex::scoped_lock sl(mLock); + assert(mRunning); + + mTxMap.left.erase(finishedJob->getID()); mapType::left_map::iterator it = mTxMap.left.begin(); - return (it != mTxMap.left.end()) && it->second->mSigChecked; + if ((it != mTxMap.left.end()) && it->second->mSigChecked) + return true; + + mRunning = false; + return false; } diff --git a/src/cpp/ripple/TransactionQueue.h b/src/cpp/ripple/TransactionQueue.h index 65f7b6391..5f8ef6914 100644 --- a/src/cpp/ripple/TransactionQueue.h +++ b/src/cpp/ripple/TransactionQueue.h @@ -68,7 +68,7 @@ public: // Transaction execution interface void getJob(TXQEntry::pointer&); - bool stopProcessing(); + bool stopProcessing(TXQEntry::ref finishedJob); }; #endif From a4ff121b353ffd3aea34b3f1cd466b7d24d04cf1 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 19 Dec 2012 12:00:23 -0800 Subject: [PATCH 042/525] Mark a FIXME --- src/cpp/ripple/RPCHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index ee5f63b14..c7a999a25 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -499,7 +499,7 @@ Json::Value RPCHandler::doProfile(Json::Value jvRequest) 0); // uExpiration if(bSubmit) - tpOfferA = mNetOps->submitTransactionSync(tpOfferA); + tpOfferA = mNetOps->submitTransactionSync(tpOfferA); // FIXME: Don't use synch interface } boost::posix_time::ptime ptEnd(boost::posix_time::microsec_clock::local_time()); From 8e201277a66139a08ba1a49bc0924f930b789e13 Mon Sep 17 00:00:00 2001 From: Jcar Date: Wed, 19 Dec 2012 14:23:12 -0800 Subject: [PATCH 043/525] Cleaned up Xcode project directory strucgture (only affects Mac users) --- NewCoin.1 | 79 - NewCoin/NewCoin.xcodeproj/project.pbxproj | 26259 ---------------- .../contents.xcworkspacedata | 7 - .../UserInterfaceState.xcuserstate | Bin 21683 -> 0 bytes .../xcschemes/NewCoin.xcscheme | 86 - .../xcschemes/xcschememanagement.plist | 22 - NewCoin/NewCoin/NewCoin.1 | 79 - NewCoin/NewCoin/main.cpp | 18 - rippled/rippled/rippled.1 => rippled.1 | Bin .../project.pbxproj | 27 +- .../contents.xcworkspacedata | 0 .../UserInterfaceState.xcuserstate | Bin 0 -> 52221 bytes .../xcschemes/rippled.xcscheme | 0 .../xcschemes/xcschememanagement.plist | 0 .../UserInterfaceState.xcuserstate | Bin 34133 -> 0 bytes 15 files changed, 14 insertions(+), 26563 deletions(-) delete mode 100644 NewCoin.1 delete mode 100644 NewCoin/NewCoin.xcodeproj/project.pbxproj delete mode 100644 NewCoin/NewCoin.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 NewCoin/NewCoin.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/NewCoin.xcscheme delete mode 100644 NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 NewCoin/NewCoin/NewCoin.1 delete mode 100644 NewCoin/NewCoin/main.cpp rename rippled/rippled/rippled.1 => rippled.1 (100%) rename {rippled/rippled.xcodeproj => rippled.xcodeproj}/project.pbxproj (99%) rename {rippled/rippled.xcodeproj => rippled.xcodeproj}/project.xcworkspace/contents.xcworkspacedata (100%) create mode 100644 rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate rename {rippled/rippled.xcodeproj => rippled.xcodeproj}/xcuserdata/jcar.xcuserdatad/xcschemes/rippled.xcscheme (100%) rename {rippled/rippled.xcodeproj => rippled.xcodeproj}/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist (100%) delete mode 100644 rippled/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/NewCoin.1 b/NewCoin.1 deleted file mode 100644 index f1c75d815..000000000 --- a/NewCoin.1 +++ /dev/null @@ -1,79 +0,0 @@ -.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. -.\"See Also: -.\"man mdoc.samples for a complete listing of options -.\"man mdoc for the short list of editing options -.\"/usr/share/misc/mdoc.template -.Dd 12/18/12 \" DATE -.Dt NewCoin 1 \" Program name and manual section number -.Os Darwin -.Sh NAME \" Section Header - required - don't modify -.Nm NewCoin, -.\" The following lines are read in generating the apropos(man -k) database. Use only key -.\" words here as the database is built based on the words here and in the .ND line. -.Nm Other_name_for_same_program(), -.Nm Yet another name for the same program. -.\" Use .Nm macro to designate other names for the documented program. -.Nd This line parsed for whatis database. -.Sh SYNOPSIS \" Section Header - required - don't modify -.Nm -.Op Fl abcd \" [-abcd] -.Op Fl a Ar path \" [-a path] -.Op Ar file \" [file] -.Op Ar \" [file ...] -.Ar arg0 \" Underlined argument - use .Ar anywhere to underline -arg2 ... \" Arguments -.Sh DESCRIPTION \" Section Header - required - don't modify -Use the .Nm macro to refer to your program throughout the man page like such: -.Nm -Underlining is accomplished with the .Ar macro like this: -.Ar underlined text . -.Pp \" Inserts a space -A list of items with descriptions: -.Bl -tag -width -indent \" Begins a tagged list -.It item a \" Each item preceded by .It macro -Description of item a -.It item b -Description of item b -.El \" Ends the list -.Pp -A list of flags and their descriptions: -.Bl -tag -width -indent \" Differs from above in tag removed -.It Fl a \"-a flag as a list item -Description of -a flag -.It Fl b -Description of -b flag -.El \" Ends the list -.Pp -.\" .Sh ENVIRONMENT \" May not be needed -.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 -.\" .It Ev ENV_VAR_1 -.\" Description of ENV_VAR_1 -.\" .It Ev ENV_VAR_2 -.\" Description of ENV_VAR_2 -.\" .El -.Sh FILES \" File used or created by the topic of the man page -.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact -.It Pa /usr/share/file_name -FILE_1 description -.It Pa /Users/joeuser/Library/really_long_file_name -FILE_2 description -.El \" Ends the list -.\" .Sh DIAGNOSTICS \" May not be needed -.\" .Bl -diag -.\" .It Diagnostic Tag -.\" Diagnostic informtion here. -.\" .It Diagnostic Tag -.\" Diagnostic informtion here. -.\" .El -.Sh SEE ALSO -.\" List links in ascending order by section, alphabetically within a section. -.\" Please do not reference files that do not exist without filing a bug report -.Xr a 1 , -.Xr b 1 , -.Xr c 1 , -.Xr a 2 , -.Xr b 2 , -.Xr a 3 , -.Xr b 3 -.\" .Sh BUGS \" Document known, unremedied bugs -.\" .Sh HISTORY \" Document history if command behaves in a unique manner \ No newline at end of file diff --git a/NewCoin/NewCoin.xcodeproj/project.pbxproj b/NewCoin/NewCoin.xcodeproj/project.pbxproj deleted file mode 100644 index e7cc21b86..000000000 --- a/NewCoin/NewCoin.xcodeproj/project.pbxproj +++ /dev/null @@ -1,26259 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - C1EA4FCD1680FDCA00A21259 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA4FCC1680FDCA00A21259 /* main.cpp */; }; - C1EA4FCF1680FDCA00A21259 /* NewCoin.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C1EA4FCE1680FDCA00A21259 /* NewCoin.1 */; }; - C1EA72121680FE1800A21259 /* database.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FE01680FE1000A21259 /* database.o */; }; - C1EA72131680FE1800A21259 /* sqlite3.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FE11680FE1000A21259 /* sqlite3.o */; }; - C1EA72141680FE1800A21259 /* SqliteDatabase.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FE21680FE1000A21259 /* SqliteDatabase.o */; }; - C1EA72151680FE1800A21259 /* json_reader.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FE41680FE1000A21259 /* json_reader.o */; }; - C1EA72161680FE1800A21259 /* json_value.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FE51680FE1000A21259 /* json_value.o */; }; - C1EA72171680FE1800A21259 /* json_writer.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FE61680FE1000A21259 /* json_writer.o */; }; - C1EA72181680FE1800A21259 /* AccountItems.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FE81680FE1000A21259 /* AccountItems.o */; }; - C1EA72191680FE1800A21259 /* AccountSetTransactor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FE91680FE1000A21259 /* AccountSetTransactor.o */; }; - C1EA721A1680FE1800A21259 /* AccountState.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FEA1680FE1000A21259 /* AccountState.o */; }; - C1EA721B1680FE1800A21259 /* Amount.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FEB1680FE1000A21259 /* Amount.o */; }; - C1EA721C1680FE1800A21259 /* Application.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FEC1680FE1000A21259 /* Application.o */; }; - C1EA721D1680FE1800A21259 /* BitcoinUtil.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FED1680FE1000A21259 /* BitcoinUtil.o */; }; - C1EA721E1680FE1800A21259 /* CallRPC.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FEE1680FE1000A21259 /* CallRPC.o */; }; - C1EA721F1680FE1800A21259 /* CanonicalTXSet.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FEF1680FE1000A21259 /* CanonicalTXSet.o */; }; - C1EA72201680FE1800A21259 /* Config.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FF01680FE1000A21259 /* Config.o */; }; - C1EA72211680FE1800A21259 /* ConnectionPool.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FF11680FE1000A21259 /* ConnectionPool.o */; }; - C1EA72221680FE1800A21259 /* Contract.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FF21680FE1000A21259 /* Contract.o */; }; - C1EA72231680FE1800A21259 /* DBInit.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FF31680FE1000A21259 /* DBInit.o */; }; - C1EA72241680FE1800A21259 /* DeterministicKeys.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FF41680FE1000A21259 /* DeterministicKeys.o */; }; - C1EA72251680FE1800A21259 /* ECIES.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FF51680FE1000A21259 /* ECIES.o */; }; - C1EA72261680FE1800A21259 /* FeatureTable.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FF61680FE1000A21259 /* FeatureTable.o */; }; - C1EA72271680FE1800A21259 /* FieldNames.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FF71680FE1000A21259 /* FieldNames.o */; }; - C1EA72281680FE1800A21259 /* HashedObject.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FF81680FE1000A21259 /* HashedObject.o */; }; - C1EA72291680FE1800A21259 /* HTTPRequest.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FF91680FE1000A21259 /* HTTPRequest.o */; }; - C1EA722A1680FE1800A21259 /* HttpsClient.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FFA1680FE1000A21259 /* HttpsClient.o */; }; - C1EA722B1680FE1800A21259 /* InstanceCounter.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FFB1680FE1000A21259 /* InstanceCounter.o */; }; - C1EA722C1680FE1800A21259 /* Interpreter.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FFC1680FE1000A21259 /* Interpreter.o */; }; - C1EA722D1680FE1800A21259 /* JobQueue.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FFD1680FE1000A21259 /* JobQueue.o */; }; - C1EA722E1680FE1800A21259 /* Ledger.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FFE1680FE1000A21259 /* Ledger.o */; }; - C1EA722F1680FE1800A21259 /* LedgerAcquire.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA4FFF1680FE1000A21259 /* LedgerAcquire.o */; }; - C1EA72301680FE1800A21259 /* LedgerConsensus.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50001680FE1000A21259 /* LedgerConsensus.o */; }; - C1EA72311680FE1800A21259 /* LedgerEntrySet.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50011680FE1000A21259 /* LedgerEntrySet.o */; }; - C1EA72321680FE1800A21259 /* LedgerFormats.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50021680FE1000A21259 /* LedgerFormats.o */; }; - C1EA72331680FE1800A21259 /* LedgerHistory.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50031680FE1000A21259 /* LedgerHistory.o */; }; - C1EA72341680FE1800A21259 /* LedgerMaster.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50041680FE1000A21259 /* LedgerMaster.o */; }; - C1EA72351680FE1800A21259 /* LedgerProposal.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50051680FE1000A21259 /* LedgerProposal.o */; }; - C1EA72361680FE1800A21259 /* LedgerTiming.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50061680FE1000A21259 /* LedgerTiming.o */; }; - C1EA72371680FE1800A21259 /* LoadManager.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50071680FE1000A21259 /* LoadManager.o */; }; - C1EA72381680FE1800A21259 /* LoadMonitor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50081680FE1000A21259 /* LoadMonitor.o */; }; - C1EA72391680FE1800A21259 /* Log.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50091680FE1000A21259 /* Log.o */; }; - C1EA723A1680FE1800A21259 /* main.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA500A1680FE1000A21259 /* main.o */; }; - C1EA723B1680FE1800A21259 /* NetworkOPs.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA500B1680FE1000A21259 /* NetworkOPs.o */; }; - C1EA723C1680FE1800A21259 /* NicknameState.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA500C1680FE1000A21259 /* NicknameState.o */; }; - C1EA723D1680FE1800A21259 /* Offer.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA500D1680FE1000A21259 /* Offer.o */; }; - C1EA723E1680FE1800A21259 /* OfferCancelTransactor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA500E1680FE1000A21259 /* OfferCancelTransactor.o */; }; - C1EA723F1680FE1800A21259 /* OfferCreateTransactor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA500F1680FE1000A21259 /* OfferCreateTransactor.o */; }; - C1EA72401680FE1800A21259 /* Operation.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50101680FE1000A21259 /* Operation.o */; }; - C1EA72411680FE1800A21259 /* OrderBook.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50111680FE1000A21259 /* OrderBook.o */; }; - C1EA72421680FE1800A21259 /* OrderBookDB.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50121680FE1000A21259 /* OrderBookDB.o */; }; - C1EA72431680FE1800A21259 /* PackedMessage.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50131680FE1000A21259 /* PackedMessage.o */; }; - C1EA72441680FE1800A21259 /* ParameterTable.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50141680FE1000A21259 /* ParameterTable.o */; }; - C1EA72451680FE1800A21259 /* ParseSection.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50151680FE1000A21259 /* ParseSection.o */; }; - C1EA72461680FE1800A21259 /* Pathfinder.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50161680FE1000A21259 /* Pathfinder.o */; }; - C1EA72471680FE1800A21259 /* PaymentTransactor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50171680FE1000A21259 /* PaymentTransactor.o */; }; - C1EA72481680FE1800A21259 /* Peer.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50181680FE1000A21259 /* Peer.o */; }; - C1EA72491680FE1800A21259 /* PeerDoor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50191680FE1000A21259 /* PeerDoor.o */; }; - C1EA724A1680FE1800A21259 /* PlatRand.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA501A1680FE1000A21259 /* PlatRand.o */; }; - C1EA724B1680FE1800A21259 /* ProofOfWork.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA501B1680FE1000A21259 /* ProofOfWork.o */; }; - C1EA724C1680FE1800A21259 /* PubKeyCache.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA501C1680FE1000A21259 /* PubKeyCache.o */; }; - C1EA724D1680FE1800A21259 /* RangeSet.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA501D1680FE1000A21259 /* RangeSet.o */; }; - C1EA724E1680FE1800A21259 /* RegularKeySetTransactor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA501E1680FE1000A21259 /* RegularKeySetTransactor.o */; }; - C1EA724F1680FE1800A21259 /* rfc1751.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA501F1680FE1000A21259 /* rfc1751.o */; }; - C1EA72501680FE1800A21259 /* RippleAddress.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50201680FE1000A21259 /* RippleAddress.o */; }; - C1EA72511680FE1800A21259 /* RippleCalc.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50211680FE1000A21259 /* RippleCalc.o */; }; - C1EA72521680FE1800A21259 /* RippleState.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50221680FE1000A21259 /* RippleState.o */; }; - C1EA72531680FE1800A21259 /* rpc.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50231680FE1000A21259 /* rpc.o */; }; - C1EA72541680FE1800A21259 /* RPCDoor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50241680FE1000A21259 /* RPCDoor.o */; }; - C1EA72551680FE1800A21259 /* RPCErr.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50251680FE1000A21259 /* RPCErr.o */; }; - C1EA72561680FE1800A21259 /* RPCHandler.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50261680FE1000A21259 /* RPCHandler.o */; }; - C1EA72571680FE1800A21259 /* RPCServer.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50271680FE1000A21259 /* RPCServer.o */; }; - C1EA72581680FE1800A21259 /* ScriptData.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50281680FE1000A21259 /* ScriptData.o */; }; - C1EA72591680FE1800A21259 /* SerializedLedger.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50291680FE1000A21259 /* SerializedLedger.o */; }; - C1EA725A1680FE1800A21259 /* SerializedObject.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA502A1680FE1000A21259 /* SerializedObject.o */; }; - C1EA725B1680FE1800A21259 /* SerializedTransaction.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA502B1680FE1000A21259 /* SerializedTransaction.o */; }; - C1EA725C1680FE1800A21259 /* SerializedTypes.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA502C1680FE1000A21259 /* SerializedTypes.o */; }; - C1EA725D1680FE1800A21259 /* SerializedValidation.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA502D1680FE1000A21259 /* SerializedValidation.o */; }; - C1EA725E1680FE1800A21259 /* Serializer.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA502E1680FE1000A21259 /* Serializer.o */; }; - C1EA725F1680FE1800A21259 /* SHAMap.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA502F1680FE1000A21259 /* SHAMap.o */; }; - C1EA72601680FE1800A21259 /* SHAMapDiff.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50301680FE1000A21259 /* SHAMapDiff.o */; }; - C1EA72611680FE1800A21259 /* SHAMapNodes.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50311680FE1000A21259 /* SHAMapNodes.o */; }; - C1EA72621680FE1800A21259 /* SHAMapSync.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50321680FE1000A21259 /* SHAMapSync.o */; }; - C1EA72631680FE1800A21259 /* SNTPClient.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50331680FE1000A21259 /* SNTPClient.o */; }; - C1EA72641680FE1800A21259 /* Suppression.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50341680FE1000A21259 /* Suppression.o */; }; - C1EA72651680FE1800A21259 /* Transaction.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50351680FE1000A21259 /* Transaction.o */; }; - C1EA72661680FE1800A21259 /* TransactionEngine.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50361680FE1000A21259 /* TransactionEngine.o */; }; - C1EA72671680FE1800A21259 /* TransactionErr.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50371680FE1000A21259 /* TransactionErr.o */; }; - C1EA72681680FE1800A21259 /* TransactionFormats.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50381680FE1000A21259 /* TransactionFormats.o */; }; - C1EA72691680FE1800A21259 /* TransactionMaster.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50391680FE1000A21259 /* TransactionMaster.o */; }; - C1EA726A1680FE1800A21259 /* TransactionMeta.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA503A1680FE1000A21259 /* TransactionMeta.o */; }; - C1EA726B1680FE1800A21259 /* Transactor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA503B1680FE1000A21259 /* Transactor.o */; }; - C1EA726C1680FE1800A21259 /* TrustSetTransactor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA503C1680FE1000A21259 /* TrustSetTransactor.o */; }; - C1EA726D1680FE1800A21259 /* UniqueNodeList.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA503D1680FE1000A21259 /* UniqueNodeList.o */; }; - C1EA726E1680FE1800A21259 /* utils.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA503E1680FE1000A21259 /* utils.o */; }; - C1EA726F1680FE1800A21259 /* ValidationCollection.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA503F1680FE1000A21259 /* ValidationCollection.o */; }; - C1EA72701680FE1800A21259 /* Wallet.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50401680FE1000A21259 /* Wallet.o */; }; - C1EA72711680FE1800A21259 /* WalletAddTransactor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50411680FE1000A21259 /* WalletAddTransactor.o */; }; - C1EA72721680FE1800A21259 /* WSDoor.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50421680FE1000A21259 /* WSDoor.o */; }; - C1EA72731680FE1800A21259 /* base64.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50461680FE1000A21259 /* base64.o */; }; - C1EA72741680FE1800A21259 /* md5.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50481680FE1000A21259 /* md5.o */; }; - C1EA72751680FE1800A21259 /* data.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA504A1680FE1000A21259 /* data.o */; }; - C1EA72761680FE1800A21259 /* network_utilities.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA504B1680FE1000A21259 /* network_utilities.o */; }; - C1EA72771680FE1800A21259 /* hybi_header.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA504D1680FE1000A21259 /* hybi_header.o */; }; - C1EA72781680FE1800A21259 /* hybi_util.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA504E1680FE1000A21259 /* hybi_util.o */; }; - C1EA72791680FE1800A21259 /* sha1.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50501680FE1000A21259 /* sha1.o */; }; - C1EA727A1680FE1800A21259 /* uri.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50511680FE1000A21259 /* uri.o */; }; - C1EA727B1680FE1800A21259 /* ripple.pb.cc in Sources */ = {isa = PBXBuildFile; fileRef = C1EA50531680FE1000A21259 /* ripple.pb.cc */; }; - C1EA727C1680FE1800A21259 /* ripple.pb.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA50551680FE1000A21259 /* ripple.pb.o */; }; - C1EA727D1680FE1800A21259 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA505F1680FE1100A21259 /* main.cpp */; }; - C1EA76DE1680FE1900A21259 /* contextify.node in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA5A661680FE1200A21259 /* contextify.node */; }; - C1EA76DF1680FE1900A21259 /* contextify.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA5A6B1680FE1200A21259 /* contextify.o */; }; - C1EA79AD1680FE1900A21259 /* contextify.node in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA5E0F1680FE1300A21259 /* contextify.node */; }; - C1EA79AE1680FE1900A21259 /* contextify.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA5E141680FE1300A21259 /* contextify.o */; }; - C1EA82E81680FE1A00A21259 /* bufferutil.node in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA6E891680FE1500A21259 /* bufferutil.node */; }; - C1EA82E91680FE1A00A21259 /* bufferutil.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA6E8E1680FE1500A21259 /* bufferutil.o */; }; - C1EA82EA1680FE1A00A21259 /* validation.o in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA6E911680FE1500A21259 /* validation.o */; }; - C1EA82EB1680FE1A00A21259 /* validation.node in Frameworks */ = {isa = PBXBuildFile; fileRef = C1EA6E921680FE1500A21259 /* validation.node */; }; - C1EA83171680FE1A00A21259 /* database.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6EFE1680FE1500A21259 /* database.cpp */; }; - C1EA83181680FE1A00A21259 /* mysqldatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F011680FE1500A21259 /* mysqldatabase.cpp */; }; - C1EA83191680FE1A00A21259 /* sqlite3.c in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F031680FE1500A21259 /* sqlite3.c */; }; - C1EA831A1680FE1A00A21259 /* SqliteDatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F061680FE1500A21259 /* SqliteDatabase.cpp */; }; - C1EA831B1680FE1A00A21259 /* windatabase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F0A1680FE1500A21259 /* windatabase.cpp */; }; - C1EA831C1680FE1A00A21259 /* json_reader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F151680FE1500A21259 /* json_reader.cpp */; }; - C1EA831D1680FE1A00A21259 /* json_value.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F161680FE1500A21259 /* json_value.cpp */; }; - C1EA831E1680FE1A00A21259 /* json_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F181680FE1500A21259 /* json_writer.cpp */; }; - C1EA831F1680FE1A00A21259 /* AccountItems.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F1F1680FE1500A21259 /* AccountItems.cpp */; }; - C1EA83201680FE1A00A21259 /* AccountSetTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F211680FE1500A21259 /* AccountSetTransactor.cpp */; }; - C1EA83211680FE1A00A21259 /* AccountState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F231680FE1500A21259 /* AccountState.cpp */; }; - C1EA83221680FE1A00A21259 /* Amount.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F251680FE1500A21259 /* Amount.cpp */; }; - C1EA83231680FE1A00A21259 /* Application.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F261680FE1500A21259 /* Application.cpp */; }; - C1EA83241680FE1A00A21259 /* BitcoinUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F2A1680FE1500A21259 /* BitcoinUtil.cpp */; }; - C1EA83251680FE1A00A21259 /* CallRPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F2C1680FE1500A21259 /* CallRPC.cpp */; }; - C1EA83261680FE1A00A21259 /* CanonicalTXSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F2E1680FE1500A21259 /* CanonicalTXSet.cpp */; }; - C1EA83271680FE1A00A21259 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F301680FE1500A21259 /* Config.cpp */; }; - C1EA83281680FE1A00A21259 /* ConnectionPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F321680FE1500A21259 /* ConnectionPool.cpp */; }; - C1EA83291680FE1A00A21259 /* Contract.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F341680FE1500A21259 /* Contract.cpp */; }; - C1EA832A1680FE1A00A21259 /* DBInit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F361680FE1500A21259 /* DBInit.cpp */; }; - C1EA832B1680FE1A00A21259 /* DeterministicKeys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F371680FE1500A21259 /* DeterministicKeys.cpp */; }; - C1EA832C1680FE1A00A21259 /* ECIES.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F381680FE1500A21259 /* ECIES.cpp */; }; - C1EA832D1680FE1A00A21259 /* FeatureTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F391680FE1500A21259 /* FeatureTable.cpp */; }; - C1EA832E1680FE1A00A21259 /* FieldNames.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F3B1680FE1500A21259 /* FieldNames.cpp */; }; - C1EA832F1680FE1A00A21259 /* HashedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F3D1680FE1500A21259 /* HashedObject.cpp */; }; - C1EA83301680FE1A00A21259 /* HTTPRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F401680FE1500A21259 /* HTTPRequest.cpp */; }; - C1EA83311680FE1A00A21259 /* HttpsClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F421680FE1500A21259 /* HttpsClient.cpp */; }; - C1EA83321680FE1A00A21259 /* InstanceCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F441680FE1500A21259 /* InstanceCounter.cpp */; }; - C1EA83331680FE1A00A21259 /* Interpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F461680FE1500A21259 /* Interpreter.cpp */; }; - C1EA83341680FE1A00A21259 /* JobQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F481680FE1500A21259 /* JobQueue.cpp */; }; - C1EA83351680FE1A00A21259 /* Ledger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F4B1680FE1500A21259 /* Ledger.cpp */; }; - C1EA83361680FE1A00A21259 /* LedgerAcquire.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F4D1680FE1500A21259 /* LedgerAcquire.cpp */; }; - C1EA83371680FE1A00A21259 /* LedgerConsensus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F4F1680FE1500A21259 /* LedgerConsensus.cpp */; }; - C1EA83381680FE1A00A21259 /* LedgerEntrySet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F511680FE1500A21259 /* LedgerEntrySet.cpp */; }; - C1EA83391680FE1A00A21259 /* LedgerFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F531680FE1500A21259 /* LedgerFormats.cpp */; }; - C1EA833A1680FE1A00A21259 /* LedgerHistory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F551680FE1500A21259 /* LedgerHistory.cpp */; }; - C1EA833B1680FE1A00A21259 /* LedgerMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F571680FE1500A21259 /* LedgerMaster.cpp */; }; - C1EA833C1680FE1A00A21259 /* LedgerProposal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F591680FE1500A21259 /* LedgerProposal.cpp */; }; - C1EA833D1680FE1A00A21259 /* LedgerTiming.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F5B1680FE1500A21259 /* LedgerTiming.cpp */; }; - C1EA833E1680FE1A00A21259 /* LoadManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F5D1680FE1500A21259 /* LoadManager.cpp */; }; - C1EA833F1680FE1A00A21259 /* LoadMonitor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F5F1680FE1500A21259 /* LoadMonitor.cpp */; }; - C1EA83401680FE1A00A21259 /* Log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F611680FE1500A21259 /* Log.cpp */; }; - C1EA83411680FE1A00A21259 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F631680FE1500A21259 /* main.cpp */; }; - C1EA83421680FE1A00A21259 /* NetworkOPs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F641680FE1500A21259 /* NetworkOPs.cpp */; }; - C1EA83431680FE1A00A21259 /* NicknameState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F671680FE1500A21259 /* NicknameState.cpp */; }; - C1EA83441680FE1A00A21259 /* Offer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F691680FE1500A21259 /* Offer.cpp */; }; - C1EA83451680FE1A00A21259 /* OfferCancelTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F6B1680FE1500A21259 /* OfferCancelTransactor.cpp */; }; - C1EA83461680FE1A00A21259 /* OfferCreateTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F6D1680FE1500A21259 /* OfferCreateTransactor.cpp */; }; - C1EA83471680FE1A00A21259 /* Operation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F6F1680FE1500A21259 /* Operation.cpp */; }; - C1EA83481680FE1A00A21259 /* OrderBook.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F711680FE1500A21259 /* OrderBook.cpp */; }; - C1EA83491680FE1A00A21259 /* OrderBookDB.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F731680FE1500A21259 /* OrderBookDB.cpp */; }; - C1EA834A1680FE1A00A21259 /* PackedMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F751680FE1500A21259 /* PackedMessage.cpp */; }; - C1EA834B1680FE1A00A21259 /* ParameterTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F771680FE1500A21259 /* ParameterTable.cpp */; }; - C1EA834C1680FE1A00A21259 /* ParseSection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F791680FE1500A21259 /* ParseSection.cpp */; }; - C1EA834D1680FE1A00A21259 /* Pathfinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F7B1680FE1500A21259 /* Pathfinder.cpp */; }; - C1EA834E1680FE1A00A21259 /* PaymentTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F7D1680FE1500A21259 /* PaymentTransactor.cpp */; }; - C1EA834F1680FE1A00A21259 /* Peer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F7F1680FE1500A21259 /* Peer.cpp */; }; - C1EA83501680FE1A00A21259 /* PeerDoor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F811680FE1500A21259 /* PeerDoor.cpp */; }; - C1EA83511680FE1A00A21259 /* PlatRand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F831680FE1500A21259 /* PlatRand.cpp */; }; - C1EA83521680FE1A00A21259 /* ProofOfWork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F841680FE1500A21259 /* ProofOfWork.cpp */; }; - C1EA83531680FE1A00A21259 /* PubKeyCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F861680FE1500A21259 /* PubKeyCache.cpp */; }; - C1EA83541680FE1A00A21259 /* RangeSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F881680FE1500A21259 /* RangeSet.cpp */; }; - C1EA83551680FE1A00A21259 /* RegularKeySetTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F8A1680FE1500A21259 /* RegularKeySetTransactor.cpp */; }; - C1EA83561680FE1A00A21259 /* rfc1751.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F8C1680FE1500A21259 /* rfc1751.cpp */; }; - C1EA83571680FE1A00A21259 /* RippleAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F8F1680FE1500A21259 /* RippleAddress.cpp */; }; - C1EA83581680FE1A00A21259 /* RippleCalc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F911680FE1500A21259 /* RippleCalc.cpp */; }; - C1EA83591680FE1A00A21259 /* RippleState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F931680FE1500A21259 /* RippleState.cpp */; }; - C1EA835A1680FE1A00A21259 /* rpc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F951680FE1500A21259 /* rpc.cpp */; }; - C1EA835B1680FE1A00A21259 /* RPCDoor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F971680FE1500A21259 /* RPCDoor.cpp */; }; - C1EA835C1680FE1A00A21259 /* RPCErr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F991680FE1500A21259 /* RPCErr.cpp */; }; - C1EA835D1680FE1A00A21259 /* RPCHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F9B1680FE1500A21259 /* RPCHandler.cpp */; }; - C1EA835E1680FE1A00A21259 /* RPCServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6F9D1680FE1500A21259 /* RPCServer.cpp */; }; - C1EA835F1680FE1A00A21259 /* ScriptData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FA01680FE1500A21259 /* ScriptData.cpp */; }; - C1EA83601680FE1A00A21259 /* SerializedLedger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FA31680FE1500A21259 /* SerializedLedger.cpp */; }; - C1EA83611680FE1A00A21259 /* SerializedObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FA51680FE1500A21259 /* SerializedObject.cpp */; }; - C1EA83621680FE1A00A21259 /* SerializedTransaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FA71680FE1500A21259 /* SerializedTransaction.cpp */; }; - C1EA83631680FE1A00A21259 /* SerializedTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FA91680FE1500A21259 /* SerializedTypes.cpp */; }; - C1EA83641680FE1A00A21259 /* SerializedValidation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FAB1680FE1500A21259 /* SerializedValidation.cpp */; }; - C1EA83651680FE1A00A21259 /* Serializer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FAE1680FE1500A21259 /* Serializer.cpp */; }; - C1EA83661680FE1A00A21259 /* SHAMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FB01680FE1500A21259 /* SHAMap.cpp */; }; - C1EA83671680FE1A00A21259 /* SHAMapDiff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FB21680FE1500A21259 /* SHAMapDiff.cpp */; }; - C1EA83681680FE1A00A21259 /* SHAMapNodes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FB31680FE1500A21259 /* SHAMapNodes.cpp */; }; - C1EA83691680FE1A00A21259 /* SHAMapSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FB41680FE1500A21259 /* SHAMapSync.cpp */; }; - C1EA836A1680FE1A00A21259 /* SNTPClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FB61680FE1500A21259 /* SNTPClient.cpp */; }; - C1EA836B1680FE1A00A21259 /* Suppression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FB81680FE1500A21259 /* Suppression.cpp */; }; - C1EA836C1680FE1A00A21259 /* Transaction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FBB1680FE1500A21259 /* Transaction.cpp */; }; - C1EA836D1680FE1A00A21259 /* TransactionEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FBD1680FE1500A21259 /* TransactionEngine.cpp */; }; - C1EA836E1680FE1A00A21259 /* TransactionErr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FBF1680FE1500A21259 /* TransactionErr.cpp */; }; - C1EA836F1680FE1A00A21259 /* TransactionFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FC11680FE1500A21259 /* TransactionFormats.cpp */; }; - C1EA83701680FE1A00A21259 /* TransactionMaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FC31680FE1500A21259 /* TransactionMaster.cpp */; }; - C1EA83711680FE1A00A21259 /* TransactionMeta.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FC51680FE1500A21259 /* TransactionMeta.cpp */; }; - C1EA83721680FE1A00A21259 /* Transactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FC71680FE1500A21259 /* Transactor.cpp */; }; - C1EA83731680FE1A00A21259 /* TrustSetTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FC91680FE1500A21259 /* TrustSetTransactor.cpp */; }; - C1EA83741680FE1A00A21259 /* UniqueNodeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FCD1680FE1500A21259 /* UniqueNodeList.cpp */; }; - C1EA83751680FE1A00A21259 /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FCF1680FE1500A21259 /* utils.cpp */; }; - C1EA83761680FE1A00A21259 /* ValidationCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FD11680FE1500A21259 /* ValidationCollection.cpp */; }; - C1EA83771680FE1A00A21259 /* Wallet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FD41680FE1500A21259 /* Wallet.cpp */; }; - C1EA83781680FE1A00A21259 /* WalletAddTransactor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FD61680FE1500A21259 /* WalletAddTransactor.cpp */; }; - C1EA83791680FE1A00A21259 /* WSDoor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FD91680FE1500A21259 /* WSDoor.cpp */; }; - C1EA837A1680FE1A00A21259 /* broadcast_server_tls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA6FE61680FE1500A21259 /* broadcast_server_tls.cpp */; }; - C1EA839A1680FE1A00A21259 /* chat_client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70371680FE1500A21259 /* chat_client.cpp */; }; - C1EA839B1680FE1A00A21259 /* chat_client_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70391680FE1500A21259 /* chat_client_handler.cpp */; }; - C1EA839E1680FE1A00A21259 /* chat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70401680FE1500A21259 /* chat.cpp */; }; - C1EA839F1680FE1A00A21259 /* chat_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70421680FE1500A21259 /* chat_server.cpp */; }; - C1EA83A11680FE1A00A21259 /* concurrent_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70481680FE1500A21259 /* concurrent_server.cpp */; }; - C1EA83A31680FE1A00A21259 /* echo_client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA704C1680FE1500A21259 /* echo_client.cpp */; }; - C1EA83A51680FE1A00A21259 /* echo_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70511680FE1500A21259 /* echo_server.cpp */; }; - C1EA83A71680FE1A00A21259 /* echo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70551680FE1500A21259 /* echo.cpp */; }; - C1EA83A81680FE1A00A21259 /* echo_server_tls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70581680FE1500A21259 /* echo_server_tls.cpp */; }; - C1EA83AA1680FE1A00A21259 /* fuzzing_client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA705C1680FE1500A21259 /* fuzzing_client.cpp */; }; - C1EA83AC1680FE1A00A21259 /* fuzzing_server_tls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70601680FE1500A21259 /* fuzzing_server_tls.cpp */; }; - C1EA83B01680FE1A00A21259 /* stress_client.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70651680FE1500A21259 /* stress_client.cpp */; }; - C1EA83B21680FE1A00A21259 /* telemetry_server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70691680FE1500A21259 /* telemetry_server.cpp */; }; - C1EA83B31680FE1A00A21259 /* case.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA706B1680FE1500A21259 /* case.cpp */; }; - C1EA83B41680FE1A00A21259 /* generic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA706D1680FE1500A21259 /* generic.cpp */; }; - C1EA83B61680FE1A00A21259 /* request.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70711680FE1500A21259 /* request.cpp */; }; - C1EA83B71680FE1A00A21259 /* stress_aggregate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70741680FE1500A21259 /* stress_aggregate.cpp */; }; - C1EA83B81680FE1A00A21259 /* stress_handler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70761680FE1500A21259 /* stress_handler.cpp */; }; - C1EA83BD1680FE1A00A21259 /* wscmd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA707E1680FE1500A21259 /* wscmd.cpp */; }; - C1EA83BE1680FE1A00A21259 /* wsperf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70811680FE1500A21259 /* wsperf.cpp */; }; - C1EA83C01680FE1A00A21259 /* base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70891680FE1500A21259 /* base64.cpp */; }; - C1EA83C11680FE1A00A21259 /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70941680FE1500A21259 /* md5.c */; }; - C1EA83C21680FE1A00A21259 /* data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70991680FE1500A21259 /* data.cpp */; }; - C1EA83C31680FE1A00A21259 /* network_utilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA709B1680FE1500A21259 /* network_utilities.cpp */; }; - C1EA83C41680FE1A00A21259 /* hybi_header.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA709F1680FE1500A21259 /* hybi_header.cpp */; }; - C1EA83C51680FE1A00A21259 /* hybi_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70A21680FE1500A21259 /* hybi_util.cpp */; }; - C1EA83C61680FE1A00A21259 /* blank_rng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70A61680FE1500A21259 /* blank_rng.cpp */; }; - C1EA83C71680FE1A00A21259 /* boost_rng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70A81680FE1500A21259 /* boost_rng.cpp */; }; - C1EA83C91680FE1A00A21259 /* sha.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70B21680FE1500A21259 /* sha.cpp */; }; - C1EA83CA1680FE1A00A21259 /* sha1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70B31680FE1500A21259 /* sha1.cpp */; }; - C1EA83CB1680FE1A00A21259 /* shacmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70B51680FE1500A21259 /* shacmp.cpp */; }; - C1EA83CC1680FE1A00A21259 /* shatest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70B61680FE1500A21259 /* shatest.cpp */; }; - C1EA83CD1680FE1A00A21259 /* uri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70C11680FE1500A21259 /* uri.cpp */; }; - C1EA83CE1680FE1A00A21259 /* hybi_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70C91680FE1500A21259 /* hybi_util.cpp */; }; - C1EA83CF1680FE1A00A21259 /* logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70CA1680FE1500A21259 /* logging.cpp */; }; - C1EA83D11680FE1A00A21259 /* parsing.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70CC1680FE1500A21259 /* parsing.cpp */; }; - C1EA83D21680FE1A00A21259 /* uri_perf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1EA70CD1680FE1500A21259 /* uri_perf.cpp */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - C1EA84A11680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B6DF1C691434A7A30029A1B1; - remoteInfo = "WebSocket++ Static Library"; - }; - C1EA84A31680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B6DF1C721434A8280029A1B1; - remoteInfo = "WebSocket++ Dynamic Library"; - }; - C1EA84A51680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B6DF1CD11435ED910029A1B1; - remoteInfo = echo_server; - }; - C1EA84A71680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B682887D143745F2002BA48B; - remoteInfo = chat_client; - }; - C1EA84A91680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B6CF181C1437C397009295BE; - remoteInfo = echo_client; - }; - C1EA84AB1680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B6FE8D4F14730AE900B32547; - remoteInfo = policy_test; - }; - C1EA84AD1680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B663884B1487D73200DDAE13; - remoteInfo = echo_server_tls; - }; - C1EA84AF1680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B6732458148FAEEB00FC2B04; - remoteInfo = fuzzing_server; - }; - C1EA84B11680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B6732471148FB0FC00FC2B04; - remoteInfo = fuzzing_client; - }; - C1EA84B31680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B67324891491A16500FC2B04; - remoteInfo = broadcast_server; - }; - C1EA84B51680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B67324A21491A7F100FC2B04; - remoteInfo = stress_client; - }; - C1EA84B71680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B61A51BF14DC271900456432; - remoteInfo = concurrent_server; - }; - C1EA84B91680FE1B00A21259 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = B6E7E7731505532E00394909; - remoteInfo = wsperf; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - C1EA4FC61680FDCA00A21259 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - C1EA4FCF1680FDCA00A21259 /* NewCoin.1 in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - C1EA4FC81680FDCA00A21259 /* NewCoin */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = NewCoin; sourceTree = BUILT_PRODUCTS_DIR; }; - C1EA4FCC1680FDCA00A21259 /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; - C1EA4FCE1680FDCA00A21259 /* NewCoin.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = NewCoin.1; sourceTree = ""; }; - C1EA4FD61680FE1000A21259 /* network-build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "network-build"; sourceTree = ""; }; - C1EA4FD71680FE1000A21259 /* network-init */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "network-init"; sourceTree = ""; }; - C1EA4FD81680FE1000A21259 /* network-restart */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "network-restart"; sourceTree = ""; }; - C1EA4FD91680FE1000A21259 /* network-start */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "network-start"; sourceTree = ""; }; - C1EA4FDA1680FE1000A21259 /* network-stop */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "network-stop"; sourceTree = ""; }; - C1EA4FDB1680FE1000A21259 /* network-update */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "network-update"; sourceTree = ""; }; - C1EA4FDC1680FE1000A21259 /* nx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = nx; sourceTree = ""; }; - C1EA4FE01680FE1000A21259 /* database.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = database.o; sourceTree = ""; }; - C1EA4FE11680FE1000A21259 /* sqlite3.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = sqlite3.o; sourceTree = ""; }; - C1EA4FE21680FE1000A21259 /* SqliteDatabase.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SqliteDatabase.o; sourceTree = ""; }; - C1EA4FE41680FE1000A21259 /* json_reader.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = json_reader.o; sourceTree = ""; }; - C1EA4FE51680FE1000A21259 /* json_value.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = json_value.o; sourceTree = ""; }; - C1EA4FE61680FE1000A21259 /* json_writer.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = json_writer.o; sourceTree = ""; }; - C1EA4FE81680FE1000A21259 /* AccountItems.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = AccountItems.o; sourceTree = ""; }; - C1EA4FE91680FE1000A21259 /* AccountSetTransactor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = AccountSetTransactor.o; sourceTree = ""; }; - C1EA4FEA1680FE1000A21259 /* AccountState.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = AccountState.o; sourceTree = ""; }; - C1EA4FEB1680FE1000A21259 /* Amount.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Amount.o; sourceTree = ""; }; - C1EA4FEC1680FE1000A21259 /* Application.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Application.o; sourceTree = ""; }; - C1EA4FED1680FE1000A21259 /* BitcoinUtil.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = BitcoinUtil.o; sourceTree = ""; }; - C1EA4FEE1680FE1000A21259 /* CallRPC.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = CallRPC.o; sourceTree = ""; }; - C1EA4FEF1680FE1000A21259 /* CanonicalTXSet.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = CanonicalTXSet.o; sourceTree = ""; }; - C1EA4FF01680FE1000A21259 /* Config.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Config.o; sourceTree = ""; }; - C1EA4FF11680FE1000A21259 /* ConnectionPool.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = ConnectionPool.o; sourceTree = ""; }; - C1EA4FF21680FE1000A21259 /* Contract.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Contract.o; sourceTree = ""; }; - C1EA4FF31680FE1000A21259 /* DBInit.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = DBInit.o; sourceTree = ""; }; - C1EA4FF41680FE1000A21259 /* DeterministicKeys.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = DeterministicKeys.o; sourceTree = ""; }; - C1EA4FF51680FE1000A21259 /* ECIES.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = ECIES.o; sourceTree = ""; }; - C1EA4FF61680FE1000A21259 /* FeatureTable.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = FeatureTable.o; sourceTree = ""; }; - C1EA4FF71680FE1000A21259 /* FieldNames.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = FieldNames.o; sourceTree = ""; }; - C1EA4FF81680FE1000A21259 /* HashedObject.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = HashedObject.o; sourceTree = ""; }; - C1EA4FF91680FE1000A21259 /* HTTPRequest.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = HTTPRequest.o; sourceTree = ""; }; - C1EA4FFA1680FE1000A21259 /* HttpsClient.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = HttpsClient.o; sourceTree = ""; }; - C1EA4FFB1680FE1000A21259 /* InstanceCounter.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = InstanceCounter.o; sourceTree = ""; }; - C1EA4FFC1680FE1000A21259 /* Interpreter.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Interpreter.o; sourceTree = ""; }; - C1EA4FFD1680FE1000A21259 /* JobQueue.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = JobQueue.o; sourceTree = ""; }; - C1EA4FFE1680FE1000A21259 /* Ledger.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Ledger.o; sourceTree = ""; }; - C1EA4FFF1680FE1000A21259 /* LedgerAcquire.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = LedgerAcquire.o; sourceTree = ""; }; - C1EA50001680FE1000A21259 /* LedgerConsensus.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = LedgerConsensus.o; sourceTree = ""; }; - C1EA50011680FE1000A21259 /* LedgerEntrySet.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = LedgerEntrySet.o; sourceTree = ""; }; - C1EA50021680FE1000A21259 /* LedgerFormats.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = LedgerFormats.o; sourceTree = ""; }; - C1EA50031680FE1000A21259 /* LedgerHistory.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = LedgerHistory.o; sourceTree = ""; }; - C1EA50041680FE1000A21259 /* LedgerMaster.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = LedgerMaster.o; sourceTree = ""; }; - C1EA50051680FE1000A21259 /* LedgerProposal.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = LedgerProposal.o; sourceTree = ""; }; - C1EA50061680FE1000A21259 /* LedgerTiming.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = LedgerTiming.o; sourceTree = ""; }; - C1EA50071680FE1000A21259 /* LoadManager.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = LoadManager.o; sourceTree = ""; }; - C1EA50081680FE1000A21259 /* LoadMonitor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = LoadMonitor.o; sourceTree = ""; }; - C1EA50091680FE1000A21259 /* Log.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Log.o; sourceTree = ""; }; - C1EA500A1680FE1000A21259 /* main.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = main.o; sourceTree = ""; }; - C1EA500B1680FE1000A21259 /* NetworkOPs.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = NetworkOPs.o; sourceTree = ""; }; - C1EA500C1680FE1000A21259 /* NicknameState.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = NicknameState.o; sourceTree = ""; }; - C1EA500D1680FE1000A21259 /* Offer.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Offer.o; sourceTree = ""; }; - C1EA500E1680FE1000A21259 /* OfferCancelTransactor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = OfferCancelTransactor.o; sourceTree = ""; }; - C1EA500F1680FE1000A21259 /* OfferCreateTransactor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = OfferCreateTransactor.o; sourceTree = ""; }; - C1EA50101680FE1000A21259 /* Operation.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Operation.o; sourceTree = ""; }; - C1EA50111680FE1000A21259 /* OrderBook.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = OrderBook.o; sourceTree = ""; }; - C1EA50121680FE1000A21259 /* OrderBookDB.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = OrderBookDB.o; sourceTree = ""; }; - C1EA50131680FE1000A21259 /* PackedMessage.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = PackedMessage.o; sourceTree = ""; }; - C1EA50141680FE1000A21259 /* ParameterTable.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = ParameterTable.o; sourceTree = ""; }; - C1EA50151680FE1000A21259 /* ParseSection.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = ParseSection.o; sourceTree = ""; }; - C1EA50161680FE1000A21259 /* Pathfinder.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Pathfinder.o; sourceTree = ""; }; - C1EA50171680FE1000A21259 /* PaymentTransactor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = PaymentTransactor.o; sourceTree = ""; }; - C1EA50181680FE1000A21259 /* Peer.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Peer.o; sourceTree = ""; }; - C1EA50191680FE1000A21259 /* PeerDoor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = PeerDoor.o; sourceTree = ""; }; - C1EA501A1680FE1000A21259 /* PlatRand.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = PlatRand.o; sourceTree = ""; }; - C1EA501B1680FE1000A21259 /* ProofOfWork.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = ProofOfWork.o; sourceTree = ""; }; - C1EA501C1680FE1000A21259 /* PubKeyCache.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = PubKeyCache.o; sourceTree = ""; }; - C1EA501D1680FE1000A21259 /* RangeSet.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = RangeSet.o; sourceTree = ""; }; - C1EA501E1680FE1000A21259 /* RegularKeySetTransactor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = RegularKeySetTransactor.o; sourceTree = ""; }; - C1EA501F1680FE1000A21259 /* rfc1751.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = rfc1751.o; sourceTree = ""; }; - C1EA50201680FE1000A21259 /* RippleAddress.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = RippleAddress.o; sourceTree = ""; }; - C1EA50211680FE1000A21259 /* RippleCalc.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = RippleCalc.o; sourceTree = ""; }; - C1EA50221680FE1000A21259 /* RippleState.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = RippleState.o; sourceTree = ""; }; - C1EA50231680FE1000A21259 /* rpc.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = rpc.o; sourceTree = ""; }; - C1EA50241680FE1000A21259 /* RPCDoor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = RPCDoor.o; sourceTree = ""; }; - C1EA50251680FE1000A21259 /* RPCErr.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = RPCErr.o; sourceTree = ""; }; - C1EA50261680FE1000A21259 /* RPCHandler.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = RPCHandler.o; sourceTree = ""; }; - C1EA50271680FE1000A21259 /* RPCServer.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = RPCServer.o; sourceTree = ""; }; - C1EA50281680FE1000A21259 /* ScriptData.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = ScriptData.o; sourceTree = ""; }; - C1EA50291680FE1000A21259 /* SerializedLedger.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SerializedLedger.o; sourceTree = ""; }; - C1EA502A1680FE1000A21259 /* SerializedObject.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SerializedObject.o; sourceTree = ""; }; - C1EA502B1680FE1000A21259 /* SerializedTransaction.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SerializedTransaction.o; sourceTree = ""; }; - C1EA502C1680FE1000A21259 /* SerializedTypes.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SerializedTypes.o; sourceTree = ""; }; - C1EA502D1680FE1000A21259 /* SerializedValidation.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SerializedValidation.o; sourceTree = ""; }; - C1EA502E1680FE1000A21259 /* Serializer.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Serializer.o; sourceTree = ""; }; - C1EA502F1680FE1000A21259 /* SHAMap.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SHAMap.o; sourceTree = ""; }; - C1EA50301680FE1000A21259 /* SHAMapDiff.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SHAMapDiff.o; sourceTree = ""; }; - C1EA50311680FE1000A21259 /* SHAMapNodes.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SHAMapNodes.o; sourceTree = ""; }; - C1EA50321680FE1000A21259 /* SHAMapSync.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SHAMapSync.o; sourceTree = ""; }; - C1EA50331680FE1000A21259 /* SNTPClient.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = SNTPClient.o; sourceTree = ""; }; - C1EA50341680FE1000A21259 /* Suppression.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Suppression.o; sourceTree = ""; }; - C1EA50351680FE1000A21259 /* Transaction.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Transaction.o; sourceTree = ""; }; - C1EA50361680FE1000A21259 /* TransactionEngine.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = TransactionEngine.o; sourceTree = ""; }; - C1EA50371680FE1000A21259 /* TransactionErr.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = TransactionErr.o; sourceTree = ""; }; - C1EA50381680FE1000A21259 /* TransactionFormats.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = TransactionFormats.o; sourceTree = ""; }; - C1EA50391680FE1000A21259 /* TransactionMaster.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = TransactionMaster.o; sourceTree = ""; }; - C1EA503A1680FE1000A21259 /* TransactionMeta.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = TransactionMeta.o; sourceTree = ""; }; - C1EA503B1680FE1000A21259 /* Transactor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Transactor.o; sourceTree = ""; }; - C1EA503C1680FE1000A21259 /* TrustSetTransactor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = TrustSetTransactor.o; sourceTree = ""; }; - C1EA503D1680FE1000A21259 /* UniqueNodeList.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = UniqueNodeList.o; sourceTree = ""; }; - C1EA503E1680FE1000A21259 /* utils.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = utils.o; sourceTree = ""; }; - C1EA503F1680FE1000A21259 /* ValidationCollection.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = ValidationCollection.o; sourceTree = ""; }; - C1EA50401680FE1000A21259 /* Wallet.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = Wallet.o; sourceTree = ""; }; - C1EA50411680FE1000A21259 /* WalletAddTransactor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = WalletAddTransactor.o; sourceTree = ""; }; - C1EA50421680FE1000A21259 /* WSDoor.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = WSDoor.o; sourceTree = ""; }; - C1EA50461680FE1000A21259 /* base64.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = base64.o; sourceTree = ""; }; - C1EA50481680FE1000A21259 /* md5.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = md5.o; sourceTree = ""; }; - C1EA504A1680FE1000A21259 /* data.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = data.o; sourceTree = ""; }; - C1EA504B1680FE1000A21259 /* network_utilities.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = network_utilities.o; sourceTree = ""; }; - C1EA504D1680FE1000A21259 /* hybi_header.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = hybi_header.o; sourceTree = ""; }; - C1EA504E1680FE1000A21259 /* hybi_util.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = hybi_util.o; sourceTree = ""; }; - C1EA50501680FE1000A21259 /* sha1.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = sha1.o; sourceTree = ""; }; - C1EA50511680FE1000A21259 /* uri.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = uri.o; sourceTree = ""; }; - C1EA50531680FE1000A21259 /* ripple.pb.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ripple.pb.cc; sourceTree = ""; }; - C1EA50541680FE1000A21259 /* ripple.pb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ripple.pb.h; sourceTree = ""; }; - C1EA50551680FE1000A21259 /* ripple.pb.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = ripple.pb.o; sourceTree = ""; }; - C1EA50561680FE1000A21259 /* rippled */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = rippled; sourceTree = ""; }; - C1EA50581680FE1000A21259 /* cointoss.nsi */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cointoss.nsi; sourceTree = ""; }; - C1EA50591680FE1000A21259 /* newcoind.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = newcoind.cfg; sourceTree = ""; }; - C1EA505A1680FE1100A21259 /* start CoinToss.bat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "start CoinToss.bat"; sourceTree = ""; }; - C1EA505B1680FE1100A21259 /* validators.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = validators.txt; sourceTree = ""; }; - C1EA505C1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = LICENSE; path = ../../LICENSE; sourceTree = ""; }; - C1EA505F1680FE1100A21259 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; - C1EA50601680FE1100A21259 /* NewCoin.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = NewCoin.1; sourceTree = ""; }; - C1EA50611680FE1100A21259 /* NewCoin.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = NewCoin.xcodeproj; sourceTree = ""; }; - C1EA50641680FE1100A21259 /* NewCoin.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; name = NewCoin.1; path = ../../NewCoin.1; sourceTree = ""; }; - C1EA50651680FE1100A21259 /* newcoin.sln */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = newcoin.sln; path = ../../newcoin.sln; sourceTree = ""; }; - C1EA50661680FE1100A21259 /* newcoin.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = newcoin.vcxproj; path = ../../newcoin.vcxproj; sourceTree = ""; }; - C1EA50671680FE1100A21259 /* newcoin.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = newcoin.vcxproj.filters; path = ../../newcoin.vcxproj.filters; sourceTree = ""; }; - C1EA506A1680FE1100A21259 /* buster */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = buster; sourceTree = ""; }; - C1EA506B1680FE1100A21259 /* buster-autotest */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "buster-autotest"; sourceTree = ""; }; - C1EA506C1680FE1100A21259 /* buster-server */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "buster-server"; sourceTree = ""; }; - C1EA506D1680FE1100A21259 /* buster-static */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "buster-static"; sourceTree = ""; }; - C1EA506E1680FE1100A21259 /* buster-test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "buster-test"; sourceTree = ""; }; - C1EA506F1680FE1100A21259 /* webpack */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = webpack; sourceTree = ""; }; - C1EA50701680FE1100A21259 /* wscat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wscat; sourceTree = ""; }; - C1EA50721680FE1100A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA50731680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA50741680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA50761680FE1100A21259 /* async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = async.js; sourceTree = ""; }; - C1EA50771680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA50781680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA50791680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA507A1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA507C1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA507E1680FE1100A21259 /* buster */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = buster; sourceTree = ""; }; - C1EA507F1680FE1100A21259 /* buster-autotest */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "buster-autotest"; sourceTree = ""; }; - C1EA50801680FE1100A21259 /* buster-headless */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "buster-headless"; sourceTree = ""; }; - C1EA50811680FE1100A21259 /* buster-server */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "buster-server"; sourceTree = ""; }; - C1EA50821680FE1100A21259 /* buster-static */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "buster-static"; sourceTree = ""; }; - C1EA50831680FE1100A21259 /* buster-test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "buster-test"; sourceTree = ""; }; - C1EA50841680FE1100A21259 /* build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = build; sourceTree = ""; }; - C1EA50851680FE1100A21259 /* jsTestDriver.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsTestDriver.conf; sourceTree = ""; }; - C1EA50881680FE1100A21259 /* browser-wiring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "browser-wiring.js"; sourceTree = ""; }; - C1EA50891680FE1100A21259 /* buster-wiring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-wiring.js"; sourceTree = ""; }; - C1EA508A1680FE1100A21259 /* capture-server-wiring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "capture-server-wiring.js"; sourceTree = ""; }; - C1EA508B1680FE1100A21259 /* framework-extension.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "framework-extension.js"; sourceTree = ""; }; - C1EA508C1680FE1100A21259 /* wiring-extension.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "wiring-extension.js"; sourceTree = ""; }; - C1EA508D1680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA50901680FE1100A21259 /* buster-static */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "buster-static"; sourceTree = ""; }; - C1EA50921680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA50931680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA50941680FE1100A21259 /* jsl.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsl.conf; sourceTree = ""; }; - C1EA50951680FE1100A21259 /* jsTestDriver.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsTestDriver.conf; sourceTree = ""; }; - C1EA50981680FE1100A21259 /* expect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = expect.js; sourceTree = ""; }; - C1EA50991680FE1100A21259 /* buster-assertions.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-assertions.js"; sourceTree = ""; }; - C1EA509A1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA509B1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA509C1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA509D1680FE1100A21259 /* run-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "run-tests"; sourceTree = ""; }; - C1EA50A01680FE1100A21259 /* expect-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "expect-test.js"; sourceTree = ""; }; - C1EA50A11680FE1100A21259 /* buster-assertions-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-assertions-test.js"; sourceTree = ""; }; - C1EA50A21680FE1100A21259 /* buster-assertions-util-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-assertions-util-test.js"; sourceTree = ""; }; - C1EA50A31680FE1100A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA50A41680FE1100A21259 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = test.html; sourceTree = ""; }; - C1EA50A61680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA50A71680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA50A81680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA50AA1680FE1100A21259 /* buster-autotest.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-autotest.js"; sourceTree = ""; }; - C1EA50AB1680FE1100A21259 /* on-interrupt.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "on-interrupt.js"; sourceTree = ""; }; - C1EA50AE1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA50AF1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA50B01680FE1100A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA50B11680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA50B31680FE1100A21259 /* buster-glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-glob.js"; sourceTree = ""; }; - C1EA50B61680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA50B71680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA50B91680FE1100A21259 /* g.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = g.js; sourceTree = ""; }; - C1EA50BA1680FE1100A21259 /* usr-local.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "usr-local.js"; sourceTree = ""; }; - C1EA50BB1680FE1100A21259 /* glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glob.js; sourceTree = ""; }; - C1EA50BC1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA50BF1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA50C01680FE1100A21259 /* graceful-fs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "graceful-fs.js"; sourceTree = ""; }; - C1EA50C11680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA50C21680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA50C31680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA50C51680FE1100A21259 /* open.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = open.js; sourceTree = ""; }; - C1EA50C71680FE1100A21259 /* inherits.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inherits.js; sourceTree = ""; }; - C1EA50C81680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA50C91680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA50CB1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA50CC1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA50CD1680FE1100A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA50D01680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA50D11680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA50D31680FE1100A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA50D41680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA50D51680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA50D61680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA50D81680FE1100A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA50DA1680FE1100A21259 /* bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bench.js; sourceTree = ""; }; - C1EA50DB1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA50DC1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA50DD1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA50DE1680FE1100A21259 /* sigmund.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sigmund.js; sourceTree = ""; }; - C1EA50E01680FE1100A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA50E11680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA50E21680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA50E41680FE1100A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA50E51680FE1100A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA50E61680FE1100A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA50E71680FE1100A21259 /* defaults.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = defaults.js; sourceTree = ""; }; - C1EA50E81680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA50E91680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA50EB1680FE1100A21259 /* 00-setup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "00-setup.js"; sourceTree = ""; }; - C1EA50EC1680FE1100A21259 /* bash-comparison.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bash-comparison.js"; sourceTree = ""; }; - C1EA50ED1680FE1100A21259 /* cwd-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "cwd-test.js"; sourceTree = ""; }; - C1EA50EE1680FE1100A21259 /* mark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mark.js; sourceTree = ""; }; - C1EA50EF1680FE1100A21259 /* pause-resume.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pause-resume.js"; sourceTree = ""; }; - C1EA50F01680FE1100A21259 /* root-nomount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "root-nomount.js"; sourceTree = ""; }; - C1EA50F11680FE1100A21259 /* root.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = root.js; sourceTree = ""; }; - C1EA50F21680FE1100A21259 /* zz-cleanup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "zz-cleanup.js"; sourceTree = ""; }; - C1EA50F31680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA50F41680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA50F61680FE1100A21259 /* buster-glob-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-glob-test.js"; sourceTree = ""; }; - C1EA50F81680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA50F91680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA50FA1680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA50FC1680FE1100A21259 /* centos.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = centos.txt; sourceTree = ""; }; - C1EA50FD1680FE1100A21259 /* osx.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = osx.txt; sourceTree = ""; }; - C1EA50FE1680FE1100A21259 /* ubuntu.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ubuntu.txt; sourceTree = ""; }; - C1EA50FF1680FE1100A21259 /* windows.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = windows.txt; sourceTree = ""; }; - C1EA51001680FE1100A21259 /* check-fs-watch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "check-fs-watch.js"; sourceTree = ""; }; - C1EA51021680FE1100A21259 /* async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = async.js; sourceTree = ""; }; - C1EA51031680FE1100A21259 /* change-tracker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "change-tracker.js"; sourceTree = ""; }; - C1EA51041680FE1100A21259 /* fs-filtered.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "fs-filtered.js"; sourceTree = ""; }; - C1EA51051680FE1100A21259 /* fs-watch-tree.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "fs-watch-tree.js"; sourceTree = ""; }; - C1EA51061680FE1100A21259 /* fs-watcher.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "fs-watcher.js"; sourceTree = ""; }; - C1EA51071680FE1100A21259 /* tree-watcher.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "tree-watcher.js"; sourceTree = ""; }; - C1EA51081680FE1100A21259 /* walk-tree.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "walk-tree.js"; sourceTree = ""; }; - C1EA51091680FE1100A21259 /* watch-tree-generic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "watch-tree-generic.js"; sourceTree = ""; }; - C1EA510A1680FE1100A21259 /* watch-tree-unix.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "watch-tree-unix.js"; sourceTree = ""; }; - C1EA510B1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA510C1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA510E1680FE1100A21259 /* change-tracker-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "change-tracker-test.js"; sourceTree = ""; }; - C1EA510F1680FE1100A21259 /* fs-filtered-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "fs-filtered-test.js"; sourceTree = ""; }; - C1EA51101680FE1100A21259 /* fs-watcher-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "fs-watcher-test.js"; sourceTree = ""; }; - C1EA51111680FE1100A21259 /* helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = helper.js; sourceTree = ""; }; - C1EA51121680FE1100A21259 /* os-watch-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "os-watch-helper.js"; sourceTree = ""; }; - C1EA51131680FE1100A21259 /* tree-watcher-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "tree-watcher-test.js"; sourceTree = ""; }; - C1EA51141680FE1100A21259 /* walk-tree-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "walk-tree-test.js"; sourceTree = ""; }; - C1EA51151680FE1100A21259 /* watch-tree-unix-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "watch-tree-unix-test.js"; sourceTree = ""; }; - C1EA51161680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA51171680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA51191680FE1100A21259 /* buster-autotest-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-autotest-test.js"; sourceTree = ""; }; - C1EA511B1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA511C1680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA511D1680FE1100A21259 /* jsTestDriver.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsTestDriver.conf; sourceTree = ""; }; - C1EA511F1680FE1100A21259 /* buster-core.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-core.js"; sourceTree = ""; }; - C1EA51201680FE1100A21259 /* buster-event-emitter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-event-emitter.js"; sourceTree = ""; }; - C1EA51211680FE1100A21259 /* define-version-getter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "define-version-getter.js"; sourceTree = ""; }; - C1EA51221680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA51231680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA51241680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA51251680FE1100A21259 /* run-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "run-tests"; sourceTree = ""; }; - C1EA51271680FE1100A21259 /* buster-core-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-core-test.js"; sourceTree = ""; }; - C1EA51281680FE1100A21259 /* buster-event-emitter-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-event-emitter-test.js"; sourceTree = ""; }; - C1EA512B1680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA512C1680FE1100A21259 /* jstdhtml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jstdhtml; sourceTree = ""; }; - C1EA512F1680FE1100A21259 /* jstestdriver-shim.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jstestdriver-shim.js"; sourceTree = ""; }; - C1EA51301680FE1100A21259 /* req-res.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "req-res.js"; sourceTree = ""; }; - C1EA51311680FE1100A21259 /* runner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runner.js; sourceTree = ""; }; - C1EA51321680FE1100A21259 /* test-case.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-case.js"; sourceTree = ""; }; - C1EA51331680FE1100A21259 /* buster-util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-util.js"; sourceTree = ""; }; - C1EA51341680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA51351680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA51371680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA51381680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA51391680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA513A1680FE1100A21259 /* build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = build; sourceTree = ""; }; - C1EA513B1680FE1100A21259 /* Changelog.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Changelog.txt; sourceTree = ""; }; - C1EA513C1680FE1100A21259 /* jsl.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsl.conf; sourceTree = ""; }; - C1EA513F1680FE1100A21259 /* assert.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assert.js; sourceTree = ""; }; - C1EA51401680FE1100A21259 /* collection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = collection.js; sourceTree = ""; }; - C1EA51411680FE1100A21259 /* match.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = match.js; sourceTree = ""; }; - C1EA51421680FE1100A21259 /* mock.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mock.js; sourceTree = ""; }; - C1EA51431680FE1100A21259 /* sandbox.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sandbox.js; sourceTree = ""; }; - C1EA51441680FE1100A21259 /* spy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = spy.js; sourceTree = ""; }; - C1EA51451680FE1100A21259 /* stub.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stub.js; sourceTree = ""; }; - C1EA51461680FE1100A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA51471680FE1100A21259 /* test_case.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test_case.js; sourceTree = ""; }; - C1EA51491680FE1100A21259 /* event.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event.js; sourceTree = ""; }; - C1EA514A1680FE1100A21259 /* fake_server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_server.js; sourceTree = ""; }; - C1EA514B1680FE1100A21259 /* fake_server_with_clock.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_server_with_clock.js; sourceTree = ""; }; - C1EA514C1680FE1100A21259 /* fake_timers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_timers.js; sourceTree = ""; }; - C1EA514D1680FE1100A21259 /* fake_xml_http_request.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_xml_http_request.js; sourceTree = ""; }; - C1EA514E1680FE1100A21259 /* timers_ie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = timers_ie.js; sourceTree = ""; }; - C1EA514F1680FE1100A21259 /* xhr_ie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = xhr_ie.js; sourceTree = ""; }; - C1EA51501680FE1100A21259 /* sinon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sinon.js; sourceTree = ""; }; - C1EA51511680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA51521680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA51531680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA51561680FE1100A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA51581680FE1100A21259 /* xhr_target.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = xhr_target.txt; sourceTree = ""; }; - C1EA515A1680FE1100A21259 /* env.rhino.1.2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = env.rhino.1.2.js; sourceTree = ""; }; - C1EA515B1680FE1100A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA515C1680FE1100A21259 /* runner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runner.js; sourceTree = ""; }; - C1EA515E1680FE1100A21259 /* assert_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assert_test.js; sourceTree = ""; }; - C1EA515F1680FE1100A21259 /* collection_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = collection_test.js; sourceTree = ""; }; - C1EA51601680FE1100A21259 /* match_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = match_test.js; sourceTree = ""; }; - C1EA51611680FE1100A21259 /* mock_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mock_test.js; sourceTree = ""; }; - C1EA51621680FE1100A21259 /* sandbox_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sandbox_test.js; sourceTree = ""; }; - C1EA51631680FE1100A21259 /* spy_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = spy_test.js; sourceTree = ""; }; - C1EA51641680FE1100A21259 /* stub_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stub_test.js; sourceTree = ""; }; - C1EA51651680FE1100A21259 /* test_case_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test_case_test.js; sourceTree = ""; }; - C1EA51661680FE1100A21259 /* test_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test_test.js; sourceTree = ""; }; - C1EA51681680FE1100A21259 /* event_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event_test.js; sourceTree = ""; }; - C1EA51691680FE1100A21259 /* fake_server_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_server_test.js; sourceTree = ""; }; - C1EA516A1680FE1100A21259 /* fake_server_with_clock_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_server_with_clock_test.js; sourceTree = ""; }; - C1EA516B1680FE1100A21259 /* fake_timers_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_timers_test.js; sourceTree = ""; }; - C1EA516C1680FE1100A21259 /* fake_xml_http_request_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_xml_http_request_test.js; sourceTree = ""; }; - C1EA516D1680FE1100A21259 /* sinon-dist.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "sinon-dist.html"; sourceTree = ""; }; - C1EA516E1680FE1100A21259 /* sinon.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = sinon.html; sourceTree = ""; }; - C1EA516F1680FE1100A21259 /* sinon_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sinon_test.js; sourceTree = ""; }; - C1EA51711680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA51721680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA51731680FE1100A21259 /* jsTestDriver.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsTestDriver.conf; sourceTree = ""; }; - C1EA51751680FE1100A21259 /* buster-evented-logger.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-evented-logger.js"; sourceTree = ""; }; - C1EA51761680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA51771680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA51781680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA51791680FE1100A21259 /* run-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "run-tests"; sourceTree = ""; }; - C1EA517B1680FE1100A21259 /* buster-evented-logger-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-evented-logger-test.js"; sourceTree = ""; }; - C1EA517C1680FE1100A21259 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = test.html; sourceTree = ""; }; - C1EA517F1680FE1100A21259 /* cycle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cycle.js; sourceTree = ""; }; - C1EA51801680FE1100A21259 /* json.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json.js; sourceTree = ""; }; - C1EA51811680FE1100A21259 /* json2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json2.js; sourceTree = ""; }; - C1EA51821680FE1100A21259 /* json_parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json_parse.js; sourceTree = ""; }; - C1EA51831680FE1100A21259 /* json_parse_state.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json_parse_state.js; sourceTree = ""; }; - C1EA51841680FE1100A21259 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; - C1EA51861680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA51871680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA51881680FE1100A21259 /* jsTestDriver.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsTestDriver.conf; sourceTree = ""; }; - C1EA518A1680FE1100A21259 /* buster-format.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-format.js"; sourceTree = ""; }; - C1EA518B1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA518C1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA518D1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA518E1680FE1100A21259 /* run-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "run-tests"; sourceTree = ""; }; - C1EA51901680FE1100A21259 /* buster-format-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-format-test.js"; sourceTree = ""; }; - C1EA51921680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA51931680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA51941680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA51951680FE1100A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA51971680FE1100A21259 /* middleware.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = middleware.js; sourceTree = ""; }; - C1EA51981680FE1100A21259 /* server-cli.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "server-cli.js"; sourceTree = ""; }; - C1EA51991680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA519C1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA519D1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA519E1680FE1100A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA51A11680FE1100A21259 /* args.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = args.js; sourceTree = ""; }; - C1EA51A21680FE1100A21259 /* config.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = config.js; sourceTree = ""; }; - C1EA51A31680FE1100A21259 /* help.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = help.js; sourceTree = ""; }; - C1EA51A41680FE1100A21259 /* logger.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = logger.js; sourceTree = ""; }; - C1EA51A51680FE1100A21259 /* buster-cli.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-cli.js"; sourceTree = ""; }; - C1EA51A61680FE1100A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA51A91680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA51AA1680FE1100A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA51AB1680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA51AD1680FE1100A21259 /* buster-configuration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-configuration.js"; sourceTree = ""; }; - C1EA51AE1680FE1100A21259 /* file-loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-loader.js"; sourceTree = ""; }; - C1EA51AF1680FE1100A21259 /* group.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = group.js; sourceTree = ""; }; - C1EA51B01680FE1100A21259 /* util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.js; sourceTree = ""; }; - C1EA51B31680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA51B41680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA51B61680FE1100A21259 /* g.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = g.js; sourceTree = ""; }; - C1EA51B71680FE1100A21259 /* usr-local.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "usr-local.js"; sourceTree = ""; }; - C1EA51B81680FE1100A21259 /* glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glob.js; sourceTree = ""; }; - C1EA51B91680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA51BC1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA51BD1680FE1100A21259 /* graceful-fs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "graceful-fs.js"; sourceTree = ""; }; - C1EA51BE1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA51BF1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA51C01680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA51C21680FE1100A21259 /* open.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = open.js; sourceTree = ""; }; - C1EA51C41680FE1100A21259 /* inherits.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inherits.js; sourceTree = ""; }; - C1EA51C51680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA51C61680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA51C71680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA51C81680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA51CA1680FE1100A21259 /* 00-setup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "00-setup.js"; sourceTree = ""; }; - C1EA51CB1680FE1100A21259 /* bash-comparison.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bash-comparison.js"; sourceTree = ""; }; - C1EA51CC1680FE1100A21259 /* cwd-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "cwd-test.js"; sourceTree = ""; }; - C1EA51CD1680FE1100A21259 /* mark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mark.js; sourceTree = ""; }; - C1EA51CE1680FE1100A21259 /* pause-resume.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pause-resume.js"; sourceTree = ""; }; - C1EA51CF1680FE1100A21259 /* root-nomount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "root-nomount.js"; sourceTree = ""; }; - C1EA51D01680FE1100A21259 /* root.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = root.js; sourceTree = ""; }; - C1EA51D11680FE1100A21259 /* zz-cleanup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "zz-cleanup.js"; sourceTree = ""; }; - C1EA51D31680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA51D41680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA51D51680FE1100A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA51D61680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA51DA1680FE1100A21259 /* 1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 1.png; sourceTree = ""; }; - C1EA51DB1680FE1100A21259 /* 2.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = 2.html; sourceTree = ""; }; - C1EA51DC1680FE1100A21259 /* 3.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 3.txt; sourceTree = ""; }; - C1EA51DD1680FE1100A21259 /* 4.tgz */ = {isa = PBXFileReference; lastKnownFileType = file; path = 4.tgz; sourceTree = ""; }; - C1EA51DE1680FE1100A21259 /* medium.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = medium.json; sourceTree = ""; }; - C1EA51DF1680FE1100A21259 /* publish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = publish.js; sourceTree = ""; }; - C1EA51E01680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA51E11680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA51E21680FE1100A21259 /* small.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = small.json; sourceTree = ""; }; - C1EA51E41680FE1100A21259 /* file-etag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-etag.js"; sourceTree = ""; }; - C1EA51E51680FE1100A21259 /* http-proxy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-proxy.js"; sourceTree = ""; }; - C1EA51E61680FE1100A21259 /* invalid-error.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "invalid-error.js"; sourceTree = ""; }; - C1EA51E71680FE1100A21259 /* load-path.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "load-path.js"; sourceTree = ""; }; - C1EA51E91680FE1100A21259 /* iife.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = iife.js; sourceTree = ""; }; - C1EA51EA1680FE1100A21259 /* ramp-resources.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ramp-resources.js"; sourceTree = ""; }; - C1EA51EB1680FE1100A21259 /* resource-combiner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-combiner.js"; sourceTree = ""; }; - C1EA51EC1680FE1100A21259 /* resource-file-resolver.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-file-resolver.js"; sourceTree = ""; }; - C1EA51ED1680FE1100A21259 /* resource-middleware.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-middleware.js"; sourceTree = ""; }; - C1EA51EE1680FE1100A21259 /* resource-set-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-cache.js"; sourceTree = ""; }; - C1EA51EF1680FE1100A21259 /* resource-set.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set.js"; sourceTree = ""; }; - C1EA51F01680FE1100A21259 /* resource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resource.js; sourceTree = ""; }; - C1EA51F31680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA51F41680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA51F51680FE1100A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA51F61680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA51F81680FE1100A21259 /* buster-glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-glob.js"; sourceTree = ""; }; - C1EA51F91680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA51FA1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA51FC1680FE1100A21259 /* buster-glob-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-glob-test.js"; sourceTree = ""; }; - C1EA51FE1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA51FF1680FE1100A21259 /* mime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mime.js; sourceTree = ""; }; - C1EA52001680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA52011680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA52021680FE1100A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA52041680FE1100A21259 /* mime.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mime.types; sourceTree = ""; }; - C1EA52051680FE1100A21259 /* node.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = node.types; sourceTree = ""; }; - C1EA52071680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA52081680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA52091680FE1100A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA520C1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA520E1680FE1100A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA520F1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA52101680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA52111680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA52131680FE1100A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA52141680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA52151680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA52171680FE1100A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA52181680FE1100A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA52191680FE1100A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA521A1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA521B1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA521E1680FE1100A21259 /* bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.js; sourceTree = ""; }; - C1EA521F1680FE1100A21259 /* foo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.js; sourceTree = ""; }; - C1EA52211680FE1100A21259 /* other.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = other.js; sourceTree = ""; }; - C1EA52221680FE1100A21259 /* some-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "some-test.js"; sourceTree = ""; }; - C1EA52241680FE1100A21259 /* my-testish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "my-testish.js"; sourceTree = ""; }; - C1EA52251680FE1100A21259 /* http-proxy-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-proxy-test.js"; sourceTree = ""; }; - C1EA52261680FE1100A21259 /* load-path-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "load-path-test.js"; sourceTree = ""; }; - C1EA52281680FE1100A21259 /* iife-processor-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "iife-processor-test.js"; sourceTree = ""; }; - C1EA52291680FE1100A21259 /* resource-middleware-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-middleware-test.js"; sourceTree = ""; }; - C1EA522A1680FE1100A21259 /* resource-set-cache-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-cache-test.js"; sourceTree = ""; }; - C1EA522B1680FE1100A21259 /* resource-set-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-test.js"; sourceTree = ""; }; - C1EA522C1680FE1100A21259 /* resource-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-test.js"; sourceTree = ""; }; - C1EA522D1680FE1100A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA522E1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA522F1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA52311680FE1100A21259 /* buster-configuration-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-configuration-test.js"; sourceTree = ""; }; - C1EA52321680FE1100A21259 /* file-loader-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-loader-test.js"; sourceTree = ""; }; - C1EA52341680FE1100A21259 /* bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.js; sourceTree = ""; }; - C1EA52361680FE1100A21259 /* file */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = file; sourceTree = ""; }; - C1EA52371680FE1100A21259 /* file.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file.js; sourceTree = ""; }; - C1EA52381680FE1100A21259 /* foo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.js; sourceTree = ""; }; - C1EA523A1680FE1100A21259 /* my-testish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "my-testish.js"; sourceTree = ""; }; - C1EA523B1680FE1100A21259 /* group-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "group-test.js"; sourceTree = ""; }; - C1EA523C1680FE1100A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA523D1680FE1100A21259 /* todo.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = todo.org; sourceTree = ""; }; - C1EA523F1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA52401680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA52411680FE1100A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA52421680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA52441680FE1100A21259 /* buster-terminal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-terminal.js"; sourceTree = ""; }; - C1EA52451680FE1100A21259 /* matrix.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = matrix.js; sourceTree = ""; }; - C1EA52461680FE1100A21259 /* relative-grid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "relative-grid.js"; sourceTree = ""; }; - C1EA52471680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA52481680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA524A1680FE1100A21259 /* buster-terminal-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-terminal-test.js"; sourceTree = ""; }; - C1EA524B1680FE1100A21259 /* helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = helper.js; sourceTree = ""; }; - C1EA524C1680FE1100A21259 /* matrix-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "matrix-test.js"; sourceTree = ""; }; - C1EA524D1680FE1100A21259 /* relative-grid-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "relative-grid-test.js"; sourceTree = ""; }; - C1EA524F1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA52501680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA52511680FE1100A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA52541680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA52551680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA52571680FE1100A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA52581680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA52591680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA525A1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA525C1680FE1100A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA525E1680FE1100A21259 /* bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bench.js; sourceTree = ""; }; - C1EA525F1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA52601680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA52611680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA52621680FE1100A21259 /* sigmund.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sigmund.js; sourceTree = ""; }; - C1EA52641680FE1100A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA52651680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA52661680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA52681680FE1100A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA52691680FE1100A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA526A1680FE1100A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA526B1680FE1100A21259 /* defaults.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = defaults.js; sourceTree = ""; }; - C1EA526D1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA526E1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA526F1680FE1100A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA52701680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA52721680FE1100A21259 /* argument.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = argument.js; sourceTree = ""; }; - C1EA52731680FE1100A21259 /* operand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = operand.js; sourceTree = ""; }; - C1EA52741680FE1100A21259 /* option.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = option.js; sourceTree = ""; }; - C1EA52751680FE1100A21259 /* parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.js; sourceTree = ""; }; - C1EA52761680FE1100A21259 /* posix-argv-parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "posix-argv-parser.js"; sourceTree = ""; }; - C1EA52771680FE1100A21259 /* shorthand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shorthand.js; sourceTree = ""; }; - C1EA52781680FE1100A21259 /* types.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = types.js; sourceTree = ""; }; - C1EA52791680FE1100A21259 /* validators.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = validators.js; sourceTree = ""; }; - C1EA527A1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA527B1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA527C1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA527E1680FE1100A21259 /* operand-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "operand-test.js"; sourceTree = ""; }; - C1EA527F1680FE1100A21259 /* option-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "option-test.js"; sourceTree = ""; }; - C1EA52801680FE1100A21259 /* parser-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "parser-test.js"; sourceTree = ""; }; - C1EA52811680FE1100A21259 /* posix-argv-parser-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "posix-argv-parser-test.js"; sourceTree = ""; }; - C1EA52821680FE1100A21259 /* shorthand-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "shorthand-test.js"; sourceTree = ""; }; - C1EA52831680FE1100A21259 /* types-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "types-test.js"; sourceTree = ""; }; - C1EA52841680FE1100A21259 /* validators-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "validators-test.js"; sourceTree = ""; }; - C1EA52861680FE1100A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA52871680FE1100A21259 /* fiber.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fiber.js; sourceTree = ""; }; - C1EA52881680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA52891680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA528A1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA528B1680FE1100A21259 /* rimraf.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rimraf.js; sourceTree = ""; }; - C1EA528D1680FE1100A21259 /* run.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = run.sh; sourceTree = ""; }; - C1EA528E1680FE1100A21259 /* setup.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = setup.sh; sourceTree = ""; }; - C1EA528F1680FE1100A21259 /* test-async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-async.js"; sourceTree = ""; }; - C1EA52901680FE1100A21259 /* test-fiber.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-fiber.js"; sourceTree = ""; }; - C1EA52911680FE1100A21259 /* test-sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-sync.js"; sourceTree = ""; }; - C1EA52931680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA52941680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA52951680FE1100A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA52961680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA52981680FE1100A21259 /* stream-logger.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "stream-logger.js"; sourceTree = ""; }; - C1EA52991680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA529A1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA529B1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA529D1680FE1100A21259 /* stream-logger-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "stream-logger-test.js"; sourceTree = ""; }; - C1EA529E1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA529F1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA52A01680FE1100A21259 /* run-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "run-tests"; sourceTree = ""; }; - C1EA52A21680FE1100A21259 /* buster-cli-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-cli-test.js"; sourceTree = ""; }; - C1EA52A31680FE1100A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA52A51680FE1100A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA52A61680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA52A71680FE1100A21259 /* benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = benchmark.js; sourceTree = ""; }; - C1EA52A81680FE1100A21259 /* ejs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ejs.js; sourceTree = ""; }; - C1EA52A91680FE1100A21259 /* ejs.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ejs.min.js; sourceTree = ""; }; - C1EA52AB1680FE1100A21259 /* client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = client.html; sourceTree = ""; }; - C1EA52AC1680FE1100A21259 /* list.ejs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = list.ejs; sourceTree = ""; }; - C1EA52AD1680FE1100A21259 /* list.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = list.js; sourceTree = ""; }; - C1EA52AE1680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA52AF1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA52B11680FE1100A21259 /* ejs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ejs.js; sourceTree = ""; }; - C1EA52B21680FE1100A21259 /* filters.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = filters.js; sourceTree = ""; }; - C1EA52B31680FE1100A21259 /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; - C1EA52B41680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA52B51680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA52B61680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA52B81680FE1100A21259 /* compile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compile.js; sourceTree = ""; }; - C1EA52BA1680FE1100A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA52BB1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA52BD1680FE1100A21259 /* expresso */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = expresso; sourceTree = ""; }; - C1EA52BF1680FE1100A21259 /* api.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = api.html; sourceTree = ""; }; - C1EA52C01680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA52C11680FE1100A21259 /* index.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = index.md; sourceTree = ""; }; - C1EA52C31680FE1100A21259 /* foot.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = foot.html; sourceTree = ""; }; - C1EA52C41680FE1100A21259 /* head.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = head.html; sourceTree = ""; }; - C1EA52C51680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA52C71680FE1100A21259 /* bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.js; sourceTree = ""; }; - C1EA52C81680FE1100A21259 /* foo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.js; sourceTree = ""; }; - C1EA52C91680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA52CA1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA52CB1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA52CD1680FE1100A21259 /* assert.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assert.test.js; sourceTree = ""; }; - C1EA52CE1680FE1100A21259 /* async.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = async.test.js; sourceTree = ""; }; - C1EA52CF1680FE1100A21259 /* bar.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.test.js; sourceTree = ""; }; - C1EA52D01680FE1100A21259 /* foo.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.test.js; sourceTree = ""; }; - C1EA52D11680FE1100A21259 /* http.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = http.test.js; sourceTree = ""; }; - C1EA52D31680FE1100A21259 /* ejs.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ejs.test.js; sourceTree = ""; }; - C1EA52D51680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA52D71680FE1100A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA52DA1680FE1100A21259 /* paperboy.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = paperboy.jpg; sourceTree = ""; }; - C1EA52DB1680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA52DC1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA52DE1680FE1100A21259 /* paperboy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = paperboy.js; sourceTree = ""; }; - C1EA52DF1680FE1100A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA52E01680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA52E11680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA52E21680FE1100A21259 /* seed.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = seed.yml; sourceTree = ""; }; - C1EA52E41680FE1100A21259 /* Cakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cakefile; sourceTree = ""; }; - C1EA52E51680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA52E81680FE1100A21259 /* express */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = express; sourceTree = ""; }; - C1EA52EA1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA52EC1680FE1100A21259 /* bundle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bundle.js; sourceTree = ""; }; - C1EA52EE1680FE1100A21259 /* bundle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bundle.js; sourceTree = ""; }; - C1EA52EF1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA52F21680FE1100A21259 /* client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client.js; sourceTree = ""; }; - C1EA52F31680FE1100A21259 /* quotes.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = quotes.json; sourceTree = ""; }; - C1EA52F41680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA52F61680FE1100A21259 /* client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client.js; sourceTree = ""; }; - C1EA52F71680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA52F91680FE1100A21259 /* chat.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = chat.css; sourceTree = ""; }; - C1EA52FA1680FE1100A21259 /* entry.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = entry.js; sourceTree = ""; }; - C1EA52FB1680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA52FC1680FE1100A21259 /* INSTALL.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = INSTALL.txt; sourceTree = ""; }; - C1EA52FD1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA52FE1680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA53001680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA53011680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA53021680FE1100A21259 /* nested.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nested.js; sourceTree = ""; }; - C1EA53041680FE1100A21259 /* client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client.js; sourceTree = ""; }; - C1EA53051680FE1100A21259 /* emitter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = emitter.js; sourceTree = ""; }; - C1EA53071680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA53081680FE1100A21259 /* saturate.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = saturate.js; sourceTree = ""; }; - C1EA530A1680FE1100A21259 /* client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client.js; sourceTree = ""; }; - C1EA530B1680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA530D1680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA530E1680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA53101680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA53111680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA53131680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA53141680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA53161680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA53171680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA53181680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA531A1680FE1100A21259 /* stream_socketio.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stream_socketio.js; sourceTree = ""; }; - C1EA531B1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA531E1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA531F1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA53201680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA53211680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA53241680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA53251680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA53271680FE1100A21259 /* json.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json.js; sourceTree = ""; }; - C1EA53281680FE1100A21259 /* leaves.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = leaves.js; sourceTree = ""; }; - C1EA53291680FE1100A21259 /* negative.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = negative.js; sourceTree = ""; }; - C1EA532A1680FE1100A21259 /* scrub.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = scrub.js; sourceTree = ""; }; - C1EA532B1680FE1100A21259 /* stringify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stringify.js; sourceTree = ""; }; - C1EA532C1680FE1100A21259 /* fail.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fail.js; sourceTree = ""; }; - C1EA532D1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA532E1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA532F1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA53301680FE1100A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA53321680FE1100A21259 /* circular.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = circular.js; sourceTree = ""; }; - C1EA53331680FE1100A21259 /* date.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = date.js; sourceTree = ""; }; - C1EA53341680FE1100A21259 /* equal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = equal.js; sourceTree = ""; }; - C1EA53351680FE1100A21259 /* error.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = error.js; sourceTree = ""; }; - C1EA53361680FE1100A21259 /* has.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = has.js; sourceTree = ""; }; - C1EA53371680FE1100A21259 /* instance.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = instance.js; sourceTree = ""; }; - C1EA53381680FE1100A21259 /* interface.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = interface.js; sourceTree = ""; }; - C1EA53391680FE1100A21259 /* json.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json.js; sourceTree = ""; }; - C1EA533A1680FE1100A21259 /* keys.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = keys.js; sourceTree = ""; }; - C1EA533B1680FE1100A21259 /* leaves.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = leaves.js; sourceTree = ""; }; - C1EA533D1680FE1100A21259 /* deep_equal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = deep_equal.js; sourceTree = ""; }; - C1EA533E1680FE1100A21259 /* mutability.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mutability.js; sourceTree = ""; }; - C1EA533F1680FE1100A21259 /* negative.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = negative.js; sourceTree = ""; }; - C1EA53401680FE1100A21259 /* obj.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = obj.js; sourceTree = ""; }; - C1EA53411680FE1100A21259 /* siblings.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = siblings.js; sourceTree = ""; }; - C1EA53421680FE1100A21259 /* stop.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stop.js; sourceTree = ""; }; - C1EA53431680FE1100A21259 /* stringify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stringify.js; sourceTree = ""; }; - C1EA53441680FE1100A21259 /* subexpr.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = subexpr.js; sourceTree = ""; }; - C1EA53451680FE1100A21259 /* super_deep.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = super_deep.js; sourceTree = ""; }; - C1EA53471680FE1100A21259 /* leaves.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = leaves.js; sourceTree = ""; }; - C1EA53481680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA53491680FE1100A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA534B1680FE1100A21259 /* args.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = args.js; sourceTree = ""; }; - C1EA534C1680FE1100A21259 /* circular.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = circular.js; sourceTree = ""; }; - C1EA534D1680FE1100A21259 /* fn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fn.js; sourceTree = ""; }; - C1EA534E1680FE1100A21259 /* proto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = proto.js; sourceTree = ""; }; - C1EA534F1680FE1100A21259 /* scrub.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = scrub.js; sourceTree = ""; }; - C1EA53501680FE1100A21259 /* store.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = store.js; sourceTree = ""; }; - C1EA53521680FE1100A21259 /* test.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = test.sh; sourceTree = ""; }; - C1EA53541680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA53561680FE1100A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA53571680FE1100A21259 /* stringify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stringify.js; sourceTree = ""; }; - C1EA53581680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA53591680FE1100A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA535B1680FE1100A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA535C1680FE1100A21259 /* stringify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stringify.js; sourceTree = ""; }; - C1EA535E1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA535F1680FE1100A21259 /* lazy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lazy.js; sourceTree = ""; }; - C1EA53601680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA53611680FE1100A21259 /* readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.txt; sourceTree = ""; }; - C1EA53631680FE1100A21259 /* bucket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bucket.js; sourceTree = ""; }; - C1EA53641680FE1100A21259 /* complex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = complex.js; sourceTree = ""; }; - C1EA53651680FE1100A21259 /* custom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = custom.js; sourceTree = ""; }; - C1EA53661680FE1100A21259 /* em.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = em.js; sourceTree = ""; }; - C1EA53671680FE1100A21259 /* filter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = filter.js; sourceTree = ""; }; - C1EA53681680FE1100A21259 /* foldr.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foldr.js; sourceTree = ""; }; - C1EA53691680FE1100A21259 /* forEach.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = forEach.js; sourceTree = ""; }; - C1EA536A1680FE1100A21259 /* head.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = head.js; sourceTree = ""; }; - C1EA536B1680FE1100A21259 /* join.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = join.js; sourceTree = ""; }; - C1EA536C1680FE1100A21259 /* lines.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lines.js; sourceTree = ""; }; - C1EA536D1680FE1100A21259 /* map.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = map.js; sourceTree = ""; }; - C1EA536E1680FE1100A21259 /* pipe.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pipe.js; sourceTree = ""; }; - C1EA536F1680FE1100A21259 /* product.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = product.js; sourceTree = ""; }; - C1EA53701680FE1100A21259 /* range.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = range.js; sourceTree = ""; }; - C1EA53711680FE1100A21259 /* skip.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = skip.js; sourceTree = ""; }; - C1EA53721680FE1100A21259 /* sum.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sum.js; sourceTree = ""; }; - C1EA53731680FE1100A21259 /* tail.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tail.js; sourceTree = ""; }; - C1EA53741680FE1100A21259 /* take.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = take.js; sourceTree = ""; }; - C1EA53751680FE1100A21259 /* takeWhile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = takeWhile.js; sourceTree = ""; }; - C1EA53771680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA53791680FE1100A21259 /* decode.bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = decode.bench.js; sourceTree = ""; }; - C1EA537A1680FE1100A21259 /* encode.bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = encode.bench.js; sourceTree = ""; }; - C1EA537B1680FE1100A21259 /* runner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runner.js; sourceTree = ""; }; - C1EA537C1680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA537D1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA537F1680FE1100A21259 /* logger.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = logger.js; sourceTree = ""; }; - C1EA53801680FE1100A21259 /* manager.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = manager.js; sourceTree = ""; }; - C1EA53811680FE1100A21259 /* namespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = namespace.js; sourceTree = ""; }; - C1EA53821680FE1100A21259 /* parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.js; sourceTree = ""; }; - C1EA53831680FE1100A21259 /* socket.io.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = socket.io.js; sourceTree = ""; }; - C1EA53841680FE1100A21259 /* socket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = socket.js; sourceTree = ""; }; - C1EA53851680FE1100A21259 /* static.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = static.js; sourceTree = ""; }; - C1EA53861680FE1100A21259 /* store.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = store.js; sourceTree = ""; }; - C1EA53881680FE1100A21259 /* memory.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = memory.js; sourceTree = ""; }; - C1EA53891680FE1100A21259 /* redis.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = redis.js; sourceTree = ""; }; - C1EA538A1680FE1100A21259 /* transport.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = transport.js; sourceTree = ""; }; - C1EA538C1680FE1100A21259 /* flashsocket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = flashsocket.js; sourceTree = ""; }; - C1EA538D1680FE1100A21259 /* htmlfile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmlfile.js; sourceTree = ""; }; - C1EA538E1680FE1100A21259 /* http-polling.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-polling.js"; sourceTree = ""; }; - C1EA538F1680FE1100A21259 /* http.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = http.js; sourceTree = ""; }; - C1EA53901680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA53911680FE1100A21259 /* jsonp-polling.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jsonp-polling.js"; sourceTree = ""; }; - C1EA53931680FE1100A21259 /* default.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = default.js; sourceTree = ""; }; - C1EA53941680FE1100A21259 /* hybi-07-12.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "hybi-07-12.js"; sourceTree = ""; }; - C1EA53951680FE1100A21259 /* hybi-16.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "hybi-16.js"; sourceTree = ""; }; - C1EA53961680FE1100A21259 /* hybi-17.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "hybi-17.js"; sourceTree = ""; }; - C1EA53971680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA53981680FE1100A21259 /* websocket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = websocket.js; sourceTree = ""; }; - C1EA53991680FE1100A21259 /* xhr-polling.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "xhr-polling.js"; sourceTree = ""; }; - C1EA539A1680FE1100A21259 /* util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.js; sourceTree = ""; }; - C1EA539B1680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA539E1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA53A01680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA53A21680FE1100A21259 /* basic.fallback.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.fallback.js; sourceTree = ""; }; - C1EA53A31680FE1100A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA53A41680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA53A61680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA53A71680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA53A81680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA53A91680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA53AA1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA53AD1680FE1100A21259 /* ssl.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ssl.crt; sourceTree = ""; }; - C1EA53AE1680FE1100A21259 /* ssl.private.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ssl.private.key; sourceTree = ""; }; - C1EA53AF1680FE1100A21259 /* unit.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = unit.test.js; sourceTree = ""; }; - C1EA53B11680FE1100A21259 /* changelog.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = changelog.md; sourceTree = ""; }; - C1EA53B21680FE1100A21259 /* eval_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = eval_test.js; sourceTree = ""; }; - C1EA53B41680FE1100A21259 /* auth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = auth.js; sourceTree = ""; }; - C1EA53B51680FE1100A21259 /* backpressure_drain.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backpressure_drain.js; sourceTree = ""; }; - C1EA53B61680FE1100A21259 /* extend.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = extend.js; sourceTree = ""; }; - C1EA53B71680FE1100A21259 /* file.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file.js; sourceTree = ""; }; - C1EA53B81680FE1100A21259 /* mget.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mget.js; sourceTree = ""; }; - C1EA53B91680FE1100A21259 /* monitor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = monitor.js; sourceTree = ""; }; - C1EA53BA1680FE1100A21259 /* multi.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = multi.js; sourceTree = ""; }; - C1EA53BB1680FE1100A21259 /* multi2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = multi2.js; sourceTree = ""; }; - C1EA53BC1680FE1100A21259 /* psubscribe.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = psubscribe.js; sourceTree = ""; }; - C1EA53BD1680FE1100A21259 /* pub_sub.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pub_sub.js; sourceTree = ""; }; - C1EA53BE1680FE1100A21259 /* simple.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = simple.js; sourceTree = ""; }; - C1EA53BF1680FE1100A21259 /* subqueries.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = subqueries.js; sourceTree = ""; }; - C1EA53C01680FE1100A21259 /* subquery.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = subquery.js; sourceTree = ""; }; - C1EA53C11680FE1100A21259 /* unix_socket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = unix_socket.js; sourceTree = ""; }; - C1EA53C21680FE1100A21259 /* web_server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = web_server.js; sourceTree = ""; }; - C1EA53C31680FE1100A21259 /* generate_commands.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = generate_commands.js; sourceTree = ""; }; - C1EA53C41680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA53C61680FE1100A21259 /* commands.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = commands.js; sourceTree = ""; }; - C1EA53C81680FE1100A21259 /* hiredis.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hiredis.js; sourceTree = ""; }; - C1EA53C91680FE1100A21259 /* javascript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = javascript.js; sourceTree = ""; }; - C1EA53CA1680FE1100A21259 /* queue.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = queue.js; sourceTree = ""; }; - C1EA53CB1680FE1100A21259 /* to_array.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = to_array.js; sourceTree = ""; }; - C1EA53CC1680FE1100A21259 /* util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.js; sourceTree = ""; }; - C1EA53CD1680FE1100A21259 /* multi_bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = multi_bench.js; sourceTree = ""; }; - C1EA53CE1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA53CF1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA53D01680FE1100A21259 /* simple_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = simple_test.js; sourceTree = ""; }; - C1EA53D11680FE1100A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA53D31680FE1100A21259 /* buffer_bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buffer_bench.js; sourceTree = ""; }; - C1EA53D41680FE1100A21259 /* reconnect_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = reconnect_test.js; sourceTree = ""; }; - C1EA53D61680FE1100A21259 /* codec.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = codec.js; sourceTree = ""; }; - C1EA53D81680FE1100A21259 /* pub.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pub.js; sourceTree = ""; }; - C1EA53D91680FE1100A21259 /* run */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = run; sourceTree = ""; }; - C1EA53DA1680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA53DC1680FE1100A21259 /* pub.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pub.js; sourceTree = ""; }; - C1EA53DD1680FE1100A21259 /* run */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = run; sourceTree = ""; }; - C1EA53DE1680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA53E01680FE1100A21259 /* 00 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 00; sourceTree = ""; }; - C1EA53E11680FE1100A21259 /* plot */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = plot; sourceTree = ""; }; - C1EA53E21680FE1100A21259 /* size-rate.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "size-rate.png"; sourceTree = ""; }; - C1EA53E31680FE1100A21259 /* speed.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speed.js; sourceTree = ""; }; - C1EA53E41680FE1100A21259 /* sub_quit_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sub_quit_test.js; sourceTree = ""; }; - C1EA53E51680FE1100A21259 /* test_start_stop.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test_start_stop.js; sourceTree = ""; }; - C1EA53E61680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA53E71680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA53E91680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA53EB1680FE1100A21259 /* browserify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browserify.js; sourceTree = ""; }; - C1EA53EC1680FE1100A21259 /* builder.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = builder.js; sourceTree = ""; }; - C1EA53EE1680FE1100A21259 /* browserify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browserify.js; sourceTree = ""; }; - C1EA53EF1680FE1100A21259 /* socket.io.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = socket.io.js; sourceTree = ""; }; - C1EA53F01680FE1100A21259 /* socket.io.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = socket.io.min.js; sourceTree = ""; }; - C1EA53F11680FE1100A21259 /* WebSocketMain.swf */ = {isa = PBXFileReference; lastKnownFileType = file; path = WebSocketMain.swf; sourceTree = ""; }; - C1EA53F21680FE1100A21259 /* WebSocketMainInsecure.swf */ = {isa = PBXFileReference; lastKnownFileType = file; path = WebSocketMainInsecure.swf; sourceTree = ""; }; - C1EA53F31680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA53F51680FE1100A21259 /* events.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = events.js; sourceTree = ""; }; - C1EA53F61680FE1100A21259 /* io.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = io.js; sourceTree = ""; }; - C1EA53F71680FE1100A21259 /* json.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json.js; sourceTree = ""; }; - C1EA53F81680FE1100A21259 /* namespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = namespace.js; sourceTree = ""; }; - C1EA53F91680FE1100A21259 /* parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.js; sourceTree = ""; }; - C1EA53FA1680FE1100A21259 /* socket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = socket.js; sourceTree = ""; }; - C1EA53FB1680FE1100A21259 /* transport.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = transport.js; sourceTree = ""; }; - C1EA53FD1680FE1100A21259 /* flashsocket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = flashsocket.js; sourceTree = ""; }; - C1EA53FE1680FE1100A21259 /* htmlfile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmlfile.js; sourceTree = ""; }; - C1EA53FF1680FE1100A21259 /* jsonp-polling.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jsonp-polling.js"; sourceTree = ""; }; - C1EA54001680FE1100A21259 /* websocket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = websocket.js; sourceTree = ""; }; - C1EA54011680FE1100A21259 /* xhr-polling.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "xhr-polling.js"; sourceTree = ""; }; - C1EA54021680FE1100A21259 /* xhr.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = xhr.js; sourceTree = ""; }; - C1EA54031680FE1100A21259 /* util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.js; sourceTree = ""; }; - C1EA54061680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA54081680FE1100A21259 /* build.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = build.sh; sourceTree = ""; }; - C1EA540D1680FE1100A21259 /* RFC2817Socket.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RFC2817Socket.as; sourceTree = ""; }; - C1EA54101680FE1100A21259 /* MD5.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MD5.as; sourceTree = ""; }; - C1EA54141680FE1100A21259 /* MozillaRootCertificates.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MozillaRootCertificates.as; sourceTree = ""; }; - C1EA54151680FE1100A21259 /* X509Certificate.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = X509Certificate.as; sourceTree = ""; }; - C1EA54161680FE1100A21259 /* X509CertificateCollection.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = X509CertificateCollection.as; sourceTree = ""; }; - C1EA54171680FE1100A21259 /* Crypto.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Crypto.as; sourceTree = ""; }; - C1EA54191680FE1100A21259 /* HMAC.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HMAC.as; sourceTree = ""; }; - C1EA541A1680FE1100A21259 /* IHash.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IHash.as; sourceTree = ""; }; - C1EA541B1680FE1100A21259 /* IHMAC.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IHMAC.as; sourceTree = ""; }; - C1EA541C1680FE1100A21259 /* MAC.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MAC.as; sourceTree = ""; }; - C1EA541D1680FE1100A21259 /* MD2.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MD2.as; sourceTree = ""; }; - C1EA541E1680FE1100A21259 /* MD5.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MD5.as; sourceTree = ""; }; - C1EA541F1680FE1100A21259 /* SHA1.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SHA1.as; sourceTree = ""; }; - C1EA54201680FE1100A21259 /* SHA224.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SHA224.as; sourceTree = ""; }; - C1EA54211680FE1100A21259 /* SHA256.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SHA256.as; sourceTree = ""; }; - C1EA54221680FE1100A21259 /* SHABase.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SHABase.as; sourceTree = ""; }; - C1EA54241680FE1100A21259 /* ARC4.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ARC4.as; sourceTree = ""; }; - C1EA54251680FE1100A21259 /* IPRNG.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IPRNG.as; sourceTree = ""; }; - C1EA54261680FE1100A21259 /* Random.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Random.as; sourceTree = ""; }; - C1EA54271680FE1100A21259 /* TLSPRF.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSPRF.as; sourceTree = ""; }; - C1EA54291680FE1100A21259 /* RSAKey.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RSAKey.as; sourceTree = ""; }; - C1EA542B1680FE1100A21259 /* AESKey.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AESKey.as; sourceTree = ""; }; - C1EA542C1680FE1100A21259 /* aeskey.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = aeskey.pl; sourceTree = ""; }; - C1EA542D1680FE1100A21259 /* BlowFishKey.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BlowFishKey.as; sourceTree = ""; }; - C1EA542E1680FE1100A21259 /* CBCMode.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CBCMode.as; sourceTree = ""; }; - C1EA542F1680FE1100A21259 /* CFB8Mode.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CFB8Mode.as; sourceTree = ""; }; - C1EA54301680FE1100A21259 /* CFBMode.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CFBMode.as; sourceTree = ""; }; - C1EA54311680FE1100A21259 /* CTRMode.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CTRMode.as; sourceTree = ""; }; - C1EA54321680FE1100A21259 /* DESKey.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DESKey.as; sourceTree = ""; }; - C1EA54331680FE1100A21259 /* dump.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dump.txt; sourceTree = ""; }; - C1EA54341680FE1100A21259 /* ECBMode.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ECBMode.as; sourceTree = ""; }; - C1EA54351680FE1100A21259 /* ICipher.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ICipher.as; sourceTree = ""; }; - C1EA54361680FE1100A21259 /* IMode.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IMode.as; sourceTree = ""; }; - C1EA54371680FE1100A21259 /* IPad.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IPad.as; sourceTree = ""; }; - C1EA54381680FE1100A21259 /* IStreamCipher.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IStreamCipher.as; sourceTree = ""; }; - C1EA54391680FE1100A21259 /* ISymmetricKey.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ISymmetricKey.as; sourceTree = ""; }; - C1EA543A1680FE1100A21259 /* IVMode.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IVMode.as; sourceTree = ""; }; - C1EA543B1680FE1100A21259 /* NullPad.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NullPad.as; sourceTree = ""; }; - C1EA543C1680FE1100A21259 /* OFBMode.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = OFBMode.as; sourceTree = ""; }; - C1EA543D1680FE1100A21259 /* PKCS5.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PKCS5.as; sourceTree = ""; }; - C1EA543E1680FE1100A21259 /* SimpleIVMode.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SimpleIVMode.as; sourceTree = ""; }; - C1EA543F1680FE1100A21259 /* SSLPad.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SSLPad.as; sourceTree = ""; }; - C1EA54401680FE1100A21259 /* TLSPad.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSPad.as; sourceTree = ""; }; - C1EA54411680FE1100A21259 /* TripleDESKey.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TripleDESKey.as; sourceTree = ""; }; - C1EA54421680FE1100A21259 /* XTeaKey.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = XTeaKey.as; sourceTree = ""; }; - C1EA54441680FE1100A21259 /* AESKeyTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AESKeyTest.as; sourceTree = ""; }; - C1EA54451680FE1100A21259 /* ARC4Test.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ARC4Test.as; sourceTree = ""; }; - C1EA54461680FE1100A21259 /* BigIntegerTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BigIntegerTest.as; sourceTree = ""; }; - C1EA54471680FE1100A21259 /* BlowFishKeyTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BlowFishKeyTest.as; sourceTree = ""; }; - C1EA54481680FE1100A21259 /* CBCModeTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CBCModeTest.as; sourceTree = ""; }; - C1EA54491680FE1100A21259 /* CFB8ModeTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CFB8ModeTest.as; sourceTree = ""; }; - C1EA544A1680FE1100A21259 /* CFBModeTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CFBModeTest.as; sourceTree = ""; }; - C1EA544B1680FE1100A21259 /* CTRModeTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CTRModeTest.as; sourceTree = ""; }; - C1EA544C1680FE1100A21259 /* DESKeyTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DESKeyTest.as; sourceTree = ""; }; - C1EA544D1680FE1100A21259 /* ECBModeTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ECBModeTest.as; sourceTree = ""; }; - C1EA544E1680FE1100A21259 /* HMACTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HMACTest.as; sourceTree = ""; }; - C1EA544F1680FE1100A21259 /* ITestHarness.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ITestHarness.as; sourceTree = ""; }; - C1EA54501680FE1100A21259 /* MD2Test.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MD2Test.as; sourceTree = ""; }; - C1EA54511680FE1100A21259 /* MD5Test.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MD5Test.as; sourceTree = ""; }; - C1EA54521680FE1100A21259 /* OFBModeTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = OFBModeTest.as; sourceTree = ""; }; - C1EA54531680FE1100A21259 /* RSAKeyTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RSAKeyTest.as; sourceTree = ""; }; - C1EA54541680FE1100A21259 /* SHA1Test.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SHA1Test.as; sourceTree = ""; }; - C1EA54551680FE1100A21259 /* SHA224Test.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SHA224Test.as; sourceTree = ""; }; - C1EA54561680FE1100A21259 /* SHA256Test.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SHA256Test.as; sourceTree = ""; }; - C1EA54571680FE1100A21259 /* TestCase.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TestCase.as; sourceTree = ""; }; - C1EA54581680FE1100A21259 /* TLSPRFTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSPRFTest.as; sourceTree = ""; }; - C1EA54591680FE1100A21259 /* TripleDESKeyTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TripleDESKeyTest.as; sourceTree = ""; }; - C1EA545A1680FE1100A21259 /* XTeaKeyTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = XTeaKeyTest.as; sourceTree = ""; }; - C1EA545C1680FE1100A21259 /* BulkCiphers.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BulkCiphers.as; sourceTree = ""; }; - C1EA545D1680FE1100A21259 /* CipherSuites.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CipherSuites.as; sourceTree = ""; }; - C1EA545E1680FE1100A21259 /* IConnectionState.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IConnectionState.as; sourceTree = ""; }; - C1EA545F1680FE1100A21259 /* ISecurityParameters.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ISecurityParameters.as; sourceTree = ""; }; - C1EA54601680FE1100A21259 /* KeyExchanges.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = KeyExchanges.as; sourceTree = ""; }; - C1EA54611680FE1100A21259 /* MACs.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MACs.as; sourceTree = ""; }; - C1EA54621680FE1100A21259 /* SSLConnectionState.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SSLConnectionState.as; sourceTree = ""; }; - C1EA54631680FE1100A21259 /* SSLEvent.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SSLEvent.as; sourceTree = ""; }; - C1EA54641680FE1100A21259 /* SSLSecurityParameters.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SSLSecurityParameters.as; sourceTree = ""; }; - C1EA54651680FE1100A21259 /* TLSConfig.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSConfig.as; sourceTree = ""; }; - C1EA54661680FE1100A21259 /* TLSConnectionState.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSConnectionState.as; sourceTree = ""; }; - C1EA54671680FE1100A21259 /* TLSEngine.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSEngine.as; sourceTree = ""; }; - C1EA54681680FE1100A21259 /* TLSError.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSError.as; sourceTree = ""; }; - C1EA54691680FE1100A21259 /* TLSEvent.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSEvent.as; sourceTree = ""; }; - C1EA546A1680FE1100A21259 /* TLSSecurityParameters.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSSecurityParameters.as; sourceTree = ""; }; - C1EA546B1680FE1100A21259 /* TLSSocket.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSSocket.as; sourceTree = ""; }; - C1EA546C1680FE1100A21259 /* TLSSocketEvent.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSSocketEvent.as; sourceTree = ""; }; - C1EA546D1680FE1100A21259 /* TLSTest.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TLSTest.as; sourceTree = ""; }; - C1EA546F1680FE1100A21259 /* BarrettReduction.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BarrettReduction.as; sourceTree = ""; }; - C1EA54701680FE1100A21259 /* bi_internal.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bi_internal.as; sourceTree = ""; }; - C1EA54711680FE1100A21259 /* BigInteger.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BigInteger.as; sourceTree = ""; }; - C1EA54721680FE1100A21259 /* ClassicReduction.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ClassicReduction.as; sourceTree = ""; }; - C1EA54731680FE1100A21259 /* IReduction.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IReduction.as; sourceTree = ""; }; - C1EA54741680FE1100A21259 /* MontgomeryReduction.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MontgomeryReduction.as; sourceTree = ""; }; - C1EA54751680FE1100A21259 /* NullReduction.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NullReduction.as; sourceTree = ""; }; - C1EA54771680FE1100A21259 /* ArrayUtil.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ArrayUtil.as; sourceTree = ""; }; - C1EA54781680FE1100A21259 /* Base64.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Base64.as; sourceTree = ""; }; - C1EA547A1680FE1100A21259 /* ByteString.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ByteString.as; sourceTree = ""; }; - C1EA547B1680FE1100A21259 /* DER.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DER.as; sourceTree = ""; }; - C1EA547C1680FE1100A21259 /* IAsn1Type.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IAsn1Type.as; sourceTree = ""; }; - C1EA547D1680FE1100A21259 /* Integer.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Integer.as; sourceTree = ""; }; - C1EA547E1680FE1100A21259 /* ObjectIdentifier.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ObjectIdentifier.as; sourceTree = ""; }; - C1EA547F1680FE1100A21259 /* OID.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = OID.as; sourceTree = ""; }; - C1EA54801680FE1100A21259 /* PEM.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PEM.as; sourceTree = ""; }; - C1EA54811680FE1100A21259 /* PrintableString.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PrintableString.as; sourceTree = ""; }; - C1EA54821680FE1100A21259 /* Sequence.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Sequence.as; sourceTree = ""; }; - C1EA54831680FE1100A21259 /* Set.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Set.as; sourceTree = ""; }; - C1EA54841680FE1100A21259 /* Type.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Type.as; sourceTree = ""; }; - C1EA54851680FE1100A21259 /* UTCTime.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = UTCTime.as; sourceTree = ""; }; - C1EA54861680FE1100A21259 /* Hex.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Hex.as; sourceTree = ""; }; - C1EA54871680FE1100A21259 /* Memory.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Memory.as; sourceTree = ""; }; - C1EA54881680FE1100A21259 /* IWebSocketLogger.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IWebSocketLogger.as; sourceTree = ""; }; - C1EA54891680FE1100A21259 /* WebSocket.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSocket.as; sourceTree = ""; }; - C1EA548A1680FE1100A21259 /* WebSocketEvent.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSocketEvent.as; sourceTree = ""; }; - C1EA548B1680FE1100A21259 /* WebSocketMain.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSocketMain.as; sourceTree = ""; }; - C1EA548C1680FE1100A21259 /* WebSocketMainInsecure.as */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSocketMainInsecure.as; sourceTree = ""; }; - C1EA548D1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA548E1680FE1100A21259 /* sample.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = sample.html; sourceTree = ""; }; - C1EA548F1680FE1100A21259 /* swfobject.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = swfobject.js; sourceTree = ""; }; - C1EA54901680FE1100A21259 /* web_socket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = web_socket.js; sourceTree = ""; }; - C1EA54911680FE1100A21259 /* WebSocketMain.swf */ = {isa = PBXFileReference; lastKnownFileType = file; path = WebSocketMain.swf; sourceTree = ""; }; - C1EA54921680FE1100A21259 /* WebSocketMainInsecure.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = WebSocketMainInsecure.zip; sourceTree = ""; }; - C1EA54931680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA54961680FE1100A21259 /* uglifyjs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = uglifyjs; sourceTree = ""; }; - C1EA54981680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA549A1680FE1100A21259 /* uglifyjs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = uglifyjs; sourceTree = ""; }; - C1EA549B1680FE1100A21259 /* docstyle.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = docstyle.css; sourceTree = ""; }; - C1EA549D1680FE1100A21259 /* parse-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "parse-js.js"; sourceTree = ""; }; - C1EA549E1680FE1100A21259 /* process.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = process.js; sourceTree = ""; }; - C1EA549F1680FE1100A21259 /* squeeze-more.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "squeeze-more.js"; sourceTree = ""; }; - C1EA54A01680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA54A11680FE1100A21259 /* README.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = README.html; sourceTree = ""; }; - C1EA54A21680FE1100A21259 /* README.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.org; sourceTree = ""; }; - C1EA54A41680FE1100A21259 /* beautify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = beautify.js; sourceTree = ""; }; - C1EA54A51680FE1100A21259 /* testparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = testparser.js; sourceTree = ""; }; - C1EA54A91680FE1100A21259 /* array1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array1.js; sourceTree = ""; }; - C1EA54AA1680FE1100A21259 /* array2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array2.js; sourceTree = ""; }; - C1EA54AB1680FE1100A21259 /* array3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array3.js; sourceTree = ""; }; - C1EA54AC1680FE1100A21259 /* array4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array4.js; sourceTree = ""; }; - C1EA54AD1680FE1100A21259 /* assignment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assignment.js; sourceTree = ""; }; - C1EA54AE1680FE1100A21259 /* concatstring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = concatstring.js; sourceTree = ""; }; - C1EA54AF1680FE1100A21259 /* const.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = const.js; sourceTree = ""; }; - C1EA54B01680FE1100A21259 /* empty-blocks.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "empty-blocks.js"; sourceTree = ""; }; - C1EA54B11680FE1100A21259 /* forstatement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = forstatement.js; sourceTree = ""; }; - C1EA54B21680FE1100A21259 /* if.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = if.js; sourceTree = ""; }; - C1EA54B31680FE1100A21259 /* ifreturn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn.js; sourceTree = ""; }; - C1EA54B41680FE1100A21259 /* ifreturn2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn2.js; sourceTree = ""; }; - C1EA54B51680FE1100A21259 /* issue10.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue10.js; sourceTree = ""; }; - C1EA54B61680FE1100A21259 /* issue11.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue11.js; sourceTree = ""; }; - C1EA54B71680FE1100A21259 /* issue13.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue13.js; sourceTree = ""; }; - C1EA54B81680FE1100A21259 /* issue14.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue14.js; sourceTree = ""; }; - C1EA54B91680FE1100A21259 /* issue16.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue16.js; sourceTree = ""; }; - C1EA54BA1680FE1100A21259 /* issue17.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue17.js; sourceTree = ""; }; - C1EA54BB1680FE1100A21259 /* issue20.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue20.js; sourceTree = ""; }; - C1EA54BC1680FE1100A21259 /* issue21.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue21.js; sourceTree = ""; }; - C1EA54BD1680FE1100A21259 /* issue25.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue25.js; sourceTree = ""; }; - C1EA54BE1680FE1100A21259 /* issue27.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue27.js; sourceTree = ""; }; - C1EA54BF1680FE1100A21259 /* issue28.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue28.js; sourceTree = ""; }; - C1EA54C01680FE1100A21259 /* issue29.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue29.js; sourceTree = ""; }; - C1EA54C11680FE1100A21259 /* issue30.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue30.js; sourceTree = ""; }; - C1EA54C21680FE1100A21259 /* issue34.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue34.js; sourceTree = ""; }; - C1EA54C31680FE1100A21259 /* issue4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue4.js; sourceTree = ""; }; - C1EA54C41680FE1100A21259 /* issue48.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue48.js; sourceTree = ""; }; - C1EA54C51680FE1100A21259 /* issue50.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue50.js; sourceTree = ""; }; - C1EA54C61680FE1100A21259 /* issue53.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue53.js; sourceTree = ""; }; - C1EA54C71680FE1100A21259 /* issue54.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue54.1.js; sourceTree = ""; }; - C1EA54C81680FE1100A21259 /* issue68.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue68.js; sourceTree = ""; }; - C1EA54C91680FE1100A21259 /* issue69.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue69.js; sourceTree = ""; }; - C1EA54CA1680FE1100A21259 /* issue9.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue9.js; sourceTree = ""; }; - C1EA54CB1680FE1100A21259 /* mangle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mangle.js; sourceTree = ""; }; - C1EA54CC1680FE1100A21259 /* strict-equals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "strict-equals.js"; sourceTree = ""; }; - C1EA54CD1680FE1100A21259 /* var.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = var.js; sourceTree = ""; }; - C1EA54CE1680FE1100A21259 /* with.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = with.js; sourceTree = ""; }; - C1EA54D01680FE1100A21259 /* array1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array1.js; sourceTree = ""; }; - C1EA54D11680FE1100A21259 /* array2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array2.js; sourceTree = ""; }; - C1EA54D21680FE1100A21259 /* array3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array3.js; sourceTree = ""; }; - C1EA54D31680FE1100A21259 /* array4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array4.js; sourceTree = ""; }; - C1EA54D41680FE1100A21259 /* assignment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assignment.js; sourceTree = ""; }; - C1EA54D51680FE1100A21259 /* concatstring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = concatstring.js; sourceTree = ""; }; - C1EA54D61680FE1100A21259 /* const.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = const.js; sourceTree = ""; }; - C1EA54D71680FE1100A21259 /* empty-blocks.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "empty-blocks.js"; sourceTree = ""; }; - C1EA54D81680FE1100A21259 /* forstatement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = forstatement.js; sourceTree = ""; }; - C1EA54D91680FE1100A21259 /* if.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = if.js; sourceTree = ""; }; - C1EA54DA1680FE1100A21259 /* ifreturn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn.js; sourceTree = ""; }; - C1EA54DB1680FE1100A21259 /* ifreturn2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn2.js; sourceTree = ""; }; - C1EA54DC1680FE1100A21259 /* issue10.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue10.js; sourceTree = ""; }; - C1EA54DD1680FE1100A21259 /* issue11.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue11.js; sourceTree = ""; }; - C1EA54DE1680FE1100A21259 /* issue13.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue13.js; sourceTree = ""; }; - C1EA54DF1680FE1100A21259 /* issue14.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue14.js; sourceTree = ""; }; - C1EA54E01680FE1100A21259 /* issue16.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue16.js; sourceTree = ""; }; - C1EA54E11680FE1100A21259 /* issue17.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue17.js; sourceTree = ""; }; - C1EA54E21680FE1100A21259 /* issue20.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue20.js; sourceTree = ""; }; - C1EA54E31680FE1100A21259 /* issue21.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue21.js; sourceTree = ""; }; - C1EA54E41680FE1100A21259 /* issue25.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue25.js; sourceTree = ""; }; - C1EA54E51680FE1100A21259 /* issue27.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue27.js; sourceTree = ""; }; - C1EA54E61680FE1100A21259 /* issue28.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue28.js; sourceTree = ""; }; - C1EA54E71680FE1100A21259 /* issue29.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue29.js; sourceTree = ""; }; - C1EA54E81680FE1100A21259 /* issue30.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue30.js; sourceTree = ""; }; - C1EA54E91680FE1100A21259 /* issue34.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue34.js; sourceTree = ""; }; - C1EA54EA1680FE1100A21259 /* issue4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue4.js; sourceTree = ""; }; - C1EA54EB1680FE1100A21259 /* issue48.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue48.js; sourceTree = ""; }; - C1EA54EC1680FE1100A21259 /* issue50.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue50.js; sourceTree = ""; }; - C1EA54ED1680FE1100A21259 /* issue53.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue53.js; sourceTree = ""; }; - C1EA54EE1680FE1100A21259 /* issue54.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue54.1.js; sourceTree = ""; }; - C1EA54EF1680FE1100A21259 /* issue68.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue68.js; sourceTree = ""; }; - C1EA54F01680FE1100A21259 /* issue69.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue69.js; sourceTree = ""; }; - C1EA54F11680FE1100A21259 /* issue9.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue9.js; sourceTree = ""; }; - C1EA54F21680FE1100A21259 /* mangle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mangle.js; sourceTree = ""; }; - C1EA54F31680FE1100A21259 /* strict-equals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "strict-equals.js"; sourceTree = ""; }; - C1EA54F41680FE1100A21259 /* var.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = var.js; sourceTree = ""; }; - C1EA54F51680FE1100A21259 /* with.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = with.js; sourceTree = ""; }; - C1EA54F61680FE1100A21259 /* scripts.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = scripts.js; sourceTree = ""; }; - C1EA54F81680FE1100A21259 /* instrument.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = instrument.js; sourceTree = ""; }; - C1EA54F91680FE1100A21259 /* instrument2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = instrument2.js; sourceTree = ""; }; - C1EA54FA1680FE1100A21259 /* uglify-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "uglify-js.js"; sourceTree = ""; }; - C1EA54FD1680FE1100A21259 /* client-unix.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "client-unix.js"; sourceTree = ""; }; - C1EA54FE1680FE1100A21259 /* client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client.js; sourceTree = ""; }; - C1EA54FF1680FE1100A21259 /* server-unix.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "server-unix.js"; sourceTree = ""; }; - C1EA55011680FE1100A21259 /* websocket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = websocket.js; sourceTree = ""; }; - C1EA55021680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA55031680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA55041680FE1100A21259 /* new */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = new; sourceTree = ""; }; - C1EA55051680FE1100A21259 /* old */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = old; sourceTree = ""; }; - C1EA55061680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA55071680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA55091680FE1100A21259 /* test-basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-basic.js"; sourceTree = ""; }; - C1EA550A1680FE1100A21259 /* test-client-close.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-client-close.js"; sourceTree = ""; }; - C1EA550B1680FE1100A21259 /* test-readonly-attrs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-readonly-attrs.js"; sourceTree = ""; }; - C1EA550C1680FE1100A21259 /* test-ready-state.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-ready-state.js"; sourceTree = ""; }; - C1EA550D1680FE1100A21259 /* test-server-close.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-server-close.js"; sourceTree = ""; }; - C1EA550E1680FE1100A21259 /* test-unix-send-fd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-unix-send-fd.js"; sourceTree = ""; }; - C1EA550F1680FE1100A21259 /* test-unix-sockets.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-unix-sockets.js"; sourceTree = ""; }; - C1EA55111680FE1100A21259 /* autotest.watchr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = autotest.watchr; sourceTree = ""; }; - C1EA55121680FE1100A21259 /* demo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = demo.js; sourceTree = ""; }; - C1EA55131680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA55141680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA55161680FE1100A21259 /* test-constants.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-constants.js"; sourceTree = ""; }; - C1EA55171680FE1100A21259 /* test-headers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-headers.js"; sourceTree = ""; }; - C1EA55181680FE1100A21259 /* test-request.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-request.js"; sourceTree = ""; }; - C1EA55191680FE1100A21259 /* XMLHttpRequest.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = XMLHttpRequest.js; sourceTree = ""; }; - C1EA551A1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA551B1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA551D1680FE1100A21259 /* browserify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browserify.js; sourceTree = ""; }; - C1EA551E1680FE1100A21259 /* events.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = events.test.js; sourceTree = ""; }; - C1EA551F1680FE1100A21259 /* io.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = io.test.js; sourceTree = ""; }; - C1EA55211680FE1100A21259 /* builder.common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = builder.common.js; sourceTree = ""; }; - C1EA55221680FE1100A21259 /* builder.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = builder.test.js; sourceTree = ""; }; - C1EA55231680FE1100A21259 /* parser.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.test.js; sourceTree = ""; }; - C1EA55241680FE1100A21259 /* socket.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = socket.test.js; sourceTree = ""; }; - C1EA55251680FE1100A21259 /* util.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.test.js; sourceTree = ""; }; - C1EA55261680FE1100A21259 /* worker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = worker.js; sourceTree = ""; }; - C1EA55271680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA55281680FE1100A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA552A1680FE1100A21259 /* _id.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = _id.js; sourceTree = ""; }; - C1EA552B1680FE1100A21259 /* bidirectional.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bidirectional.js; sourceTree = ""; }; - C1EA552C1680FE1100A21259 /* broadcast.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = broadcast.js; sourceTree = ""; }; - C1EA552D1680FE1100A21259 /* bundle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bundle.js; sourceTree = ""; }; - C1EA552E1680FE1100A21259 /* circular.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = circular.js; sourceTree = ""; }; - C1EA552F1680FE1100A21259 /* double.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = double.js; sourceTree = ""; }; - C1EA55301680FE1100A21259 /* emit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = emit.js; sourceTree = ""; }; - C1EA55311680FE1100A21259 /* error.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = error.js; sourceTree = ""; }; - C1EA55331680FE1100A21259 /* agent1-cert.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "agent1-cert.pem"; sourceTree = ""; }; - C1EA55341680FE1100A21259 /* agent1-csr.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "agent1-csr.pem"; sourceTree = ""; }; - C1EA55351680FE1100A21259 /* agent1-key.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "agent1-key.pem"; sourceTree = ""; }; - C1EA55361680FE1100A21259 /* agent2-cert.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "agent2-cert.pem"; sourceTree = ""; }; - C1EA55371680FE1100A21259 /* agent2-csr.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "agent2-csr.pem"; sourceTree = ""; }; - C1EA55381680FE1100A21259 /* agent2-key.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "agent2-key.pem"; sourceTree = ""; }; - C1EA55391680FE1100A21259 /* middleware.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = middleware.js; sourceTree = ""; }; - C1EA553A1680FE1100A21259 /* nested.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nested.js; sourceTree = ""; }; - C1EA553B1680FE1100A21259 /* null.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = null.js; sourceTree = ""; }; - C1EA553C1680FE1100A21259 /* obj.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = obj.js; sourceTree = ""; }; - C1EA553D1680FE1100A21259 /* recon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = recon.js; sourceTree = ""; }; - C1EA553E1680FE1100A21259 /* refs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = refs.js; sourceTree = ""; }; - C1EA553F1680FE1100A21259 /* self-referential.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "self-referential.js"; sourceTree = ""; }; - C1EA55401680FE1100A21259 /* simple.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = simple.js; sourceTree = ""; }; - C1EA55411680FE1100A21259 /* single.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = single.js; sourceTree = ""; }; - C1EA55421680FE1100A21259 /* stream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stream.js; sourceTree = ""; }; - C1EA55431680FE1100A21259 /* tls.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tls.js; sourceTree = ""; }; - C1EA55441680FE1100A21259 /* unicode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = unicode.js; sourceTree = ""; }; - C1EA55451680FE1100A21259 /* unix.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = unix.js; sourceTree = ""; }; - C1EA55471680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA55481680FE1100A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA55491680FE1100A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA554A1680FE1100A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA554C1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA554E1680FE1100A21259 /* protocol.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = protocol.markdown; sourceTree = ""; }; - C1EA55501680FE1100A21259 /* proto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = proto.js; sourceTree = ""; }; - C1EA55511680FE1100A21259 /* weak.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = weak.js; sourceTree = ""; }; - C1EA55521680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA55541680FE1100A21259 /* foreach.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foreach.js; sourceTree = ""; }; - C1EA55551680FE1100A21259 /* is_enum.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = is_enum.js; sourceTree = ""; }; - C1EA55561680FE1100A21259 /* keys.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = keys.js; sourceTree = ""; }; - C1EA55571680FE1100A21259 /* scrub.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = scrub.js; sourceTree = ""; }; - C1EA55581680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA555B1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA555D1680FE1100A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA555E1680FE1100A21259 /* stringify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stringify.js; sourceTree = ""; }; - C1EA555F1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA55601680FE1100A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA55621680FE1100A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA55631680FE1100A21259 /* stringify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stringify.js; sourceTree = ""; }; - C1EA55651680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA55661680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA55681680FE1100A21259 /* json.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json.js; sourceTree = ""; }; - C1EA55691680FE1100A21259 /* leaves.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = leaves.js; sourceTree = ""; }; - C1EA556A1680FE1100A21259 /* negative.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = negative.js; sourceTree = ""; }; - C1EA556B1680FE1100A21259 /* scrub.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = scrub.js; sourceTree = ""; }; - C1EA556C1680FE1100A21259 /* stringify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stringify.js; sourceTree = ""; }; - C1EA556D1680FE1100A21259 /* fail.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fail.js; sourceTree = ""; }; - C1EA556E1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA556F1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA55701680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA55711680FE1100A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA55731680FE1100A21259 /* circular.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = circular.js; sourceTree = ""; }; - C1EA55741680FE1100A21259 /* date.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = date.js; sourceTree = ""; }; - C1EA55751680FE1100A21259 /* equal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = equal.js; sourceTree = ""; }; - C1EA55761680FE1100A21259 /* error.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = error.js; sourceTree = ""; }; - C1EA55771680FE1100A21259 /* has.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = has.js; sourceTree = ""; }; - C1EA55781680FE1100A21259 /* instance.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = instance.js; sourceTree = ""; }; - C1EA55791680FE1100A21259 /* interface.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = interface.js; sourceTree = ""; }; - C1EA557A1680FE1100A21259 /* json.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json.js; sourceTree = ""; }; - C1EA557B1680FE1100A21259 /* keys.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = keys.js; sourceTree = ""; }; - C1EA557C1680FE1100A21259 /* leaves.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = leaves.js; sourceTree = ""; }; - C1EA557E1680FE1100A21259 /* deep_equal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = deep_equal.js; sourceTree = ""; }; - C1EA557F1680FE1100A21259 /* mutability.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mutability.js; sourceTree = ""; }; - C1EA55801680FE1100A21259 /* negative.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = negative.js; sourceTree = ""; }; - C1EA55811680FE1100A21259 /* obj.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = obj.js; sourceTree = ""; }; - C1EA55821680FE1100A21259 /* siblings.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = siblings.js; sourceTree = ""; }; - C1EA55831680FE1100A21259 /* stop.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stop.js; sourceTree = ""; }; - C1EA55841680FE1100A21259 /* stringify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stringify.js; sourceTree = ""; }; - C1EA55851680FE1100A21259 /* subexpr.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = subexpr.js; sourceTree = ""; }; - C1EA55861680FE1100A21259 /* super_deep.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = super_deep.js; sourceTree = ""; }; - C1EA55881680FE1100A21259 /* leaves.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = leaves.js; sourceTree = ""; }; - C1EA55891680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA558A1680FE1100A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA558C1680FE1100A21259 /* circular.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = circular.js; sourceTree = ""; }; - C1EA558D1680FE1100A21259 /* fn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fn.js; sourceTree = ""; }; - C1EA558E1680FE1100A21259 /* proto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = proto.js; sourceTree = ""; }; - C1EA558F1680FE1100A21259 /* scrub.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = scrub.js; sourceTree = ""; }; - C1EA55901680FE1100A21259 /* wrap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = wrap.js; sourceTree = ""; }; - C1EA55921680FE1100A21259 /* test.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = test.sh; sourceTree = ""; }; - C1EA55941680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA55951680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA55971680FE1100A21259 /* express */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = express; sourceTree = ""; }; - C1EA55981680FE1100A21259 /* client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client.js; sourceTree = ""; }; - C1EA55991680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA559A1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA559C1680FE1100A21259 /* application.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = application.js; sourceTree = ""; }; - C1EA559D1680FE1100A21259 /* express.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = express.js; sourceTree = ""; }; - C1EA559E1680FE1100A21259 /* middleware.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = middleware.js; sourceTree = ""; }; - C1EA559F1680FE1100A21259 /* request.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = request.js; sourceTree = ""; }; - C1EA55A01680FE1100A21259 /* response.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = response.js; sourceTree = ""; }; - C1EA55A21680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA55A31680FE1100A21259 /* route.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = route.js; sourceTree = ""; }; - C1EA55A41680FE1100A21259 /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; - C1EA55A51680FE1100A21259 /* view.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = view.js; sourceTree = ""; }; - C1EA55A61680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA55A71680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA55AA1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA55AB1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA55AC1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA55AD1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA55AE1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA55B01680FE1100A21259 /* crc.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = crc.test.js; sourceTree = ""; }; - C1EA55B21680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA55B31680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA55B41680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA55B51680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA55B71680FE1100A21259 /* commander.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = commander.js; sourceTree = ""; }; - C1EA55B81680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA55B91680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA55BA1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA55BC1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA55BD1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA55BE1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA55C01680FE1100A21259 /* cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cache.js; sourceTree = ""; }; - C1EA55C11680FE1100A21259 /* connect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = connect.js; sourceTree = ""; }; - C1EA55C21680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA55C41680FE1100A21259 /* basicAuth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basicAuth.js; sourceTree = ""; }; - C1EA55C51680FE1100A21259 /* bodyParser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bodyParser.js; sourceTree = ""; }; - C1EA55C61680FE1100A21259 /* compress.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compress.js; sourceTree = ""; }; - C1EA55C71680FE1100A21259 /* cookieParser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cookieParser.js; sourceTree = ""; }; - C1EA55C81680FE1100A21259 /* cookieSession.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cookieSession.js; sourceTree = ""; }; - C1EA55C91680FE1100A21259 /* csrf.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = csrf.js; sourceTree = ""; }; - C1EA55CA1680FE1100A21259 /* directory.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = directory.js; sourceTree = ""; }; - C1EA55CB1680FE1100A21259 /* errorHandler.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = errorHandler.js; sourceTree = ""; }; - C1EA55CC1680FE1100A21259 /* favicon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = favicon.js; sourceTree = ""; }; - C1EA55CD1680FE1100A21259 /* json.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json.js; sourceTree = ""; }; - C1EA55CE1680FE1100A21259 /* limit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = limit.js; sourceTree = ""; }; - C1EA55CF1680FE1100A21259 /* logger.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = logger.js; sourceTree = ""; }; - C1EA55D01680FE1100A21259 /* methodOverride.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = methodOverride.js; sourceTree = ""; }; - C1EA55D11680FE1100A21259 /* multipart.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = multipart.js; sourceTree = ""; }; - C1EA55D21680FE1100A21259 /* query.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = query.js; sourceTree = ""; }; - C1EA55D31680FE1100A21259 /* responseTime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = responseTime.js; sourceTree = ""; }; - C1EA55D51680FE1100A21259 /* cookie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cookie.js; sourceTree = ""; }; - C1EA55D61680FE1100A21259 /* memory.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = memory.js; sourceTree = ""; }; - C1EA55D71680FE1100A21259 /* session.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = session.js; sourceTree = ""; }; - C1EA55D81680FE1100A21259 /* store.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = store.js; sourceTree = ""; }; - C1EA55D91680FE1100A21259 /* session.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = session.js; sourceTree = ""; }; - C1EA55DA1680FE1100A21259 /* static.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = static.js; sourceTree = ""; }; - C1EA55DB1680FE1100A21259 /* staticCache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = staticCache.js; sourceTree = ""; }; - C1EA55DC1680FE1100A21259 /* timeout.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = timeout.js; sourceTree = ""; }; - C1EA55DD1680FE1100A21259 /* urlencoded.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = urlencoded.js; sourceTree = ""; }; - C1EA55DE1680FE1100A21259 /* vhost.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = vhost.js; sourceTree = ""; }; - C1EA55DF1680FE1100A21259 /* patch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = patch.js; sourceTree = ""; }; - C1EA55E01680FE1100A21259 /* proto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = proto.js; sourceTree = ""; }; - C1EA55E21680FE1100A21259 /* directory.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = directory.html; sourceTree = ""; }; - C1EA55E31680FE1100A21259 /* error.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = error.html; sourceTree = ""; }; - C1EA55E41680FE1100A21259 /* favicon.ico */ = {isa = PBXFileReference; lastKnownFileType = image.ico; path = favicon.ico; sourceTree = ""; }; - C1EA55E61680FE1100A21259 /* page.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page.png; sourceTree = ""; }; - C1EA55E71680FE1100A21259 /* page_add.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_add.png; sourceTree = ""; }; - C1EA55E81680FE1100A21259 /* page_attach.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_attach.png; sourceTree = ""; }; - C1EA55E91680FE1100A21259 /* page_code.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_code.png; sourceTree = ""; }; - C1EA55EA1680FE1100A21259 /* page_copy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_copy.png; sourceTree = ""; }; - C1EA55EB1680FE1100A21259 /* page_delete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_delete.png; sourceTree = ""; }; - C1EA55EC1680FE1100A21259 /* page_edit.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_edit.png; sourceTree = ""; }; - C1EA55ED1680FE1100A21259 /* page_error.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_error.png; sourceTree = ""; }; - C1EA55EE1680FE1100A21259 /* page_excel.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_excel.png; sourceTree = ""; }; - C1EA55EF1680FE1100A21259 /* page_find.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_find.png; sourceTree = ""; }; - C1EA55F01680FE1100A21259 /* page_gear.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_gear.png; sourceTree = ""; }; - C1EA55F11680FE1100A21259 /* page_go.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_go.png; sourceTree = ""; }; - C1EA55F21680FE1100A21259 /* page_green.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_green.png; sourceTree = ""; }; - C1EA55F31680FE1100A21259 /* page_key.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_key.png; sourceTree = ""; }; - C1EA55F41680FE1100A21259 /* page_lightning.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_lightning.png; sourceTree = ""; }; - C1EA55F51680FE1100A21259 /* page_link.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_link.png; sourceTree = ""; }; - C1EA55F61680FE1100A21259 /* page_paintbrush.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_paintbrush.png; sourceTree = ""; }; - C1EA55F71680FE1100A21259 /* page_paste.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_paste.png; sourceTree = ""; }; - C1EA55F81680FE1100A21259 /* page_red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_red.png; sourceTree = ""; }; - C1EA55F91680FE1100A21259 /* page_refresh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_refresh.png; sourceTree = ""; }; - C1EA55FA1680FE1100A21259 /* page_save.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_save.png; sourceTree = ""; }; - C1EA55FB1680FE1100A21259 /* page_white.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white.png; sourceTree = ""; }; - C1EA55FC1680FE1100A21259 /* page_white_acrobat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_acrobat.png; sourceTree = ""; }; - C1EA55FD1680FE1100A21259 /* page_white_actionscript.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_actionscript.png; sourceTree = ""; }; - C1EA55FE1680FE1100A21259 /* page_white_add.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_add.png; sourceTree = ""; }; - C1EA55FF1680FE1100A21259 /* page_white_c.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_c.png; sourceTree = ""; }; - C1EA56001680FE1100A21259 /* page_white_camera.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_camera.png; sourceTree = ""; }; - C1EA56011680FE1100A21259 /* page_white_cd.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_cd.png; sourceTree = ""; }; - C1EA56021680FE1100A21259 /* page_white_code.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_code.png; sourceTree = ""; }; - C1EA56031680FE1100A21259 /* page_white_code_red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_code_red.png; sourceTree = ""; }; - C1EA56041680FE1100A21259 /* page_white_coldfusion.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_coldfusion.png; sourceTree = ""; }; - C1EA56051680FE1100A21259 /* page_white_compressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_compressed.png; sourceTree = ""; }; - C1EA56061680FE1100A21259 /* page_white_copy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_copy.png; sourceTree = ""; }; - C1EA56071680FE1100A21259 /* page_white_cplusplus.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_cplusplus.png; sourceTree = ""; }; - C1EA56081680FE1100A21259 /* page_white_csharp.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_csharp.png; sourceTree = ""; }; - C1EA56091680FE1100A21259 /* page_white_cup.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_cup.png; sourceTree = ""; }; - C1EA560A1680FE1100A21259 /* page_white_database.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_database.png; sourceTree = ""; }; - C1EA560B1680FE1100A21259 /* page_white_delete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_delete.png; sourceTree = ""; }; - C1EA560C1680FE1100A21259 /* page_white_dvd.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_dvd.png; sourceTree = ""; }; - C1EA560D1680FE1100A21259 /* page_white_edit.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_edit.png; sourceTree = ""; }; - C1EA560E1680FE1100A21259 /* page_white_error.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_error.png; sourceTree = ""; }; - C1EA560F1680FE1100A21259 /* page_white_excel.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_excel.png; sourceTree = ""; }; - C1EA56101680FE1100A21259 /* page_white_find.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_find.png; sourceTree = ""; }; - C1EA56111680FE1100A21259 /* page_white_flash.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_flash.png; sourceTree = ""; }; - C1EA56121680FE1100A21259 /* page_white_freehand.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_freehand.png; sourceTree = ""; }; - C1EA56131680FE1100A21259 /* page_white_gear.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_gear.png; sourceTree = ""; }; - C1EA56141680FE1100A21259 /* page_white_get.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_get.png; sourceTree = ""; }; - C1EA56151680FE1100A21259 /* page_white_go.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_go.png; sourceTree = ""; }; - C1EA56161680FE1100A21259 /* page_white_h.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_h.png; sourceTree = ""; }; - C1EA56171680FE1100A21259 /* page_white_horizontal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_horizontal.png; sourceTree = ""; }; - C1EA56181680FE1100A21259 /* page_white_key.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_key.png; sourceTree = ""; }; - C1EA56191680FE1100A21259 /* page_white_lightning.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_lightning.png; sourceTree = ""; }; - C1EA561A1680FE1100A21259 /* page_white_link.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_link.png; sourceTree = ""; }; - C1EA561B1680FE1100A21259 /* page_white_magnify.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_magnify.png; sourceTree = ""; }; - C1EA561C1680FE1100A21259 /* page_white_medal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_medal.png; sourceTree = ""; }; - C1EA561D1680FE1100A21259 /* page_white_office.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_office.png; sourceTree = ""; }; - C1EA561E1680FE1100A21259 /* page_white_paint.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_paint.png; sourceTree = ""; }; - C1EA561F1680FE1100A21259 /* page_white_paintbrush.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_paintbrush.png; sourceTree = ""; }; - C1EA56201680FE1100A21259 /* page_white_paste.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_paste.png; sourceTree = ""; }; - C1EA56211680FE1100A21259 /* page_white_php.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_php.png; sourceTree = ""; }; - C1EA56221680FE1100A21259 /* page_white_picture.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_picture.png; sourceTree = ""; }; - C1EA56231680FE1100A21259 /* page_white_powerpoint.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_powerpoint.png; sourceTree = ""; }; - C1EA56241680FE1100A21259 /* page_white_put.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_put.png; sourceTree = ""; }; - C1EA56251680FE1100A21259 /* page_white_ruby.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_ruby.png; sourceTree = ""; }; - C1EA56261680FE1100A21259 /* page_white_stack.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_stack.png; sourceTree = ""; }; - C1EA56271680FE1100A21259 /* page_white_star.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_star.png; sourceTree = ""; }; - C1EA56281680FE1100A21259 /* page_white_swoosh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_swoosh.png; sourceTree = ""; }; - C1EA56291680FE1100A21259 /* page_white_text.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_text.png; sourceTree = ""; }; - C1EA562A1680FE1100A21259 /* page_white_text_width.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_text_width.png; sourceTree = ""; }; - C1EA562B1680FE1100A21259 /* page_white_tux.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_tux.png; sourceTree = ""; }; - C1EA562C1680FE1100A21259 /* page_white_vector.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_vector.png; sourceTree = ""; }; - C1EA562D1680FE1100A21259 /* page_white_visualstudio.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_visualstudio.png; sourceTree = ""; }; - C1EA562E1680FE1100A21259 /* page_white_width.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_width.png; sourceTree = ""; }; - C1EA562F1680FE1100A21259 /* page_white_word.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_word.png; sourceTree = ""; }; - C1EA56301680FE1100A21259 /* page_white_world.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_world.png; sourceTree = ""; }; - C1EA56311680FE1100A21259 /* page_white_wrench.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_wrench.png; sourceTree = ""; }; - C1EA56321680FE1100A21259 /* page_white_zip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_white_zip.png; sourceTree = ""; }; - C1EA56331680FE1100A21259 /* page_word.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_word.png; sourceTree = ""; }; - C1EA56341680FE1100A21259 /* page_world.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = page_world.png; sourceTree = ""; }; - C1EA56351680FE1100A21259 /* style.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = style.css; sourceTree = ""; }; - C1EA56361680FE1100A21259 /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; - C1EA56371680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA563A1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA563B1680FE1100A21259 /* component.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = component.json; sourceTree = ""; }; - C1EA563C1680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA563D1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA563E1680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA563F1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56401680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA56421680FE1100A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA56431680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA56451680FE1100A21259 /* crc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = crc.js; sourceTree = ""; }; - C1EA56461680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA56471680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56481680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA564A1680FE1100A21259 /* crc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = crc.js; sourceTree = ""; }; - C1EA564C1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA564D1680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA564F1680FE1100A21259 /* bench-multipart-parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bench-multipart-parser.js"; sourceTree = ""; }; - C1EA56511680FE1100A21259 /* post.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = post.js; sourceTree = ""; }; - C1EA56521680FE1100A21259 /* upload.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = upload.js; sourceTree = ""; }; - C1EA56531680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56551680FE1100A21259 /* file.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file.js; sourceTree = ""; }; - C1EA56561680FE1100A21259 /* incoming_form.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = incoming_form.js; sourceTree = ""; }; - C1EA56571680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56581680FE1100A21259 /* multipart_parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = multipart_parser.js; sourceTree = ""; }; - C1EA56591680FE1100A21259 /* querystring_parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = querystring_parser.js; sourceTree = ""; }; - C1EA565A1680FE1100A21259 /* util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.js; sourceTree = ""; }; - C1EA565B1680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA565E1680FE1100A21259 /* dog.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = dog.js; sourceTree = ""; }; - C1EA565F1680FE1100A21259 /* event_emitter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event_emitter.js; sourceTree = ""; }; - C1EA56601680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56631680FE1100A21259 /* gently.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = gently.js; sourceTree = ""; }; - C1EA56641680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56651680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA56661680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56671680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA56691680FE1100A21259 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = common.js; sourceTree = ""; }; - C1EA566B1680FE1100A21259 /* test-gently.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-gently.js"; sourceTree = ""; }; - C1EA566C1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA566D1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA566F1680FE1100A21259 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = common.js; sourceTree = ""; }; - C1EA56721680FE1100A21259 /* funkyfilename.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = funkyfilename.txt; sourceTree = ""; }; - C1EA56731680FE1100A21259 /* plain.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = plain.txt; sourceTree = ""; }; - C1EA56761680FE1100A21259 /* info.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = info.md; sourceTree = ""; }; - C1EA56781680FE1100A21259 /* no-filename.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "no-filename.js"; sourceTree = ""; }; - C1EA56791680FE1100A21259 /* special-chars-in-filename.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "special-chars-in-filename.js"; sourceTree = ""; }; - C1EA567A1680FE1100A21259 /* multipart.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = multipart.js; sourceTree = ""; }; - C1EA567C1680FE1100A21259 /* test-fixtures.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-fixtures.js"; sourceTree = ""; }; - C1EA567E1680FE1100A21259 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = common.js; sourceTree = ""; }; - C1EA56801680FE1100A21259 /* test-multipart-parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-multipart-parser.js"; sourceTree = ""; }; - C1EA56821680FE1100A21259 /* test-file.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-file.js"; sourceTree = ""; }; - C1EA56831680FE1100A21259 /* test-incoming-form.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-incoming-form.js"; sourceTree = ""; }; - C1EA56841680FE1100A21259 /* test-multipart-parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-multipart-parser.js"; sourceTree = ""; }; - C1EA56851680FE1100A21259 /* test-querystring-parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-querystring-parser.js"; sourceTree = ""; }; - C1EA56871680FE1100A21259 /* test-multi-video-upload.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-multi-video-upload.js"; sourceTree = ""; }; - C1EA56881680FE1100A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA568A1680FE1100A21259 /* test-incoming-form.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-incoming-form.js"; sourceTree = ""; }; - C1EA568B1680FE1100A21259 /* TODO */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TODO; sourceTree = ""; }; - C1EA568D1680FE1100A21259 /* record.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = record.js; sourceTree = ""; }; - C1EA568F1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA56901680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA56911680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56921680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA56931680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56941680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA56961680FE1100A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA56971680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA56981680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA56991680FE1100A21259 /* benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = benchmark.js; sourceTree = ""; }; - C1EA569A1680FE1100A21259 /* component.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = component.json; sourceTree = ""; }; - C1EA569B1680FE1100A21259 /* examples.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = examples.js; sourceTree = ""; }; - C1EA569C1680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA569D1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA569F1680FE1100A21259 /* head.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = head.js; sourceTree = ""; }; - C1EA56A01680FE1100A21259 /* querystring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = querystring.js; sourceTree = ""; }; - C1EA56A11680FE1100A21259 /* tail.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tail.js; sourceTree = ""; }; - C1EA56A21680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA56A31680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56A41680FE1100A21259 /* querystring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = querystring.js; sourceTree = ""; }; - C1EA56A51680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA56A81680FE1100A21259 /* expect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = expect.js; sourceTree = ""; }; - C1EA56A91680FE1100A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA56AA1680FE1100A21259 /* jquery.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.js; sourceTree = ""; }; - C1EA56AB1680FE1100A21259 /* mocha.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = mocha.css; sourceTree = ""; }; - C1EA56AC1680FE1100A21259 /* mocha.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mocha.js; sourceTree = ""; }; - C1EA56AD1680FE1100A21259 /* qs.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = qs.css; sourceTree = ""; }; - C1EA56AE1680FE1100A21259 /* qs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = qs.js; sourceTree = ""; }; - C1EA56AF1680FE1100A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA56B01680FE1100A21259 /* stringify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stringify.js; sourceTree = ""; }; - C1EA56B11680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56B21680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA56B31680FE1100A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA56B51680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA56B61680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA56B71680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56B81680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56B91680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA56BB1680FE1100A21259 /* mocha.opts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mocha.opts; sourceTree = ""; }; - C1EA56BC1680FE1100A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA56BD1680FE1100A21259 /* serialize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = serialize.js; sourceTree = ""; }; - C1EA56BF1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA56C01680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA56C11680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56C21680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA56C31680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56C41680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA56C61680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA56C71680FE1100A21259 /* debug.component.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = debug.component.js; sourceTree = ""; }; - C1EA56C81680FE1100A21259 /* debug.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = debug.js; sourceTree = ""; }; - C1EA56CA1680FE1100A21259 /* app.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = app.js; sourceTree = ""; }; - C1EA56CB1680FE1100A21259 /* browser.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = browser.html; sourceTree = ""; }; - C1EA56CC1680FE1100A21259 /* wildcards.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = wildcards.js; sourceTree = ""; }; - C1EA56CD1680FE1100A21259 /* worker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = worker.js; sourceTree = ""; }; - C1EA56CE1680FE1100A21259 /* head.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = head.js; sourceTree = ""; }; - C1EA56CF1680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA56D01680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56D21680FE1100A21259 /* debug.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = debug.js; sourceTree = ""; }; - C1EA56D31680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA56D41680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56D51680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA56D61680FE1100A21259 /* tail.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tail.js; sourceTree = ""; }; - C1EA56D81680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA56D91680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56DA1680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA56DB1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56DC1680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA56DE1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56DF1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56E11680FE1100A21259 /* .gitignore.orig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore.orig; sourceTree = ""; }; - C1EA56E21680FE1100A21259 /* .gitignore.rej */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore.rej; sourceTree = ""; }; - C1EA56E31680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA56E41680FE1100A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA56E61680FE1100A21259 /* pow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pow.js; sourceTree = ""; }; - C1EA56E71680FE1100A21259 /* pow.js.orig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pow.js.orig; sourceTree = ""; }; - C1EA56E81680FE1100A21259 /* pow.js.rej */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pow.js.rej; sourceTree = ""; }; - C1EA56E91680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56EA1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA56EB1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA56EC1680FE1100A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA56EE1680FE1100A21259 /* chmod.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = chmod.js; sourceTree = ""; }; - C1EA56EF1680FE1100A21259 /* clobber.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clobber.js; sourceTree = ""; }; - C1EA56F01680FE1100A21259 /* mkdirp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mkdirp.js; sourceTree = ""; }; - C1EA56F11680FE1100A21259 /* perm.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = perm.js; sourceTree = ""; }; - C1EA56F21680FE1100A21259 /* perm_sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = perm_sync.js; sourceTree = ""; }; - C1EA56F31680FE1100A21259 /* race.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = race.js; sourceTree = ""; }; - C1EA56F41680FE1100A21259 /* rel.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rel.js; sourceTree = ""; }; - C1EA56F51680FE1100A21259 /* return.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = return.js; sourceTree = ""; }; - C1EA56F61680FE1100A21259 /* return_sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = return_sync.js; sourceTree = ""; }; - C1EA56F71680FE1100A21259 /* root.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = root.js; sourceTree = ""; }; - C1EA56F81680FE1100A21259 /* sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sync.js; sourceTree = ""; }; - C1EA56F91680FE1100A21259 /* umask.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = umask.js; sourceTree = ""; }; - C1EA56FA1680FE1100A21259 /* umask_sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = umask_sync.js; sourceTree = ""; }; - C1EA56FC1680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA56FD1680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA56FE1680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA56FF1680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA57001680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA57011680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA57031680FE1100A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA57041680FE1100A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA57051680FE1100A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA57071680FE1100A21259 /* send.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = send.js; sourceTree = ""; }; - C1EA57081680FE1100A21259 /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; - C1EA57091680FE1100A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA570C1680FE1100A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA570D1680FE1100A21259 /* mime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mime.js; sourceTree = ""; }; - C1EA570E1680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA570F1680FE1100A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA57101680FE1100A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA57121680FE1100A21259 /* mime.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mime.types; sourceTree = ""; }; - C1EA57131680FE1100A21259 /* node.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = node.types; sourceTree = ""; }; - C1EA57141680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA57151680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA57161680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA57171680FE1100A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA57181680FE1100A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA57191680FE1100A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA571A1680FE1100A21259 /* phantom.coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = phantom.coffee; sourceTree = ""; }; - C1EA571B1680FE1100A21259 /* phantom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = phantom.js; sourceTree = ""; }; - C1EA571C1680FE1100A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA571D1680FE1100A21259 /* shim.coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = shim.coffee; sourceTree = ""; }; - C1EA571E1680FE1100A21259 /* shim.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shim.js; sourceTree = ""; }; - C1EA57201680FE1200A21259 /* adv.coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = adv.coffee; sourceTree = ""; }; - C1EA57211680FE1200A21259 /* basic.coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = basic.coffee; sourceTree = ""; }; - C1EA57221680FE1200A21259 /* inject.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inject.js; sourceTree = ""; }; - C1EA57231680FE1200A21259 /* page.coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = page.coffee; sourceTree = ""; }; - C1EA57241680FE1200A21259 /* test.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = test.gif; sourceTree = ""; }; - C1EA57271680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA57281680FE1200A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA57291680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA572A1680FE1200A21259 /* platform.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = platform.js; sourceTree = ""; }; - C1EA572B1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA572D1680FE1200A21259 /* run-test.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "run-test.sh"; sourceTree = ""; }; - C1EA572E1680FE1200A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA57301680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA57311680FE1200A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA57331680FE1200A21259 /* http-server-request-listener-proxy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-server-request-listener-proxy.js"; sourceTree = ""; }; - C1EA57341680FE1200A21259 /* prison-init.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "prison-init.js"; sourceTree = ""; }; - C1EA57351680FE1200A21259 /* prison-session-initializer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "prison-session-initializer.js"; sourceTree = ""; }; - C1EA57361680FE1200A21259 /* prison-util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "prison-util.js"; sourceTree = ""; }; - C1EA57371680FE1200A21259 /* prison.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = prison.js; sourceTree = ""; }; - C1EA57381680FE1200A21259 /* pubsub-client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pubsub-client.js"; sourceTree = ""; }; - C1EA57391680FE1200A21259 /* pubsub-server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pubsub-server.js"; sourceTree = ""; }; - C1EA573A1680FE1200A21259 /* ramp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ramp.js; sourceTree = ""; }; - C1EA573B1680FE1200A21259 /* server-client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "server-client.js"; sourceTree = ""; }; - C1EA573C1680FE1200A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA573D1680FE1200A21259 /* session-client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "session-client.js"; sourceTree = ""; }; - C1EA573E1680FE1200A21259 /* session-queue.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "session-queue.js"; sourceTree = ""; }; - C1EA573F1680FE1200A21259 /* session.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = session.js; sourceTree = ""; }; - C1EA57401680FE1200A21259 /* slave.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = slave.js; sourceTree = ""; }; - C1EA57421680FE1200A21259 /* slave_prison.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = slave_prison.html; sourceTree = ""; }; - C1EA57431680FE1200A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA57461680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA57471680FE1200A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA57481680FE1200A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA57491680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA574B1680FE1200A21259 /* bane.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bane.js; sourceTree = ""; }; - C1EA574C1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA574D1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA574E1680FE1200A21259 /* Readme.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.rst; sourceTree = ""; }; - C1EA57501680FE1200A21259 /* bane-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bane-test.js"; sourceTree = ""; }; - C1EA57511680FE1200A21259 /* todo.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = todo.org; sourceTree = ""; }; - C1EA57541680FE1200A21259 /* faye-browser-min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "faye-browser-min.js"; sourceTree = ""; }; - C1EA57551680FE1200A21259 /* faye-browser-min.js.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "faye-browser-min.js.map"; sourceTree = ""; }; - C1EA57561680FE1200A21259 /* faye-browser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "faye-browser.js"; sourceTree = ""; }; - C1EA57571680FE1200A21259 /* History.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.txt; sourceTree = ""; }; - C1EA57591680FE1200A21259 /* faye-node.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "faye-node.js"; sourceTree = ""; }; - C1EA575C1680FE1200A21259 /* cookiejar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cookiejar.js; sourceTree = ""; }; - C1EA575D1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA575E1680FE1200A21259 /* readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.md; sourceTree = ""; }; - C1EA57601680FE1200A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA57621680FE1200A21259 /* CHANGELOG.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGELOG.txt; sourceTree = ""; }; - C1EA57641680FE1200A21259 /* autobahn_client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autobahn_client.js; sourceTree = ""; }; - C1EA57651680FE1200A21259 /* client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client.js; sourceTree = ""; }; - C1EA57661680FE1200A21259 /* haproxy.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = haproxy.conf; sourceTree = ""; }; - C1EA57671680FE1200A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA57681680FE1200A21259 /* sse.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = sse.html; sourceTree = ""; }; - C1EA57691680FE1200A21259 /* ws.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ws.html; sourceTree = ""; }; - C1EA576C1680FE1200A21259 /* eventsource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = eventsource.js; sourceTree = ""; }; - C1EA576F1680FE1200A21259 /* event.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event.js; sourceTree = ""; }; - C1EA57701680FE1200A21259 /* event_target.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event_target.js; sourceTree = ""; }; - C1EA57711680FE1200A21259 /* api.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = api.js; sourceTree = ""; }; - C1EA57721680FE1200A21259 /* client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client.js; sourceTree = ""; }; - C1EA57731680FE1200A21259 /* draft75_parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = draft75_parser.js; sourceTree = ""; }; - C1EA57741680FE1200A21259 /* draft76_parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = draft76_parser.js; sourceTree = ""; }; - C1EA57761680FE1200A21259 /* handshake.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = handshake.js; sourceTree = ""; }; - C1EA57771680FE1200A21259 /* stream_reader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stream_reader.js; sourceTree = ""; }; - C1EA57781680FE1200A21259 /* hybi_parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hybi_parser.js; sourceTree = ""; }; - C1EA57791680FE1200A21259 /* websocket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = websocket.js; sourceTree = ""; }; - C1EA577A1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA577B1680FE1200A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA577F1680FE1200A21259 /* client_spec.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client_spec.js; sourceTree = ""; }; - C1EA57801680FE1200A21259 /* draft75parser_spec.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = draft75parser_spec.js; sourceTree = ""; }; - C1EA57811680FE1200A21259 /* draft76parser_spec.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = draft76parser_spec.js; sourceTree = ""; }; - C1EA57821680FE1200A21259 /* hybi_parser_spec.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hybi_parser_spec.js; sourceTree = ""; }; - C1EA57831680FE1200A21259 /* runner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runner.js; sourceTree = ""; }; - C1EA57841680FE1200A21259 /* server.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.crt; sourceTree = ""; }; - C1EA57851680FE1200A21259 /* server.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.key; sourceTree = ""; }; - C1EA57861680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA57871680FE1200A21259 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - C1EA57891680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA578B1680FE1200A21259 /* bench.gnu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bench.gnu; sourceTree = ""; }; - C1EA578C1680FE1200A21259 /* bench.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = bench.sh; sourceTree = ""; }; - C1EA578D1680FE1200A21259 /* benchmark-native.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "benchmark-native.c"; sourceTree = ""; }; - C1EA578E1680FE1200A21259 /* benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = benchmark.js; sourceTree = ""; }; - C1EA578F1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA57901680FE1200A21259 /* LICENSE.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.md; sourceTree = ""; }; - C1EA57911680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA57921680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA57941680FE1200A21259 /* compare_v1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compare_v1.js; sourceTree = ""; }; - C1EA57951680FE1200A21259 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = test.html; sourceTree = ""; }; - C1EA57961680FE1200A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA57971680FE1200A21259 /* uuid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = uuid.js; sourceTree = ""; }; - C1EA57981680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA57991680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA579A1680FE1200A21259 /* run-tests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "run-tests.js"; sourceTree = ""; }; - C1EA579C1680FE1200A21259 /* cache-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "cache-test.js"; sourceTree = ""; }; - C1EA579D1680FE1200A21259 /* events-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "events-test.js"; sourceTree = ""; }; - C1EA579F1680FE1200A21259 /* phantom-factory.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "phantom-factory.js"; sourceTree = ""; }; - C1EA57A01680FE1200A21259 /* phantom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = phantom.js; sourceTree = ""; }; - C1EA57A11680FE1200A21259 /* server-loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "server-loader.js"; sourceTree = ""; }; - C1EA57A21680FE1200A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA57A31680FE1200A21259 /* joinable-and-unjoinable-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "joinable-and-unjoinable-test.js"; sourceTree = ""; }; - C1EA57A41680FE1200A21259 /* main-test-session-client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "main-test-session-client.js"; sourceTree = ""; }; - C1EA57A51680FE1200A21259 /* main-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "main-test.js"; sourceTree = ""; }; - C1EA57A61680FE1200A21259 /* session-lifecycle-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "session-lifecycle-test.js"; sourceTree = ""; }; - C1EA57A71680FE1200A21259 /* slave-header-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "slave-header-test.js"; sourceTree = ""; }; - C1EA57A81680FE1200A21259 /* test-helper-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper-test.js"; sourceTree = ""; }; - C1EA57AB1680FE1200A21259 /* cycle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cycle.js; sourceTree = ""; }; - C1EA57AC1680FE1200A21259 /* json.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json.js; sourceTree = ""; }; - C1EA57AD1680FE1200A21259 /* json2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json2.js; sourceTree = ""; }; - C1EA57AE1680FE1200A21259 /* json_parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json_parse.js; sourceTree = ""; }; - C1EA57AF1680FE1200A21259 /* json_parse_state.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json_parse_state.js; sourceTree = ""; }; - C1EA57B01680FE1200A21259 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; - C1EA57B21680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA57B31680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA57B41680FE1200A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA57B51680FE1200A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA57B61680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA57B91680FE1200A21259 /* alternatives.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = alternatives.json; sourceTree = ""; }; - C1EA57BB1680FE1200A21259 /* 1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 1.png; sourceTree = ""; }; - C1EA57BC1680FE1200A21259 /* 2.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = 2.html; sourceTree = ""; }; - C1EA57BD1680FE1200A21259 /* 3.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 3.txt; sourceTree = ""; }; - C1EA57BE1680FE1200A21259 /* 4.tgz */ = {isa = PBXFileReference; lastKnownFileType = file; path = 4.tgz; sourceTree = ""; }; - C1EA57BF1680FE1200A21259 /* medium.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = medium.json; sourceTree = ""; }; - C1EA57C01680FE1200A21259 /* publish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = publish.js; sourceTree = ""; }; - C1EA57C11680FE1200A21259 /* README.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.rst; sourceTree = ""; }; - C1EA57C21680FE1200A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA57C31680FE1200A21259 /* small.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = small.json; sourceTree = ""; }; - C1EA57C51680FE1200A21259 /* file-etag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-etag.js"; sourceTree = ""; }; - C1EA57C61680FE1200A21259 /* http-proxy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-proxy.js"; sourceTree = ""; }; - C1EA57C71680FE1200A21259 /* invalid-error.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "invalid-error.js"; sourceTree = ""; }; - C1EA57C81680FE1200A21259 /* load-path.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "load-path.js"; sourceTree = ""; }; - C1EA57CA1680FE1200A21259 /* iife.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = iife.js; sourceTree = ""; }; - C1EA57CB1680FE1200A21259 /* ramp-resources.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ramp-resources.js"; sourceTree = ""; }; - C1EA57CC1680FE1200A21259 /* resource-combiner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-combiner.js"; sourceTree = ""; }; - C1EA57CD1680FE1200A21259 /* resource-file-resolver.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-file-resolver.js"; sourceTree = ""; }; - C1EA57CE1680FE1200A21259 /* resource-middleware.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-middleware.js"; sourceTree = ""; }; - C1EA57CF1680FE1200A21259 /* resource-set-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-cache.js"; sourceTree = ""; }; - C1EA57D01680FE1200A21259 /* resource-set.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set.js"; sourceTree = ""; }; - C1EA57D11680FE1200A21259 /* resource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resource.js; sourceTree = ""; }; - C1EA57D21680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA57D51680FE1200A21259 /* lodash */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = lodash; sourceTree = ""; }; - C1EA57D81680FE1200A21259 /* minify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minify.js; sourceTree = ""; }; - C1EA57D91680FE1200A21259 /* post-compile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "post-compile.js"; sourceTree = ""; }; - C1EA57DA1680FE1200A21259 /* pre-compile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pre-compile.js"; sourceTree = ""; }; - C1EA57DB1680FE1200A21259 /* build.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = build.js; sourceTree = ""; }; - C1EA57DD1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA57DE1680FE1200A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA57DF1680FE1200A21259 /* lodash.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lodash.js; sourceTree = ""; }; - C1EA57E01680FE1200A21259 /* lodash.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lodash.min.js; sourceTree = ""; }; - C1EA57E11680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA57E31680FE1200A21259 /* perf.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = perf.js; sourceTree = ""; }; - C1EA57E41680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA57E61680FE1200A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA57E91680FE1200A21259 /* benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = benchmark.js; sourceTree = ""; }; - C1EA57EA1680FE1200A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA57EB1680FE1200A21259 /* nano.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = nano.jar; sourceTree = ""; }; - C1EA57EC1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA57EE1680FE1200A21259 /* compiler.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = compiler.jar; sourceTree = ""; }; - C1EA57EF1680FE1200A21259 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; - C1EA57F01680FE1200A21259 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; - C1EA57F21680FE1200A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA57F31680FE1200A21259 /* platform.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = platform.js; sourceTree = ""; }; - C1EA57F41680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA57F71680FE1200A21259 /* qunit-1.8.0.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "qunit-1.8.0.js"; sourceTree = ""; }; - C1EA57F81680FE1200A21259 /* qunit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = qunit.js; sourceTree = ""; }; - C1EA57F91680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA57FB1680FE1200A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA57FC1680FE1200A21259 /* qunit-clib.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "qunit-clib.js"; sourceTree = ""; }; - C1EA57FD1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58001680FE1200A21259 /* consolidator.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = consolidator.js; sourceTree = ""; }; - C1EA58011680FE1200A21259 /* parse-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "parse-js.js"; sourceTree = ""; }; - C1EA58021680FE1200A21259 /* process.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = process.js; sourceTree = ""; }; - C1EA58031680FE1200A21259 /* squeeze-more.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "squeeze-more.js"; sourceTree = ""; }; - C1EA58041680FE1200A21259 /* README.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.org; sourceTree = ""; }; - C1EA58051680FE1200A21259 /* uglify-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "uglify-js.js"; sourceTree = ""; }; - C1EA58071680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA58081680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58091680FE1200A21259 /* underscore-min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "underscore-min.js"; sourceTree = ""; }; - C1EA580A1680FE1200A21259 /* underscore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = underscore.js; sourceTree = ""; }; - C1EA580C1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA580D1680FE1200A21259 /* mime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mime.js; sourceTree = ""; }; - C1EA580E1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA580F1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58101680FE1200A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA58121680FE1200A21259 /* mime.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mime.types; sourceTree = ""; }; - C1EA58131680FE1200A21259 /* node.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = node.types; sourceTree = ""; }; - C1EA58151680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA58161680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA58171680FE1200A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA581A1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA581C1680FE1200A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA581D1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA581E1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA581F1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58211680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA58221680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58231680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58251680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA58261680FE1200A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA58271680FE1200A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA58291680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA582A1680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA582B1680FE1200A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA582C1680FE1200A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA582D1680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA582F1680FE1200A21259 /* multi-glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "multi-glob.js"; sourceTree = ""; }; - C1EA58301680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA58331680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA58341680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA58361680FE1200A21259 /* g.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = g.js; sourceTree = ""; }; - C1EA58371680FE1200A21259 /* usr-local.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "usr-local.js"; sourceTree = ""; }; - C1EA58381680FE1200A21259 /* glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glob.js; sourceTree = ""; }; - C1EA58391680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA583C1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA583D1680FE1200A21259 /* graceful-fs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "graceful-fs.js"; sourceTree = ""; }; - C1EA583E1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA583F1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58401680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58421680FE1200A21259 /* open.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = open.js; sourceTree = ""; }; - C1EA58441680FE1200A21259 /* inherits.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inherits.js; sourceTree = ""; }; - C1EA58451680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58461680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58481680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA58491680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA584A1680FE1200A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA584D1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA584E1680FE1200A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA58501680FE1200A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA58511680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA58521680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58531680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58551680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA58571680FE1200A21259 /* bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bench.js; sourceTree = ""; }; - C1EA58581680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA58591680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA585A1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA585B1680FE1200A21259 /* sigmund.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sigmund.js; sourceTree = ""; }; - C1EA585D1680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA585E1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA585F1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58611680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA58621680FE1200A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA58631680FE1200A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA58641680FE1200A21259 /* defaults.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = defaults.js; sourceTree = ""; }; - C1EA58651680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58661680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58681680FE1200A21259 /* 00-setup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "00-setup.js"; sourceTree = ""; }; - C1EA58691680FE1200A21259 /* bash-comparison.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bash-comparison.js"; sourceTree = ""; }; - C1EA586A1680FE1200A21259 /* cwd-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "cwd-test.js"; sourceTree = ""; }; - C1EA586B1680FE1200A21259 /* mark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mark.js; sourceTree = ""; }; - C1EA586C1680FE1200A21259 /* pause-resume.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pause-resume.js"; sourceTree = ""; }; - C1EA586D1680FE1200A21259 /* root-nomount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "root-nomount.js"; sourceTree = ""; }; - C1EA586E1680FE1200A21259 /* root.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = root.js; sourceTree = ""; }; - C1EA586F1680FE1200A21259 /* zz-cleanup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "zz-cleanup.js"; sourceTree = ""; }; - C1EA58701680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58711680FE1200A21259 /* Readme.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.rst; sourceTree = ""; }; - C1EA58731680FE1200A21259 /* multi-glob-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "multi-glob-test.js"; sourceTree = ""; }; - C1EA58741680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58751680FE1200A21259 /* Readme.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.rst; sourceTree = ""; }; - C1EA58781680FE1200A21259 /* bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.js; sourceTree = ""; }; - C1EA58791680FE1200A21259 /* foo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.js; sourceTree = ""; }; - C1EA587B1680FE1200A21259 /* other.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = other.js; sourceTree = ""; }; - C1EA587C1680FE1200A21259 /* some-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "some-test.js"; sourceTree = ""; }; - C1EA587E1680FE1200A21259 /* my-testish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "my-testish.js"; sourceTree = ""; }; - C1EA587F1680FE1200A21259 /* http-proxy-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-proxy-test.js"; sourceTree = ""; }; - C1EA58801680FE1200A21259 /* load-path-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "load-path-test.js"; sourceTree = ""; }; - C1EA58821680FE1200A21259 /* iife-processor-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "iife-processor-test.js"; sourceTree = ""; }; - C1EA58831680FE1200A21259 /* resource-middleware-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-middleware-test.js"; sourceTree = ""; }; - C1EA58841680FE1200A21259 /* resource-set-cache-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-cache-test.js"; sourceTree = ""; }; - C1EA58851680FE1200A21259 /* resource-set-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-test.js"; sourceTree = ""; }; - C1EA58861680FE1200A21259 /* resource-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-test.js"; sourceTree = ""; }; - C1EA58871680FE1200A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA58881680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA588B1680FE1200A21259 /* android-256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "android-256.png"; sourceTree = ""; }; - C1EA588C1680FE1200A21259 /* android-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "android-64.png"; sourceTree = ""; }; - C1EA588D1680FE1200A21259 /* chrome-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "chrome-64.png"; sourceTree = ""; }; - C1EA588E1680FE1200A21259 /* firefox-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "firefox-64.png"; sourceTree = ""; }; - C1EA588F1680FE1200A21259 /* ie-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ie-64.png"; sourceTree = ""; }; - C1EA58901680FE1200A21259 /* ios-24.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ios-24.png"; sourceTree = ""; }; - C1EA58911680FE1200A21259 /* ios-256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ios-256.png"; sourceTree = ""; }; - C1EA58921680FE1200A21259 /* linux-24.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "linux-24.png"; sourceTree = ""; }; - C1EA58931680FE1200A21259 /* linux-256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "linux-256.png"; sourceTree = ""; }; - C1EA58941680FE1200A21259 /* linux-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "linux-64.png"; sourceTree = ""; }; - C1EA58951680FE1200A21259 /* opera-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "opera-64.png"; sourceTree = ""; }; - C1EA58961680FE1200A21259 /* osx-24.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "osx-24.png"; sourceTree = ""; }; - C1EA58971680FE1200A21259 /* osx-256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "osx-256.png"; sourceTree = ""; }; - C1EA58981680FE1200A21259 /* osx-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "osx-64.png"; sourceTree = ""; }; - C1EA58991680FE1200A21259 /* osx-colored-128.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "osx-colored-128.png"; sourceTree = ""; }; - C1EA589A1680FE1200A21259 /* osx-colored-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "osx-colored-64.png"; sourceTree = ""; }; - C1EA589B1680FE1200A21259 /* osx-finder-128.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "osx-finder-128.png"; sourceTree = ""; }; - C1EA589C1680FE1200A21259 /* osx-finder-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "osx-finder-64.png"; sourceTree = ""; }; - C1EA589D1680FE1200A21259 /* safari-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "safari-64.png"; sourceTree = ""; }; - C1EA589E1680FE1200A21259 /* safari-mobile-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "safari-mobile-64.png"; sourceTree = ""; }; - C1EA589F1680FE1200A21259 /* windows-24.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "windows-24.png"; sourceTree = ""; }; - C1EA58A01680FE1200A21259 /* windows-256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "windows-256.png"; sourceTree = ""; }; - C1EA58A11680FE1200A21259 /* windows-64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "windows-64.png"; sourceTree = ""; }; - C1EA58A31680FE1200A21259 /* buster-server.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "buster-server.css"; sourceTree = ""; }; - C1EA58A41680FE1200A21259 /* buster.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = buster.css; sourceTree = ""; }; - C1EA58A51680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA58A61680FE1200A21259 /* run-tests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "run-tests.js"; sourceTree = ""; }; - C1EA58A81680FE1200A21259 /* server-cli-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "server-cli-test.js"; sourceTree = ""; }; - C1EA58A91680FE1200A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA58AB1680FE1200A21259 /* header.ejs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = header.ejs; sourceTree = ""; }; - C1EA58AC1680FE1200A21259 /* index.ejs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = index.ejs; sourceTree = ""; }; - C1EA58AE1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA58AF1680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA58B11680FE1200A21259 /* buster-sinon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-sinon.js"; sourceTree = ""; }; - C1EA58B21680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58B31680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA58B41680FE1200A21259 /* run-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "run-tests"; sourceTree = ""; }; - C1EA58B61680FE1200A21259 /* buster-sinon-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-sinon-test.js"; sourceTree = ""; }; - C1EA58B81680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA58B91680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA58BA1680FE1200A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA58BC1680FE1200A21259 /* buster-static */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "buster-static"; sourceTree = ""; }; - C1EA58BD1680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA58BF1680FE1200A21259 /* browser-wiring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "browser-wiring.js"; sourceTree = ""; }; - C1EA58C01680FE1200A21259 /* buster-static.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-static.js"; sourceTree = ""; }; - C1EA58C11680FE1200A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA58C41680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA58C51680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA58C61680FE1200A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA58C91680FE1200A21259 /* args.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = args.js; sourceTree = ""; }; - C1EA58CA1680FE1200A21259 /* config.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = config.js; sourceTree = ""; }; - C1EA58CB1680FE1200A21259 /* help.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = help.js; sourceTree = ""; }; - C1EA58CC1680FE1200A21259 /* logger.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = logger.js; sourceTree = ""; }; - C1EA58CD1680FE1200A21259 /* buster-cli.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-cli.js"; sourceTree = ""; }; - C1EA58CE1680FE1200A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA58D11680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA58D21680FE1200A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA58D31680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA58D51680FE1200A21259 /* buster-configuration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-configuration.js"; sourceTree = ""; }; - C1EA58D61680FE1200A21259 /* file-loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-loader.js"; sourceTree = ""; }; - C1EA58D71680FE1200A21259 /* group.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = group.js; sourceTree = ""; }; - C1EA58D81680FE1200A21259 /* util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.js; sourceTree = ""; }; - C1EA58DB1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA58DC1680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA58DE1680FE1200A21259 /* g.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = g.js; sourceTree = ""; }; - C1EA58DF1680FE1200A21259 /* usr-local.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "usr-local.js"; sourceTree = ""; }; - C1EA58E01680FE1200A21259 /* glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glob.js; sourceTree = ""; }; - C1EA58E11680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA58E41680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA58E51680FE1200A21259 /* graceful-fs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "graceful-fs.js"; sourceTree = ""; }; - C1EA58E61680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA58E71680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58E81680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58EA1680FE1200A21259 /* open.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = open.js; sourceTree = ""; }; - C1EA58EC1680FE1200A21259 /* inherits.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inherits.js; sourceTree = ""; }; - C1EA58ED1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58EE1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58EF1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58F01680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA58F21680FE1200A21259 /* 00-setup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "00-setup.js"; sourceTree = ""; }; - C1EA58F31680FE1200A21259 /* bash-comparison.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bash-comparison.js"; sourceTree = ""; }; - C1EA58F41680FE1200A21259 /* cwd-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "cwd-test.js"; sourceTree = ""; }; - C1EA58F51680FE1200A21259 /* mark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mark.js; sourceTree = ""; }; - C1EA58F61680FE1200A21259 /* pause-resume.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pause-resume.js"; sourceTree = ""; }; - C1EA58F71680FE1200A21259 /* root-nomount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "root-nomount.js"; sourceTree = ""; }; - C1EA58F81680FE1200A21259 /* root.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = root.js; sourceTree = ""; }; - C1EA58F91680FE1200A21259 /* zz-cleanup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "zz-cleanup.js"; sourceTree = ""; }; - C1EA58FA1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA58FB1680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA58FD1680FE1200A21259 /* buster-configuration-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-configuration-test.js"; sourceTree = ""; }; - C1EA58FE1680FE1200A21259 /* file-loader-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-loader-test.js"; sourceTree = ""; }; - C1EA59001680FE1200A21259 /* bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.js; sourceTree = ""; }; - C1EA59021680FE1200A21259 /* file */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = file; sourceTree = ""; }; - C1EA59031680FE1200A21259 /* file.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file.js; sourceTree = ""; }; - C1EA59041680FE1200A21259 /* foo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.js; sourceTree = ""; }; - C1EA59061680FE1200A21259 /* my-testish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "my-testish.js"; sourceTree = ""; }; - C1EA59071680FE1200A21259 /* group-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "group-test.js"; sourceTree = ""; }; - C1EA59081680FE1200A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA59091680FE1200A21259 /* todo.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = todo.org; sourceTree = ""; }; - C1EA590B1680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA590C1680FE1200A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA590D1680FE1200A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA590E1680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA59101680FE1200A21259 /* buster-terminal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-terminal.js"; sourceTree = ""; }; - C1EA59111680FE1200A21259 /* matrix.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = matrix.js; sourceTree = ""; }; - C1EA59121680FE1200A21259 /* relative-grid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "relative-grid.js"; sourceTree = ""; }; - C1EA59131680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59141680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA59161680FE1200A21259 /* buster-terminal-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-terminal-test.js"; sourceTree = ""; }; - C1EA59171680FE1200A21259 /* helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = helper.js; sourceTree = ""; }; - C1EA59181680FE1200A21259 /* matrix-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "matrix-test.js"; sourceTree = ""; }; - C1EA59191680FE1200A21259 /* relative-grid-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "relative-grid-test.js"; sourceTree = ""; }; - C1EA591B1680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA591C1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA591D1680FE1200A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA59201680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA59211680FE1200A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA59231680FE1200A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA59241680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59251680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59261680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59281680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA592A1680FE1200A21259 /* bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bench.js; sourceTree = ""; }; - C1EA592B1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA592C1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA592D1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA592E1680FE1200A21259 /* sigmund.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sigmund.js; sourceTree = ""; }; - C1EA59301680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA59311680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59321680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59341680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA59351680FE1200A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA59361680FE1200A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA59371680FE1200A21259 /* defaults.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = defaults.js; sourceTree = ""; }; - C1EA59391680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA593A1680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA593B1680FE1200A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA593C1680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA593E1680FE1200A21259 /* argument.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = argument.js; sourceTree = ""; }; - C1EA593F1680FE1200A21259 /* operand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = operand.js; sourceTree = ""; }; - C1EA59401680FE1200A21259 /* option.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = option.js; sourceTree = ""; }; - C1EA59411680FE1200A21259 /* parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.js; sourceTree = ""; }; - C1EA59421680FE1200A21259 /* posix-argv-parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "posix-argv-parser.js"; sourceTree = ""; }; - C1EA59431680FE1200A21259 /* shorthand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shorthand.js; sourceTree = ""; }; - C1EA59441680FE1200A21259 /* types.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = types.js; sourceTree = ""; }; - C1EA59451680FE1200A21259 /* validators.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = validators.js; sourceTree = ""; }; - C1EA59461680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59471680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59481680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA594A1680FE1200A21259 /* operand-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "operand-test.js"; sourceTree = ""; }; - C1EA594B1680FE1200A21259 /* option-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "option-test.js"; sourceTree = ""; }; - C1EA594C1680FE1200A21259 /* parser-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "parser-test.js"; sourceTree = ""; }; - C1EA594D1680FE1200A21259 /* posix-argv-parser-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "posix-argv-parser-test.js"; sourceTree = ""; }; - C1EA594E1680FE1200A21259 /* shorthand-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "shorthand-test.js"; sourceTree = ""; }; - C1EA594F1680FE1200A21259 /* types-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "types-test.js"; sourceTree = ""; }; - C1EA59501680FE1200A21259 /* validators-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "validators-test.js"; sourceTree = ""; }; - C1EA59521680FE1200A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA59531680FE1200A21259 /* fiber.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fiber.js; sourceTree = ""; }; - C1EA59541680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59551680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59561680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59571680FE1200A21259 /* rimraf.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rimraf.js; sourceTree = ""; }; - C1EA59591680FE1200A21259 /* run.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = run.sh; sourceTree = ""; }; - C1EA595A1680FE1200A21259 /* setup.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = setup.sh; sourceTree = ""; }; - C1EA595B1680FE1200A21259 /* test-async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-async.js"; sourceTree = ""; }; - C1EA595C1680FE1200A21259 /* test-fiber.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-fiber.js"; sourceTree = ""; }; - C1EA595D1680FE1200A21259 /* test-sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-sync.js"; sourceTree = ""; }; - C1EA595F1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA59601680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA59611680FE1200A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA59621680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA59641680FE1200A21259 /* stream-logger.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "stream-logger.js"; sourceTree = ""; }; - C1EA59651680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59661680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59671680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA59691680FE1200A21259 /* stream-logger-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "stream-logger-test.js"; sourceTree = ""; }; - C1EA596A1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA596B1680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA596C1680FE1200A21259 /* run-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "run-tests"; sourceTree = ""; }; - C1EA596E1680FE1200A21259 /* buster-cli-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-cli-test.js"; sourceTree = ""; }; - C1EA596F1680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA59711680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA59721680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA59741680FE1200A21259 /* pow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pow.js; sourceTree = ""; }; - C1EA59751680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA59761680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59771680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59781680FE1200A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA597A1680FE1200A21259 /* chmod.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = chmod.js; sourceTree = ""; }; - C1EA597B1680FE1200A21259 /* clobber.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clobber.js; sourceTree = ""; }; - C1EA597C1680FE1200A21259 /* mkdirp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mkdirp.js; sourceTree = ""; }; - C1EA597D1680FE1200A21259 /* perm.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = perm.js; sourceTree = ""; }; - C1EA597E1680FE1200A21259 /* perm_sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = perm_sync.js; sourceTree = ""; }; - C1EA597F1680FE1200A21259 /* race.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = race.js; sourceTree = ""; }; - C1EA59801680FE1200A21259 /* rel.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rel.js; sourceTree = ""; }; - C1EA59811680FE1200A21259 /* return.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = return.js; sourceTree = ""; }; - C1EA59821680FE1200A21259 /* return_sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = return_sync.js; sourceTree = ""; }; - C1EA59831680FE1200A21259 /* root.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = root.js; sourceTree = ""; }; - C1EA59841680FE1200A21259 /* sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sync.js; sourceTree = ""; }; - C1EA59851680FE1200A21259 /* umask.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = umask.js; sourceTree = ""; }; - C1EA59861680FE1200A21259 /* umask_sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = umask_sync.js; sourceTree = ""; }; - C1EA59881680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA59891680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA598A1680FE1200A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA598B1680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA598F1680FE1200A21259 /* 1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 1.png; sourceTree = ""; }; - C1EA59901680FE1200A21259 /* 2.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = 2.html; sourceTree = ""; }; - C1EA59911680FE1200A21259 /* 3.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 3.txt; sourceTree = ""; }; - C1EA59921680FE1200A21259 /* 4.tgz */ = {isa = PBXFileReference; lastKnownFileType = file; path = 4.tgz; sourceTree = ""; }; - C1EA59931680FE1200A21259 /* medium.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = medium.json; sourceTree = ""; }; - C1EA59941680FE1200A21259 /* publish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = publish.js; sourceTree = ""; }; - C1EA59951680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59961680FE1200A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA59971680FE1200A21259 /* small.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = small.json; sourceTree = ""; }; - C1EA59991680FE1200A21259 /* file-etag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-etag.js"; sourceTree = ""; }; - C1EA599A1680FE1200A21259 /* http-proxy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-proxy.js"; sourceTree = ""; }; - C1EA599B1680FE1200A21259 /* invalid-error.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "invalid-error.js"; sourceTree = ""; }; - C1EA599C1680FE1200A21259 /* load-path.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "load-path.js"; sourceTree = ""; }; - C1EA599E1680FE1200A21259 /* iife.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = iife.js; sourceTree = ""; }; - C1EA599F1680FE1200A21259 /* ramp-resources.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ramp-resources.js"; sourceTree = ""; }; - C1EA59A01680FE1200A21259 /* resource-combiner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-combiner.js"; sourceTree = ""; }; - C1EA59A11680FE1200A21259 /* resource-file-resolver.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-file-resolver.js"; sourceTree = ""; }; - C1EA59A21680FE1200A21259 /* resource-middleware.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-middleware.js"; sourceTree = ""; }; - C1EA59A31680FE1200A21259 /* resource-set-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-cache.js"; sourceTree = ""; }; - C1EA59A41680FE1200A21259 /* resource-set.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set.js"; sourceTree = ""; }; - C1EA59A51680FE1200A21259 /* resource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resource.js; sourceTree = ""; }; - C1EA59A81680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA59A91680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA59AA1680FE1200A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA59AB1680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA59AD1680FE1200A21259 /* buster-glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-glob.js"; sourceTree = ""; }; - C1EA59B01680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA59B11680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA59B31680FE1200A21259 /* g.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = g.js; sourceTree = ""; }; - C1EA59B41680FE1200A21259 /* usr-local.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "usr-local.js"; sourceTree = ""; }; - C1EA59B51680FE1200A21259 /* glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glob.js; sourceTree = ""; }; - C1EA59B61680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59B91680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA59BA1680FE1200A21259 /* graceful-fs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "graceful-fs.js"; sourceTree = ""; }; - C1EA59BB1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59BC1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59BD1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59BF1680FE1200A21259 /* open.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = open.js; sourceTree = ""; }; - C1EA59C11680FE1200A21259 /* inherits.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inherits.js; sourceTree = ""; }; - C1EA59C21680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59C31680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59C51680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA59C61680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59C71680FE1200A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA59CA1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA59CB1680FE1200A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA59CD1680FE1200A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA59CE1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59CF1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59D01680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59D21680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA59D41680FE1200A21259 /* bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bench.js; sourceTree = ""; }; - C1EA59D51680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59D61680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59D71680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59D81680FE1200A21259 /* sigmund.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sigmund.js; sourceTree = ""; }; - C1EA59DA1680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA59DB1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59DC1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59DE1680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA59DF1680FE1200A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA59E01680FE1200A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA59E11680FE1200A21259 /* defaults.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = defaults.js; sourceTree = ""; }; - C1EA59E21680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59E31680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59E51680FE1200A21259 /* 00-setup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "00-setup.js"; sourceTree = ""; }; - C1EA59E61680FE1200A21259 /* bash-comparison.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bash-comparison.js"; sourceTree = ""; }; - C1EA59E71680FE1200A21259 /* cwd-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "cwd-test.js"; sourceTree = ""; }; - C1EA59E81680FE1200A21259 /* mark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mark.js; sourceTree = ""; }; - C1EA59E91680FE1200A21259 /* pause-resume.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pause-resume.js"; sourceTree = ""; }; - C1EA59EA1680FE1200A21259 /* root-nomount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "root-nomount.js"; sourceTree = ""; }; - C1EA59EB1680FE1200A21259 /* root.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = root.js; sourceTree = ""; }; - C1EA59EC1680FE1200A21259 /* zz-cleanup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "zz-cleanup.js"; sourceTree = ""; }; - C1EA59ED1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59EE1680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA59F01680FE1200A21259 /* buster-glob-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-glob-test.js"; sourceTree = ""; }; - C1EA59F21680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59F31680FE1200A21259 /* mime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mime.js; sourceTree = ""; }; - C1EA59F41680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA59F51680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA59F61680FE1200A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA59F81680FE1200A21259 /* mime.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mime.types; sourceTree = ""; }; - C1EA59F91680FE1200A21259 /* node.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = node.types; sourceTree = ""; }; - C1EA59FB1680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA59FC1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA59FD1680FE1200A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA5A001680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5A021680FE1200A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA5A031680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA5A041680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5A051680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5A071680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA5A081680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5A091680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5A0B1680FE1200A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA5A0C1680FE1200A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA5A0D1680FE1200A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA5A0E1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5A0F1680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA5A121680FE1200A21259 /* bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.js; sourceTree = ""; }; - C1EA5A131680FE1200A21259 /* foo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.js; sourceTree = ""; }; - C1EA5A151680FE1200A21259 /* other.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = other.js; sourceTree = ""; }; - C1EA5A161680FE1200A21259 /* some-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "some-test.js"; sourceTree = ""; }; - C1EA5A181680FE1200A21259 /* my-testish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "my-testish.js"; sourceTree = ""; }; - C1EA5A191680FE1200A21259 /* http-proxy-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-proxy-test.js"; sourceTree = ""; }; - C1EA5A1A1680FE1200A21259 /* load-path-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "load-path-test.js"; sourceTree = ""; }; - C1EA5A1C1680FE1200A21259 /* iife-processor-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "iife-processor-test.js"; sourceTree = ""; }; - C1EA5A1D1680FE1200A21259 /* resource-middleware-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-middleware-test.js"; sourceTree = ""; }; - C1EA5A1E1680FE1200A21259 /* resource-set-cache-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-cache-test.js"; sourceTree = ""; }; - C1EA5A1F1680FE1200A21259 /* resource-set-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-test.js"; sourceTree = ""; }; - C1EA5A201680FE1200A21259 /* resource-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-test.js"; sourceTree = ""; }; - C1EA5A211680FE1200A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA5A221680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5A231680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA5A251680FE1200A21259 /* buster-static-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-static-test.js"; sourceTree = ""; }; - C1EA5A271680FE1200A21259 /* some-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "some-test.js"; sourceTree = ""; }; - C1EA5A281680FE1200A21259 /* test-config.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-config.js"; sourceTree = ""; }; - C1EA5A2A1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5A2B1680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA5A2C1680FE1200A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA5A2D1680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA5A2F1680FE1200A21259 /* buster-syntax.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-syntax.js"; sourceTree = ""; }; - C1EA5A301680FE1200A21259 /* syntax.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = syntax.js; sourceTree = ""; }; - C1EA5A331680FE1200A21259 /* uglifyjs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = uglifyjs; sourceTree = ""; }; - C1EA5A381680FE1200A21259 /* documentfeatures.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = documentfeatures.js; sourceTree = ""; }; - C1EA5A391680FE1200A21259 /* domtohtml.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = domtohtml.js; sourceTree = ""; }; - C1EA5A3A1680FE1200A21259 /* htmlencoding.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmlencoding.js; sourceTree = ""; }; - C1EA5A3B1680FE1200A21259 /* htmltodom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmltodom.js; sourceTree = ""; }; - C1EA5A3C1680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5A3E1680FE1200A21259 /* core.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = core.js; sourceTree = ""; }; - C1EA5A401680FE1200A21259 /* core.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = core.js; sourceTree = ""; }; - C1EA5A411680FE1200A21259 /* events.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = events.js; sourceTree = ""; }; - C1EA5A421680FE1200A21259 /* html.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = html.js; sourceTree = ""; }; - C1EA5A431680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5A451680FE1200A21259 /* javascript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = javascript.js; sourceTree = ""; }; - C1EA5A461680FE1200A21259 /* style.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = style.js; sourceTree = ""; }; - C1EA5A481680FE1200A21259 /* core.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = core.js; sourceTree = ""; }; - C1EA5A491680FE1200A21259 /* events.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = events.js; sourceTree = ""; }; - C1EA5A4A1680FE1200A21259 /* html.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = html.js; sourceTree = ""; }; - C1EA5A4B1680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5A4C1680FE1200A21259 /* ls.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ls.js; sourceTree = ""; }; - C1EA5A4D1680FE1200A21259 /* xpath.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = xpath.js; sourceTree = ""; }; - C1EA5A4F1680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5A501680FE1200A21259 /* sizzle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sizzle.js; sourceTree = ""; }; - C1EA5A511680FE1200A21259 /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; - C1EA5A521680FE1200A21259 /* jsdom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jsdom.js; sourceTree = ""; }; - C1EA5A531680FE1200A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA5A561680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5A571680FE1200A21259 /* binding.gyp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = binding.gyp; sourceTree = ""; }; - C1EA5A591680FE1200A21259 /* binding.Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = binding.Makefile; sourceTree = ""; }; - C1EA5A5A1680FE1200A21259 /* config.gypi */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = config.gypi; sourceTree = ""; }; - C1EA5A5B1680FE1200A21259 /* contextify.target.mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = contextify.target.mk; sourceTree = ""; }; - C1EA5A5C1680FE1200A21259 /* gyp-mac-tool */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "gyp-mac-tool"; sourceTree = ""; }; - C1EA5A5D1680FE1200A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA5A611680FE1200A21259 /* contextify.node.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = contextify.node.d; sourceTree = ""; }; - C1EA5A651680FE1200A21259 /* contextify.o.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = contextify.o.d; sourceTree = ""; }; - C1EA5A661680FE1200A21259 /* contextify.node */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = contextify.node; sourceTree = ""; }; - C1EA5A671680FE1200A21259 /* linker.lock */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = linker.lock; sourceTree = ""; }; - C1EA5A6B1680FE1200A21259 /* contextify.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = contextify.o; sourceTree = ""; }; - C1EA5A6C1680FE1200A21259 /* changelog */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = changelog; sourceTree = ""; }; - C1EA5A6E1680FE1200A21259 /* contextify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = contextify.js; sourceTree = ""; }; - C1EA5A6F1680FE1200A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA5A721680FE1200A21259 /* bindings.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bindings.js; sourceTree = ""; }; - C1EA5A731680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5A741680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5A751680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5A761680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5A781680FE1200A21259 /* contextify.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = contextify.cc; sourceTree = ""; }; - C1EA5A7A1680FE1200A21259 /* contextify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = contextify.js; sourceTree = ""; }; - C1EA5A7B1680FE1200A21259 /* wscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wscript; sourceTree = ""; }; - C1EA5A7D1680FE1200A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA5A7E1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5A801680FE1200A21259 /* clone.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clone.js; sourceTree = ""; }; - C1EA5A811680FE1200A21259 /* CSSFontFaceRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSFontFaceRule.js; sourceTree = ""; }; - C1EA5A821680FE1200A21259 /* CSSImportRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSImportRule.js; sourceTree = ""; }; - C1EA5A831680FE1200A21259 /* CSSKeyframeRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSKeyframeRule.js; sourceTree = ""; }; - C1EA5A841680FE1200A21259 /* CSSKeyframesRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSKeyframesRule.js; sourceTree = ""; }; - C1EA5A851680FE1200A21259 /* CSSMediaRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSMediaRule.js; sourceTree = ""; }; - C1EA5A861680FE1200A21259 /* CSSRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSRule.js; sourceTree = ""; }; - C1EA5A871680FE1200A21259 /* CSSStyleDeclaration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSStyleDeclaration.js; sourceTree = ""; }; - C1EA5A881680FE1200A21259 /* CSSStyleRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSStyleRule.js; sourceTree = ""; }; - C1EA5A891680FE1200A21259 /* CSSStyleSheet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSStyleSheet.js; sourceTree = ""; }; - C1EA5A8A1680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5A8B1680FE1200A21259 /* MediaList.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = MediaList.js; sourceTree = ""; }; - C1EA5A8C1680FE1200A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA5A8D1680FE1200A21259 /* StyleSheet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = StyleSheet.js; sourceTree = ""; }; - C1EA5A8E1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5A8F1680FE1200A21259 /* README.mdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.mdown; sourceTree = ""; }; - C1EA5A911680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5A931680FE1200A21259 /* CSSStyleDeclaration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSStyleDeclaration.js; sourceTree = ""; }; - C1EA5A951680FE1200A21259 /* alignmentBaseline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = alignmentBaseline.js; sourceTree = ""; }; - C1EA5A961680FE1200A21259 /* azimuth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = azimuth.js; sourceTree = ""; }; - C1EA5A971680FE1200A21259 /* background.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = background.js; sourceTree = ""; }; - C1EA5A981680FE1200A21259 /* backgroundAttachment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundAttachment.js; sourceTree = ""; }; - C1EA5A991680FE1200A21259 /* backgroundClip.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundClip.js; sourceTree = ""; }; - C1EA5A9A1680FE1200A21259 /* backgroundColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundColor.js; sourceTree = ""; }; - C1EA5A9B1680FE1200A21259 /* backgroundImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundImage.js; sourceTree = ""; }; - C1EA5A9C1680FE1200A21259 /* backgroundOrigin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundOrigin.js; sourceTree = ""; }; - C1EA5A9D1680FE1200A21259 /* backgroundPosition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundPosition.js; sourceTree = ""; }; - C1EA5A9E1680FE1200A21259 /* backgroundPositionX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundPositionX.js; sourceTree = ""; }; - C1EA5A9F1680FE1200A21259 /* backgroundPositionY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundPositionY.js; sourceTree = ""; }; - C1EA5AA01680FE1200A21259 /* backgroundRepeat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundRepeat.js; sourceTree = ""; }; - C1EA5AA11680FE1200A21259 /* backgroundRepeatX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundRepeatX.js; sourceTree = ""; }; - C1EA5AA21680FE1200A21259 /* backgroundRepeatY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundRepeatY.js; sourceTree = ""; }; - C1EA5AA31680FE1200A21259 /* backgroundSize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundSize.js; sourceTree = ""; }; - C1EA5AA41680FE1200A21259 /* baselineShift.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = baselineShift.js; sourceTree = ""; }; - C1EA5AA51680FE1200A21259 /* border.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = border.js; sourceTree = ""; }; - C1EA5AA61680FE1200A21259 /* borderBottom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottom.js; sourceTree = ""; }; - C1EA5AA71680FE1200A21259 /* borderBottomColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottomColor.js; sourceTree = ""; }; - C1EA5AA81680FE1200A21259 /* borderBottomLeftRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottomLeftRadius.js; sourceTree = ""; }; - C1EA5AA91680FE1200A21259 /* borderBottomRightRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottomRightRadius.js; sourceTree = ""; }; - C1EA5AAA1680FE1200A21259 /* borderBottomStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottomStyle.js; sourceTree = ""; }; - C1EA5AAB1680FE1200A21259 /* borderBottomWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottomWidth.js; sourceTree = ""; }; - C1EA5AAC1680FE1200A21259 /* borderCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderCollapse.js; sourceTree = ""; }; - C1EA5AAD1680FE1200A21259 /* borderColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderColor.js; sourceTree = ""; }; - C1EA5AAE1680FE1200A21259 /* borderImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImage.js; sourceTree = ""; }; - C1EA5AAF1680FE1200A21259 /* borderImageOutset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImageOutset.js; sourceTree = ""; }; - C1EA5AB01680FE1200A21259 /* borderImageRepeat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImageRepeat.js; sourceTree = ""; }; - C1EA5AB11680FE1200A21259 /* borderImageSlice.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImageSlice.js; sourceTree = ""; }; - C1EA5AB21680FE1200A21259 /* borderImageSource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImageSource.js; sourceTree = ""; }; - C1EA5AB31680FE1200A21259 /* borderImageWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImageWidth.js; sourceTree = ""; }; - C1EA5AB41680FE1200A21259 /* borderLeft.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderLeft.js; sourceTree = ""; }; - C1EA5AB51680FE1200A21259 /* borderLeftColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderLeftColor.js; sourceTree = ""; }; - C1EA5AB61680FE1200A21259 /* borderLeftStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderLeftStyle.js; sourceTree = ""; }; - C1EA5AB71680FE1200A21259 /* borderLeftWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderLeftWidth.js; sourceTree = ""; }; - C1EA5AB81680FE1200A21259 /* borderRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderRadius.js; sourceTree = ""; }; - C1EA5AB91680FE1200A21259 /* borderRight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderRight.js; sourceTree = ""; }; - C1EA5ABA1680FE1200A21259 /* borderRightColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderRightColor.js; sourceTree = ""; }; - C1EA5ABB1680FE1200A21259 /* borderRightStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderRightStyle.js; sourceTree = ""; }; - C1EA5ABC1680FE1200A21259 /* borderRightWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderRightWidth.js; sourceTree = ""; }; - C1EA5ABD1680FE1200A21259 /* borderSpacing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderSpacing.js; sourceTree = ""; }; - C1EA5ABE1680FE1200A21259 /* borderStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderStyle.js; sourceTree = ""; }; - C1EA5ABF1680FE1200A21259 /* borderTop.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTop.js; sourceTree = ""; }; - C1EA5AC01680FE1200A21259 /* borderTopColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTopColor.js; sourceTree = ""; }; - C1EA5AC11680FE1200A21259 /* borderTopLeftRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTopLeftRadius.js; sourceTree = ""; }; - C1EA5AC21680FE1200A21259 /* borderTopRightRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTopRightRadius.js; sourceTree = ""; }; - C1EA5AC31680FE1200A21259 /* borderTopStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTopStyle.js; sourceTree = ""; }; - C1EA5AC41680FE1200A21259 /* borderTopWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTopWidth.js; sourceTree = ""; }; - C1EA5AC51680FE1200A21259 /* borderWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderWidth.js; sourceTree = ""; }; - C1EA5AC61680FE1200A21259 /* bottom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bottom.js; sourceTree = ""; }; - C1EA5AC71680FE1200A21259 /* boxShadow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = boxShadow.js; sourceTree = ""; }; - C1EA5AC81680FE1200A21259 /* boxSizing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = boxSizing.js; sourceTree = ""; }; - C1EA5AC91680FE1200A21259 /* captionSide.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = captionSide.js; sourceTree = ""; }; - C1EA5ACA1680FE1200A21259 /* clear.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clear.js; sourceTree = ""; }; - C1EA5ACB1680FE1200A21259 /* clip.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clip.js; sourceTree = ""; }; - C1EA5ACC1680FE1200A21259 /* clipPath.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clipPath.js; sourceTree = ""; }; - C1EA5ACD1680FE1200A21259 /* clipRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clipRule.js; sourceTree = ""; }; - C1EA5ACE1680FE1200A21259 /* color.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = color.js; sourceTree = ""; }; - C1EA5ACF1680FE1200A21259 /* colorInterpolation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = colorInterpolation.js; sourceTree = ""; }; - C1EA5AD01680FE1200A21259 /* colorInterpolationFilters.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = colorInterpolationFilters.js; sourceTree = ""; }; - C1EA5AD11680FE1200A21259 /* colorProfile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = colorProfile.js; sourceTree = ""; }; - C1EA5AD21680FE1200A21259 /* colorRendering.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = colorRendering.js; sourceTree = ""; }; - C1EA5AD31680FE1200A21259 /* content.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = content.js; sourceTree = ""; }; - C1EA5AD41680FE1200A21259 /* counterIncrement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = counterIncrement.js; sourceTree = ""; }; - C1EA5AD51680FE1200A21259 /* counterReset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = counterReset.js; sourceTree = ""; }; - C1EA5AD61680FE1200A21259 /* cssFloat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cssFloat.js; sourceTree = ""; }; - C1EA5AD71680FE1200A21259 /* cue.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cue.js; sourceTree = ""; }; - C1EA5AD81680FE1200A21259 /* cueAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cueAfter.js; sourceTree = ""; }; - C1EA5AD91680FE1200A21259 /* cueBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cueBefore.js; sourceTree = ""; }; - C1EA5ADA1680FE1200A21259 /* cursor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cursor.js; sourceTree = ""; }; - C1EA5ADB1680FE1200A21259 /* direction.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = direction.js; sourceTree = ""; }; - C1EA5ADC1680FE1200A21259 /* display.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = display.js; sourceTree = ""; }; - C1EA5ADD1680FE1200A21259 /* dominantBaseline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = dominantBaseline.js; sourceTree = ""; }; - C1EA5ADE1680FE1200A21259 /* elevation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = elevation.js; sourceTree = ""; }; - C1EA5ADF1680FE1200A21259 /* emptyCells.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = emptyCells.js; sourceTree = ""; }; - C1EA5AE01680FE1200A21259 /* enableBackground.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = enableBackground.js; sourceTree = ""; }; - C1EA5AE11680FE1200A21259 /* fill.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fill.js; sourceTree = ""; }; - C1EA5AE21680FE1200A21259 /* fillOpacity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fillOpacity.js; sourceTree = ""; }; - C1EA5AE31680FE1200A21259 /* fillRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fillRule.js; sourceTree = ""; }; - C1EA5AE41680FE1200A21259 /* filter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = filter.js; sourceTree = ""; }; - C1EA5AE51680FE1200A21259 /* floodColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = floodColor.js; sourceTree = ""; }; - C1EA5AE61680FE1200A21259 /* floodOpacity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = floodOpacity.js; sourceTree = ""; }; - C1EA5AE71680FE1200A21259 /* font.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = font.js; sourceTree = ""; }; - C1EA5AE81680FE1200A21259 /* fontFamily.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontFamily.js; sourceTree = ""; }; - C1EA5AE91680FE1200A21259 /* fontSize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontSize.js; sourceTree = ""; }; - C1EA5AEA1680FE1200A21259 /* fontSizeAdjust.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontSizeAdjust.js; sourceTree = ""; }; - C1EA5AEB1680FE1200A21259 /* fontStretch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontStretch.js; sourceTree = ""; }; - C1EA5AEC1680FE1200A21259 /* fontStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontStyle.js; sourceTree = ""; }; - C1EA5AED1680FE1200A21259 /* fontVariant.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontVariant.js; sourceTree = ""; }; - C1EA5AEE1680FE1200A21259 /* fontWeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontWeight.js; sourceTree = ""; }; - C1EA5AEF1680FE1200A21259 /* glyphOrientationHorizontal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glyphOrientationHorizontal.js; sourceTree = ""; }; - C1EA5AF01680FE1200A21259 /* glyphOrientationVertical.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glyphOrientationVertical.js; sourceTree = ""; }; - C1EA5AF11680FE1200A21259 /* height.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = height.js; sourceTree = ""; }; - C1EA5AF21680FE1200A21259 /* imageRendering.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = imageRendering.js; sourceTree = ""; }; - C1EA5AF31680FE1200A21259 /* kerning.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = kerning.js; sourceTree = ""; }; - C1EA5AF41680FE1200A21259 /* left.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = left.js; sourceTree = ""; }; - C1EA5AF51680FE1200A21259 /* letterSpacing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = letterSpacing.js; sourceTree = ""; }; - C1EA5AF61680FE1200A21259 /* lightingColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lightingColor.js; sourceTree = ""; }; - C1EA5AF71680FE1200A21259 /* lineHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lineHeight.js; sourceTree = ""; }; - C1EA5AF81680FE1200A21259 /* listStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = listStyle.js; sourceTree = ""; }; - C1EA5AF91680FE1200A21259 /* listStyleImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = listStyleImage.js; sourceTree = ""; }; - C1EA5AFA1680FE1200A21259 /* listStylePosition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = listStylePosition.js; sourceTree = ""; }; - C1EA5AFB1680FE1200A21259 /* listStyleType.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = listStyleType.js; sourceTree = ""; }; - C1EA5AFC1680FE1200A21259 /* margin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = margin.js; sourceTree = ""; }; - C1EA5AFD1680FE1200A21259 /* marginBottom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marginBottom.js; sourceTree = ""; }; - C1EA5AFE1680FE1200A21259 /* marginLeft.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marginLeft.js; sourceTree = ""; }; - C1EA5AFF1680FE1200A21259 /* marginRight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marginRight.js; sourceTree = ""; }; - C1EA5B001680FE1200A21259 /* marginTop.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marginTop.js; sourceTree = ""; }; - C1EA5B011680FE1200A21259 /* marker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marker.js; sourceTree = ""; }; - C1EA5B021680FE1200A21259 /* markerEnd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = markerEnd.js; sourceTree = ""; }; - C1EA5B031680FE1200A21259 /* markerMid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = markerMid.js; sourceTree = ""; }; - C1EA5B041680FE1200A21259 /* markerOffset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = markerOffset.js; sourceTree = ""; }; - C1EA5B051680FE1200A21259 /* markerStart.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = markerStart.js; sourceTree = ""; }; - C1EA5B061680FE1200A21259 /* marks.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marks.js; sourceTree = ""; }; - C1EA5B071680FE1200A21259 /* mask.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mask.js; sourceTree = ""; }; - C1EA5B081680FE1200A21259 /* maxHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = maxHeight.js; sourceTree = ""; }; - C1EA5B091680FE1200A21259 /* maxWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = maxWidth.js; sourceTree = ""; }; - C1EA5B0A1680FE1200A21259 /* minHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minHeight.js; sourceTree = ""; }; - C1EA5B0B1680FE1200A21259 /* minWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minWidth.js; sourceTree = ""; }; - C1EA5B0C1680FE1200A21259 /* opacity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = opacity.js; sourceTree = ""; }; - C1EA5B0D1680FE1200A21259 /* orphans.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = orphans.js; sourceTree = ""; }; - C1EA5B0E1680FE1200A21259 /* outline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outline.js; sourceTree = ""; }; - C1EA5B0F1680FE1200A21259 /* outlineColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outlineColor.js; sourceTree = ""; }; - C1EA5B101680FE1200A21259 /* outlineOffset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outlineOffset.js; sourceTree = ""; }; - C1EA5B111680FE1200A21259 /* outlineStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outlineStyle.js; sourceTree = ""; }; - C1EA5B121680FE1200A21259 /* outlineWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outlineWidth.js; sourceTree = ""; }; - C1EA5B131680FE1200A21259 /* overflow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = overflow.js; sourceTree = ""; }; - C1EA5B141680FE1200A21259 /* overflowX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = overflowX.js; sourceTree = ""; }; - C1EA5B151680FE1200A21259 /* overflowY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = overflowY.js; sourceTree = ""; }; - C1EA5B161680FE1200A21259 /* padding.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = padding.js; sourceTree = ""; }; - C1EA5B171680FE1200A21259 /* paddingBottom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = paddingBottom.js; sourceTree = ""; }; - C1EA5B181680FE1200A21259 /* paddingLeft.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = paddingLeft.js; sourceTree = ""; }; - C1EA5B191680FE1200A21259 /* paddingRight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = paddingRight.js; sourceTree = ""; }; - C1EA5B1A1680FE1200A21259 /* paddingTop.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = paddingTop.js; sourceTree = ""; }; - C1EA5B1B1680FE1200A21259 /* page.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = page.js; sourceTree = ""; }; - C1EA5B1C1680FE1200A21259 /* pageBreakAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pageBreakAfter.js; sourceTree = ""; }; - C1EA5B1D1680FE1200A21259 /* pageBreakBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pageBreakBefore.js; sourceTree = ""; }; - C1EA5B1E1680FE1200A21259 /* pageBreakInside.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pageBreakInside.js; sourceTree = ""; }; - C1EA5B1F1680FE1200A21259 /* pause.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pause.js; sourceTree = ""; }; - C1EA5B201680FE1200A21259 /* pauseAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pauseAfter.js; sourceTree = ""; }; - C1EA5B211680FE1200A21259 /* pauseBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pauseBefore.js; sourceTree = ""; }; - C1EA5B221680FE1200A21259 /* pitch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pitch.js; sourceTree = ""; }; - C1EA5B231680FE1200A21259 /* pitchRange.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pitchRange.js; sourceTree = ""; }; - C1EA5B241680FE1200A21259 /* playDuring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = playDuring.js; sourceTree = ""; }; - C1EA5B251680FE1200A21259 /* pointerEvents.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pointerEvents.js; sourceTree = ""; }; - C1EA5B261680FE1200A21259 /* position.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = position.js; sourceTree = ""; }; - C1EA5B271680FE1200A21259 /* quotes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = quotes.js; sourceTree = ""; }; - C1EA5B281680FE1200A21259 /* resize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resize.js; sourceTree = ""; }; - C1EA5B291680FE1200A21259 /* richness.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = richness.js; sourceTree = ""; }; - C1EA5B2A1680FE1200A21259 /* right.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = right.js; sourceTree = ""; }; - C1EA5B2B1680FE1200A21259 /* shapeRendering.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shapeRendering.js; sourceTree = ""; }; - C1EA5B2C1680FE1200A21259 /* size.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = size.js; sourceTree = ""; }; - C1EA5B2D1680FE1200A21259 /* speak.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speak.js; sourceTree = ""; }; - C1EA5B2E1680FE1200A21259 /* speakHeader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speakHeader.js; sourceTree = ""; }; - C1EA5B2F1680FE1200A21259 /* speakNumeral.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speakNumeral.js; sourceTree = ""; }; - C1EA5B301680FE1200A21259 /* speakPunctuation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speakPunctuation.js; sourceTree = ""; }; - C1EA5B311680FE1200A21259 /* speechRate.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speechRate.js; sourceTree = ""; }; - C1EA5B321680FE1200A21259 /* src.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = src.js; sourceTree = ""; }; - C1EA5B331680FE1200A21259 /* stopColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stopColor.js; sourceTree = ""; }; - C1EA5B341680FE1200A21259 /* stopOpacity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stopOpacity.js; sourceTree = ""; }; - C1EA5B351680FE1200A21259 /* stress.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stress.js; sourceTree = ""; }; - C1EA5B361680FE1200A21259 /* stroke.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stroke.js; sourceTree = ""; }; - C1EA5B371680FE1200A21259 /* strokeDasharray.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeDasharray.js; sourceTree = ""; }; - C1EA5B381680FE1200A21259 /* strokeDashoffset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeDashoffset.js; sourceTree = ""; }; - C1EA5B391680FE1200A21259 /* strokeLinecap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeLinecap.js; sourceTree = ""; }; - C1EA5B3A1680FE1200A21259 /* strokeLinejoin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeLinejoin.js; sourceTree = ""; }; - C1EA5B3B1680FE1200A21259 /* strokeMiterlimit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeMiterlimit.js; sourceTree = ""; }; - C1EA5B3C1680FE1200A21259 /* strokeOpacity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeOpacity.js; sourceTree = ""; }; - C1EA5B3D1680FE1200A21259 /* strokeWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeWidth.js; sourceTree = ""; }; - C1EA5B3E1680FE1200A21259 /* tableLayout.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tableLayout.js; sourceTree = ""; }; - C1EA5B3F1680FE1200A21259 /* textAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textAlign.js; sourceTree = ""; }; - C1EA5B401680FE1200A21259 /* textAnchor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textAnchor.js; sourceTree = ""; }; - C1EA5B411680FE1200A21259 /* textDecoration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textDecoration.js; sourceTree = ""; }; - C1EA5B421680FE1200A21259 /* textIndent.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textIndent.js; sourceTree = ""; }; - C1EA5B431680FE1200A21259 /* textLineThrough.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textLineThrough.js; sourceTree = ""; }; - C1EA5B441680FE1200A21259 /* textLineThroughColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textLineThroughColor.js; sourceTree = ""; }; - C1EA5B451680FE1200A21259 /* textLineThroughMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textLineThroughMode.js; sourceTree = ""; }; - C1EA5B461680FE1200A21259 /* textLineThroughStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textLineThroughStyle.js; sourceTree = ""; }; - C1EA5B471680FE1200A21259 /* textLineThroughWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textLineThroughWidth.js; sourceTree = ""; }; - C1EA5B481680FE1200A21259 /* textOverflow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverflow.js; sourceTree = ""; }; - C1EA5B491680FE1200A21259 /* textOverline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverline.js; sourceTree = ""; }; - C1EA5B4A1680FE1200A21259 /* textOverlineColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverlineColor.js; sourceTree = ""; }; - C1EA5B4B1680FE1200A21259 /* textOverlineMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverlineMode.js; sourceTree = ""; }; - C1EA5B4C1680FE1200A21259 /* textOverlineStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverlineStyle.js; sourceTree = ""; }; - C1EA5B4D1680FE1200A21259 /* textOverlineWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverlineWidth.js; sourceTree = ""; }; - C1EA5B4E1680FE1200A21259 /* textRendering.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textRendering.js; sourceTree = ""; }; - C1EA5B4F1680FE1200A21259 /* textShadow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textShadow.js; sourceTree = ""; }; - C1EA5B501680FE1200A21259 /* textTransform.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textTransform.js; sourceTree = ""; }; - C1EA5B511680FE1200A21259 /* textUnderline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textUnderline.js; sourceTree = ""; }; - C1EA5B521680FE1200A21259 /* textUnderlineColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textUnderlineColor.js; sourceTree = ""; }; - C1EA5B531680FE1200A21259 /* textUnderlineMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textUnderlineMode.js; sourceTree = ""; }; - C1EA5B541680FE1200A21259 /* textUnderlineStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textUnderlineStyle.js; sourceTree = ""; }; - C1EA5B551680FE1200A21259 /* textUnderlineWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textUnderlineWidth.js; sourceTree = ""; }; - C1EA5B561680FE1200A21259 /* top.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = top.js; sourceTree = ""; }; - C1EA5B571680FE1200A21259 /* unicodeBidi.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = unicodeBidi.js; sourceTree = ""; }; - C1EA5B581680FE1200A21259 /* unicodeRange.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = unicodeRange.js; sourceTree = ""; }; - C1EA5B591680FE1200A21259 /* vectorEffect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = vectorEffect.js; sourceTree = ""; }; - C1EA5B5A1680FE1200A21259 /* verticalAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = verticalAlign.js; sourceTree = ""; }; - C1EA5B5B1680FE1200A21259 /* visibility.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = visibility.js; sourceTree = ""; }; - C1EA5B5C1680FE1200A21259 /* voiceFamily.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = voiceFamily.js; sourceTree = ""; }; - C1EA5B5D1680FE1200A21259 /* volume.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = volume.js; sourceTree = ""; }; - C1EA5B5E1680FE1200A21259 /* webkitAnimation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimation.js; sourceTree = ""; }; - C1EA5B5F1680FE1200A21259 /* webkitAnimationDelay.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationDelay.js; sourceTree = ""; }; - C1EA5B601680FE1200A21259 /* webkitAnimationDirection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationDirection.js; sourceTree = ""; }; - C1EA5B611680FE1200A21259 /* webkitAnimationDuration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationDuration.js; sourceTree = ""; }; - C1EA5B621680FE1200A21259 /* webkitAnimationFillMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationFillMode.js; sourceTree = ""; }; - C1EA5B631680FE1200A21259 /* webkitAnimationIterationCount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationIterationCount.js; sourceTree = ""; }; - C1EA5B641680FE1200A21259 /* webkitAnimationName.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationName.js; sourceTree = ""; }; - C1EA5B651680FE1200A21259 /* webkitAnimationPlayState.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationPlayState.js; sourceTree = ""; }; - C1EA5B661680FE1200A21259 /* webkitAnimationTimingFunction.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationTimingFunction.js; sourceTree = ""; }; - C1EA5B671680FE1200A21259 /* webkitAppearance.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAppearance.js; sourceTree = ""; }; - C1EA5B681680FE1200A21259 /* webkitAspectRatio.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAspectRatio.js; sourceTree = ""; }; - C1EA5B691680FE1200A21259 /* webkitBackfaceVisibility.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBackfaceVisibility.js; sourceTree = ""; }; - C1EA5B6A1680FE1200A21259 /* webkitBackgroundClip.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBackgroundClip.js; sourceTree = ""; }; - C1EA5B6B1680FE1200A21259 /* webkitBackgroundComposite.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBackgroundComposite.js; sourceTree = ""; }; - C1EA5B6C1680FE1200A21259 /* webkitBackgroundOrigin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBackgroundOrigin.js; sourceTree = ""; }; - C1EA5B6D1680FE1200A21259 /* webkitBackgroundSize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBackgroundSize.js; sourceTree = ""; }; - C1EA5B6E1680FE1200A21259 /* webkitBorderAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderAfter.js; sourceTree = ""; }; - C1EA5B6F1680FE1200A21259 /* webkitBorderAfterColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderAfterColor.js; sourceTree = ""; }; - C1EA5B701680FE1200A21259 /* webkitBorderAfterStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderAfterStyle.js; sourceTree = ""; }; - C1EA5B711680FE1200A21259 /* webkitBorderAfterWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderAfterWidth.js; sourceTree = ""; }; - C1EA5B721680FE1200A21259 /* webkitBorderBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderBefore.js; sourceTree = ""; }; - C1EA5B731680FE1200A21259 /* webkitBorderBeforeColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderBeforeColor.js; sourceTree = ""; }; - C1EA5B741680FE1200A21259 /* webkitBorderBeforeStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderBeforeStyle.js; sourceTree = ""; }; - C1EA5B751680FE1200A21259 /* webkitBorderBeforeWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderBeforeWidth.js; sourceTree = ""; }; - C1EA5B761680FE1200A21259 /* webkitBorderEnd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderEnd.js; sourceTree = ""; }; - C1EA5B771680FE1200A21259 /* webkitBorderEndColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderEndColor.js; sourceTree = ""; }; - C1EA5B781680FE1200A21259 /* webkitBorderEndStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderEndStyle.js; sourceTree = ""; }; - C1EA5B791680FE1200A21259 /* webkitBorderEndWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderEndWidth.js; sourceTree = ""; }; - C1EA5B7A1680FE1200A21259 /* webkitBorderFit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderFit.js; sourceTree = ""; }; - C1EA5B7B1680FE1200A21259 /* webkitBorderHorizontalSpacing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderHorizontalSpacing.js; sourceTree = ""; }; - C1EA5B7C1680FE1200A21259 /* webkitBorderImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderImage.js; sourceTree = ""; }; - C1EA5B7D1680FE1200A21259 /* webkitBorderRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderRadius.js; sourceTree = ""; }; - C1EA5B7E1680FE1200A21259 /* webkitBorderStart.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderStart.js; sourceTree = ""; }; - C1EA5B7F1680FE1200A21259 /* webkitBorderStartColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderStartColor.js; sourceTree = ""; }; - C1EA5B801680FE1200A21259 /* webkitBorderStartStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderStartStyle.js; sourceTree = ""; }; - C1EA5B811680FE1200A21259 /* webkitBorderStartWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderStartWidth.js; sourceTree = ""; }; - C1EA5B821680FE1200A21259 /* webkitBorderVerticalSpacing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderVerticalSpacing.js; sourceTree = ""; }; - C1EA5B831680FE1200A21259 /* webkitBoxAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxAlign.js; sourceTree = ""; }; - C1EA5B841680FE1200A21259 /* webkitBoxDirection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxDirection.js; sourceTree = ""; }; - C1EA5B851680FE1200A21259 /* webkitBoxFlex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxFlex.js; sourceTree = ""; }; - C1EA5B861680FE1200A21259 /* webkitBoxFlexGroup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxFlexGroup.js; sourceTree = ""; }; - C1EA5B871680FE1200A21259 /* webkitBoxLines.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxLines.js; sourceTree = ""; }; - C1EA5B881680FE1200A21259 /* webkitBoxOrdinalGroup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxOrdinalGroup.js; sourceTree = ""; }; - C1EA5B891680FE1200A21259 /* webkitBoxOrient.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxOrient.js; sourceTree = ""; }; - C1EA5B8A1680FE1200A21259 /* webkitBoxPack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxPack.js; sourceTree = ""; }; - C1EA5B8B1680FE1200A21259 /* webkitBoxReflect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxReflect.js; sourceTree = ""; }; - C1EA5B8C1680FE1200A21259 /* webkitBoxShadow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxShadow.js; sourceTree = ""; }; - C1EA5B8D1680FE1200A21259 /* webkitColorCorrection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColorCorrection.js; sourceTree = ""; }; - C1EA5B8E1680FE1200A21259 /* webkitColumnAxis.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnAxis.js; sourceTree = ""; }; - C1EA5B8F1680FE1200A21259 /* webkitColumnBreakAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnBreakAfter.js; sourceTree = ""; }; - C1EA5B901680FE1200A21259 /* webkitColumnBreakBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnBreakBefore.js; sourceTree = ""; }; - C1EA5B911680FE1200A21259 /* webkitColumnBreakInside.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnBreakInside.js; sourceTree = ""; }; - C1EA5B921680FE1200A21259 /* webkitColumnCount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnCount.js; sourceTree = ""; }; - C1EA5B931680FE1200A21259 /* webkitColumnGap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnGap.js; sourceTree = ""; }; - C1EA5B941680FE1200A21259 /* webkitColumnRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnRule.js; sourceTree = ""; }; - C1EA5B951680FE1200A21259 /* webkitColumnRuleColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnRuleColor.js; sourceTree = ""; }; - C1EA5B961680FE1200A21259 /* webkitColumnRuleStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnRuleStyle.js; sourceTree = ""; }; - C1EA5B971680FE1200A21259 /* webkitColumnRuleWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnRuleWidth.js; sourceTree = ""; }; - C1EA5B981680FE1200A21259 /* webkitColumns.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumns.js; sourceTree = ""; }; - C1EA5B991680FE1200A21259 /* webkitColumnSpan.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnSpan.js; sourceTree = ""; }; - C1EA5B9A1680FE1200A21259 /* webkitColumnWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnWidth.js; sourceTree = ""; }; - C1EA5B9B1680FE1200A21259 /* webkitFilter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFilter.js; sourceTree = ""; }; - C1EA5B9C1680FE1200A21259 /* webkitFlexAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexAlign.js; sourceTree = ""; }; - C1EA5B9D1680FE1200A21259 /* webkitFlexDirection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexDirection.js; sourceTree = ""; }; - C1EA5B9E1680FE1200A21259 /* webkitFlexFlow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexFlow.js; sourceTree = ""; }; - C1EA5B9F1680FE1200A21259 /* webkitFlexItemAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexItemAlign.js; sourceTree = ""; }; - C1EA5BA01680FE1200A21259 /* webkitFlexLinePack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexLinePack.js; sourceTree = ""; }; - C1EA5BA11680FE1200A21259 /* webkitFlexOrder.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexOrder.js; sourceTree = ""; }; - C1EA5BA21680FE1200A21259 /* webkitFlexPack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexPack.js; sourceTree = ""; }; - C1EA5BA31680FE1200A21259 /* webkitFlexWrap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexWrap.js; sourceTree = ""; }; - C1EA5BA41680FE1200A21259 /* webkitFlowFrom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlowFrom.js; sourceTree = ""; }; - C1EA5BA51680FE1200A21259 /* webkitFlowInto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlowInto.js; sourceTree = ""; }; - C1EA5BA61680FE1200A21259 /* webkitFontFeatureSettings.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFontFeatureSettings.js; sourceTree = ""; }; - C1EA5BA71680FE1200A21259 /* webkitFontKerning.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFontKerning.js; sourceTree = ""; }; - C1EA5BA81680FE1200A21259 /* webkitFontSizeDelta.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFontSizeDelta.js; sourceTree = ""; }; - C1EA5BA91680FE1200A21259 /* webkitFontSmoothing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFontSmoothing.js; sourceTree = ""; }; - C1EA5BAA1680FE1200A21259 /* webkitFontVariantLigatures.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFontVariantLigatures.js; sourceTree = ""; }; - C1EA5BAB1680FE1200A21259 /* webkitHighlight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHighlight.js; sourceTree = ""; }; - C1EA5BAC1680FE1200A21259 /* webkitHyphenateCharacter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHyphenateCharacter.js; sourceTree = ""; }; - C1EA5BAD1680FE1200A21259 /* webkitHyphenateLimitAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHyphenateLimitAfter.js; sourceTree = ""; }; - C1EA5BAE1680FE1200A21259 /* webkitHyphenateLimitBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHyphenateLimitBefore.js; sourceTree = ""; }; - C1EA5BAF1680FE1200A21259 /* webkitHyphenateLimitLines.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHyphenateLimitLines.js; sourceTree = ""; }; - C1EA5BB01680FE1200A21259 /* webkitHyphens.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHyphens.js; sourceTree = ""; }; - C1EA5BB11680FE1200A21259 /* webkitLineAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineAlign.js; sourceTree = ""; }; - C1EA5BB21680FE1200A21259 /* webkitLineBoxContain.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineBoxContain.js; sourceTree = ""; }; - C1EA5BB31680FE1200A21259 /* webkitLineBreak.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineBreak.js; sourceTree = ""; }; - C1EA5BB41680FE1200A21259 /* webkitLineClamp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineClamp.js; sourceTree = ""; }; - C1EA5BB51680FE1200A21259 /* webkitLineGrid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineGrid.js; sourceTree = ""; }; - C1EA5BB61680FE1200A21259 /* webkitLineSnap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineSnap.js; sourceTree = ""; }; - C1EA5BB71680FE1200A21259 /* webkitLocale.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLocale.js; sourceTree = ""; }; - C1EA5BB81680FE1200A21259 /* webkitLogicalHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLogicalHeight.js; sourceTree = ""; }; - C1EA5BB91680FE1200A21259 /* webkitLogicalWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLogicalWidth.js; sourceTree = ""; }; - C1EA5BBA1680FE1200A21259 /* webkitMarginAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginAfter.js; sourceTree = ""; }; - C1EA5BBB1680FE1200A21259 /* webkitMarginAfterCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginAfterCollapse.js; sourceTree = ""; }; - C1EA5BBC1680FE1200A21259 /* webkitMarginBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginBefore.js; sourceTree = ""; }; - C1EA5BBD1680FE1200A21259 /* webkitMarginBeforeCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginBeforeCollapse.js; sourceTree = ""; }; - C1EA5BBE1680FE1200A21259 /* webkitMarginBottomCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginBottomCollapse.js; sourceTree = ""; }; - C1EA5BBF1680FE1200A21259 /* webkitMarginCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginCollapse.js; sourceTree = ""; }; - C1EA5BC01680FE1200A21259 /* webkitMarginEnd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginEnd.js; sourceTree = ""; }; - C1EA5BC11680FE1200A21259 /* webkitMarginStart.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginStart.js; sourceTree = ""; }; - C1EA5BC21680FE1200A21259 /* webkitMarginTopCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginTopCollapse.js; sourceTree = ""; }; - C1EA5BC31680FE1200A21259 /* webkitMarquee.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarquee.js; sourceTree = ""; }; - C1EA5BC41680FE1200A21259 /* webkitMarqueeDirection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarqueeDirection.js; sourceTree = ""; }; - C1EA5BC51680FE1200A21259 /* webkitMarqueeIncrement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarqueeIncrement.js; sourceTree = ""; }; - C1EA5BC61680FE1200A21259 /* webkitMarqueeRepetition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarqueeRepetition.js; sourceTree = ""; }; - C1EA5BC71680FE1200A21259 /* webkitMarqueeSpeed.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarqueeSpeed.js; sourceTree = ""; }; - C1EA5BC81680FE1200A21259 /* webkitMarqueeStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarqueeStyle.js; sourceTree = ""; }; - C1EA5BC91680FE1200A21259 /* webkitMask.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMask.js; sourceTree = ""; }; - C1EA5BCA1680FE1200A21259 /* webkitMaskAttachment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskAttachment.js; sourceTree = ""; }; - C1EA5BCB1680FE1200A21259 /* webkitMaskBoxImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImage.js; sourceTree = ""; }; - C1EA5BCC1680FE1200A21259 /* webkitMaskBoxImageOutset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImageOutset.js; sourceTree = ""; }; - C1EA5BCD1680FE1200A21259 /* webkitMaskBoxImageRepeat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImageRepeat.js; sourceTree = ""; }; - C1EA5BCE1680FE1200A21259 /* webkitMaskBoxImageSlice.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImageSlice.js; sourceTree = ""; }; - C1EA5BCF1680FE1200A21259 /* webkitMaskBoxImageSource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImageSource.js; sourceTree = ""; }; - C1EA5BD01680FE1200A21259 /* webkitMaskBoxImageWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImageWidth.js; sourceTree = ""; }; - C1EA5BD11680FE1200A21259 /* webkitMaskClip.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskClip.js; sourceTree = ""; }; - C1EA5BD21680FE1200A21259 /* webkitMaskComposite.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskComposite.js; sourceTree = ""; }; - C1EA5BD31680FE1200A21259 /* webkitMaskImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskImage.js; sourceTree = ""; }; - C1EA5BD41680FE1200A21259 /* webkitMaskOrigin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskOrigin.js; sourceTree = ""; }; - C1EA5BD51680FE1200A21259 /* webkitMaskPosition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskPosition.js; sourceTree = ""; }; - C1EA5BD61680FE1200A21259 /* webkitMaskPositionX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskPositionX.js; sourceTree = ""; }; - C1EA5BD71680FE1200A21259 /* webkitMaskPositionY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskPositionY.js; sourceTree = ""; }; - C1EA5BD81680FE1200A21259 /* webkitMaskRepeat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskRepeat.js; sourceTree = ""; }; - C1EA5BD91680FE1200A21259 /* webkitMaskRepeatX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskRepeatX.js; sourceTree = ""; }; - C1EA5BDA1680FE1200A21259 /* webkitMaskRepeatY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskRepeatY.js; sourceTree = ""; }; - C1EA5BDB1680FE1200A21259 /* webkitMaskSize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskSize.js; sourceTree = ""; }; - C1EA5BDC1680FE1200A21259 /* webkitMatchNearestMailBlockquoteColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMatchNearestMailBlockquoteColor.js; sourceTree = ""; }; - C1EA5BDD1680FE1200A21259 /* webkitMaxLogicalHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaxLogicalHeight.js; sourceTree = ""; }; - C1EA5BDE1680FE1200A21259 /* webkitMaxLogicalWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaxLogicalWidth.js; sourceTree = ""; }; - C1EA5BDF1680FE1200A21259 /* webkitMinLogicalHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMinLogicalHeight.js; sourceTree = ""; }; - C1EA5BE01680FE1200A21259 /* webkitMinLogicalWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMinLogicalWidth.js; sourceTree = ""; }; - C1EA5BE11680FE1200A21259 /* webkitNbspMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitNbspMode.js; sourceTree = ""; }; - C1EA5BE21680FE1200A21259 /* webkitOverflowScrolling.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitOverflowScrolling.js; sourceTree = ""; }; - C1EA5BE31680FE1200A21259 /* webkitPaddingAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPaddingAfter.js; sourceTree = ""; }; - C1EA5BE41680FE1200A21259 /* webkitPaddingBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPaddingBefore.js; sourceTree = ""; }; - C1EA5BE51680FE1200A21259 /* webkitPaddingEnd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPaddingEnd.js; sourceTree = ""; }; - C1EA5BE61680FE1200A21259 /* webkitPaddingStart.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPaddingStart.js; sourceTree = ""; }; - C1EA5BE71680FE1200A21259 /* webkitPerspective.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPerspective.js; sourceTree = ""; }; - C1EA5BE81680FE1200A21259 /* webkitPerspectiveOrigin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPerspectiveOrigin.js; sourceTree = ""; }; - C1EA5BE91680FE1200A21259 /* webkitPerspectiveOriginX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPerspectiveOriginX.js; sourceTree = ""; }; - C1EA5BEA1680FE1200A21259 /* webkitPerspectiveOriginY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPerspectiveOriginY.js; sourceTree = ""; }; - C1EA5BEB1680FE1200A21259 /* webkitPrintColorAdjust.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPrintColorAdjust.js; sourceTree = ""; }; - C1EA5BEC1680FE1200A21259 /* webkitRegionBreakAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitRegionBreakAfter.js; sourceTree = ""; }; - C1EA5BED1680FE1200A21259 /* webkitRegionBreakBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitRegionBreakBefore.js; sourceTree = ""; }; - C1EA5BEE1680FE1200A21259 /* webkitRegionBreakInside.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitRegionBreakInside.js; sourceTree = ""; }; - C1EA5BEF1680FE1200A21259 /* webkitRegionOverflow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitRegionOverflow.js; sourceTree = ""; }; - C1EA5BF01680FE1200A21259 /* webkitRtlOrdering.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitRtlOrdering.js; sourceTree = ""; }; - C1EA5BF11680FE1200A21259 /* webkitSvgShadow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitSvgShadow.js; sourceTree = ""; }; - C1EA5BF21680FE1200A21259 /* webkitTapHighlightColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTapHighlightColor.js; sourceTree = ""; }; - C1EA5BF31680FE1200A21259 /* webkitTextCombine.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextCombine.js; sourceTree = ""; }; - C1EA5BF41680FE1200A21259 /* webkitTextDecorationsInEffect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextDecorationsInEffect.js; sourceTree = ""; }; - C1EA5BF51680FE1200A21259 /* webkitTextEmphasis.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextEmphasis.js; sourceTree = ""; }; - C1EA5BF61680FE1200A21259 /* webkitTextEmphasisColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextEmphasisColor.js; sourceTree = ""; }; - C1EA5BF71680FE1200A21259 /* webkitTextEmphasisPosition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextEmphasisPosition.js; sourceTree = ""; }; - C1EA5BF81680FE1200A21259 /* webkitTextEmphasisStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextEmphasisStyle.js; sourceTree = ""; }; - C1EA5BF91680FE1200A21259 /* webkitTextFillColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextFillColor.js; sourceTree = ""; }; - C1EA5BFA1680FE1200A21259 /* webkitTextOrientation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextOrientation.js; sourceTree = ""; }; - C1EA5BFB1680FE1200A21259 /* webkitTextSecurity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextSecurity.js; sourceTree = ""; }; - C1EA5BFC1680FE1200A21259 /* webkitTextSizeAdjust.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextSizeAdjust.js; sourceTree = ""; }; - C1EA5BFD1680FE1200A21259 /* webkitTextStroke.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextStroke.js; sourceTree = ""; }; - C1EA5BFE1680FE1200A21259 /* webkitTextStrokeColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextStrokeColor.js; sourceTree = ""; }; - C1EA5BFF1680FE1200A21259 /* webkitTextStrokeWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextStrokeWidth.js; sourceTree = ""; }; - C1EA5C001680FE1200A21259 /* webkitTransform.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransform.js; sourceTree = ""; }; - C1EA5C011680FE1200A21259 /* webkitTransformOrigin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransformOrigin.js; sourceTree = ""; }; - C1EA5C021680FE1200A21259 /* webkitTransformOriginX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransformOriginX.js; sourceTree = ""; }; - C1EA5C031680FE1200A21259 /* webkitTransformOriginY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransformOriginY.js; sourceTree = ""; }; - C1EA5C041680FE1200A21259 /* webkitTransformOriginZ.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransformOriginZ.js; sourceTree = ""; }; - C1EA5C051680FE1200A21259 /* webkitTransformStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransformStyle.js; sourceTree = ""; }; - C1EA5C061680FE1200A21259 /* webkitTransition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransition.js; sourceTree = ""; }; - C1EA5C071680FE1200A21259 /* webkitTransitionDelay.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransitionDelay.js; sourceTree = ""; }; - C1EA5C081680FE1200A21259 /* webkitTransitionDuration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransitionDuration.js; sourceTree = ""; }; - C1EA5C091680FE1200A21259 /* webkitTransitionProperty.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransitionProperty.js; sourceTree = ""; }; - C1EA5C0A1680FE1200A21259 /* webkitTransitionTimingFunction.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransitionTimingFunction.js; sourceTree = ""; }; - C1EA5C0B1680FE1200A21259 /* webkitUserDrag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitUserDrag.js; sourceTree = ""; }; - C1EA5C0C1680FE1200A21259 /* webkitUserModify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitUserModify.js; sourceTree = ""; }; - C1EA5C0D1680FE1200A21259 /* webkitUserSelect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitUserSelect.js; sourceTree = ""; }; - C1EA5C0E1680FE1200A21259 /* webkitWrap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrap.js; sourceTree = ""; }; - C1EA5C0F1680FE1200A21259 /* webkitWrapFlow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapFlow.js; sourceTree = ""; }; - C1EA5C101680FE1200A21259 /* webkitWrapMargin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapMargin.js; sourceTree = ""; }; - C1EA5C111680FE1200A21259 /* webkitWrapPadding.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapPadding.js; sourceTree = ""; }; - C1EA5C121680FE1200A21259 /* webkitWrapShapeInside.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapShapeInside.js; sourceTree = ""; }; - C1EA5C131680FE1200A21259 /* webkitWrapShapeOutside.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapShapeOutside.js; sourceTree = ""; }; - C1EA5C141680FE1200A21259 /* webkitWrapThrough.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapThrough.js; sourceTree = ""; }; - C1EA5C151680FE1200A21259 /* webkitWritingMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWritingMode.js; sourceTree = ""; }; - C1EA5C161680FE1200A21259 /* whiteSpace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = whiteSpace.js; sourceTree = ""; }; - C1EA5C171680FE1200A21259 /* widows.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = widows.js; sourceTree = ""; }; - C1EA5C181680FE1200A21259 /* width.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = width.js; sourceTree = ""; }; - C1EA5C191680FE1200A21259 /* wordBreak.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = wordBreak.js; sourceTree = ""; }; - C1EA5C1A1680FE1200A21259 /* wordSpacing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = wordSpacing.js; sourceTree = ""; }; - C1EA5C1B1680FE1200A21259 /* wordWrap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = wordWrap.js; sourceTree = ""; }; - C1EA5C1C1680FE1200A21259 /* writingMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = writingMode.js; sourceTree = ""; }; - C1EA5C1D1680FE1200A21259 /* zIndex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = zIndex.js; sourceTree = ""; }; - C1EA5C1E1680FE1200A21259 /* zoom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = zoom.js; sourceTree = ""; }; - C1EA5C1F1680FE1200A21259 /* props */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = props; sourceTree = ""; }; - C1EA5C201680FE1200A21259 /* make_properties.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = make_properties.pl; sourceTree = ""; }; - C1EA5C211680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5C221680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5C241680FE1200A21259 /* tests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tests.js; sourceTree = ""; }; - C1EA5C261680FE1200A21259 /* .project */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = .project; sourceTree = ""; }; - C1EA5C271680FE1200A21259 /* .project.bak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = .project.bak; sourceTree = ""; }; - C1EA5C291680FE1200A21259 /* .jsdtscope */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = .jsdtscope; sourceTree = ""; }; - C1EA5C2A1680FE1200A21259 /* org.eclipse.core.resources.prefs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = org.eclipse.core.resources.prefs; sourceTree = ""; }; - C1EA5C2B1680FE1200A21259 /* org.eclipse.wst.jsdt.ui.superType.container */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = org.eclipse.wst.jsdt.ui.superType.container; sourceTree = ""; }; - C1EA5C2C1680FE1200A21259 /* org.eclipse.wst.jsdt.ui.superType.name */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = org.eclipse.wst.jsdt.ui.superType.name; sourceTree = ""; }; - C1EA5C2D1680FE1200A21259 /* a */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = a; sourceTree = ""; }; - C1EA5C2E1680FE1200A21259 /* b */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = b; sourceTree = ""; }; - C1EA5C2F1680FE1200A21259 /* c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = c; sourceTree = ""; }; - C1EA5C301680FE1200A21259 /* CHANGELOG */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGELOG; sourceTree = ""; }; - C1EA5C311680FE1200A21259 /* json2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json2.js; sourceTree = ""; }; - C1EA5C331680FE1200A21259 /* htmlparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmlparser.js; sourceTree = ""; }; - C1EA5C341680FE1200A21259 /* htmlparser.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmlparser.min.js; sourceTree = ""; }; - C1EA5C351680FE1200A21259 /* node-htmlparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-htmlparser.js"; sourceTree = ""; }; - C1EA5C361680FE1200A21259 /* node-htmlparser.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-htmlparser.min.js"; sourceTree = ""; }; - C1EA5C371680FE1200A21259 /* libxmljs.node */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.bundle"; path = libxmljs.node; sourceTree = ""; }; - C1EA5C381680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA5C3A1680FE1200A21259 /* a */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = a; sourceTree = ""; }; - C1EA5C3B1680FE1200A21259 /* b */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = b; sourceTree = ""; }; - C1EA5C3C1680FE1200A21259 /* compat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compat.js; sourceTree = ""; }; - C1EA5C3D1680FE1200A21259 /* htmlparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmlparser.js; sourceTree = ""; }; - C1EA5C3E1680FE1200A21259 /* parser.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = parser.zip; sourceTree = ""; }; - C1EA5C3F1680FE1200A21259 /* test01.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test01.js; sourceTree = ""; }; - C1EA5C401680FE1200A21259 /* test02.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test02.js; sourceTree = ""; }; - C1EA5C411680FE1200A21259 /* newparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = newparser.js; sourceTree = ""; }; - C1EA5C421680FE1200A21259 /* node-htmlparser.old.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-htmlparser.old.js"; sourceTree = ""; }; - C1EA5C431680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5C441680FE1200A21259 /* profile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = profile; sourceTree = ""; }; - C1EA5C451680FE1200A21259 /* profile.getelement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = profile.getelement.js; sourceTree = ""; }; - C1EA5C461680FE1200A21259 /* profile.getelement.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = profile.getelement.txt; sourceTree = ""; }; - C1EA5C471680FE1200A21259 /* profile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = profile.js; sourceTree = ""; }; - C1EA5C481680FE1200A21259 /* profileresults.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = profileresults.txt; sourceTree = ""; }; - C1EA5C4B1680FE1200A21259 /* CHANGELOG */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGELOG; sourceTree = ""; }; - C1EA5C4C1680FE1200A21259 /* json2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json2.js; sourceTree = ""; }; - C1EA5C4E1680FE1200A21259 /* node-htmlparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-htmlparser.js"; sourceTree = ""; }; - C1EA5C4F1680FE1200A21259 /* node-htmlparser.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-htmlparser.min.js"; sourceTree = ""; }; - C1EA5C501680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA5C511680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5C521680FE1200A21259 /* profile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = profile.js; sourceTree = ""; }; - C1EA5C531680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5C541680FE1200A21259 /* runtests.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = runtests.html; sourceTree = ""; }; - C1EA5C551680FE1200A21259 /* runtests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtests.js; sourceTree = ""; }; - C1EA5C561680FE1200A21259 /* runtests.min.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = runtests.min.html; sourceTree = ""; }; - C1EA5C571680FE1200A21259 /* runtests.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtests.min.js; sourceTree = ""; }; - C1EA5C581680FE1200A21259 /* snippet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = snippet.js; sourceTree = ""; }; - C1EA5C5A1680FE1200A21259 /* 01-basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "01-basic.js"; sourceTree = ""; }; - C1EA5C5B1680FE1200A21259 /* 02-single_tag_1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "02-single_tag_1.js"; sourceTree = ""; }; - C1EA5C5C1680FE1200A21259 /* 03-single_tag_2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "03-single_tag_2.js"; sourceTree = ""; }; - C1EA5C5D1680FE1200A21259 /* 04-unescaped_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "04-unescaped_in_script.js"; sourceTree = ""; }; - C1EA5C5E1680FE1200A21259 /* 05-tags_in_comment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "05-tags_in_comment.js"; sourceTree = ""; }; - C1EA5C5F1680FE1200A21259 /* 06-comment_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "06-comment_in_script.js"; sourceTree = ""; }; - C1EA5C601680FE1200A21259 /* 07-unescaped_in_style.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "07-unescaped_in_style.js"; sourceTree = ""; }; - C1EA5C611680FE1200A21259 /* 08-extra_spaces_in_tag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "08-extra_spaces_in_tag.js"; sourceTree = ""; }; - C1EA5C621680FE1200A21259 /* 09-unquoted_attrib.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "09-unquoted_attrib.js"; sourceTree = ""; }; - C1EA5C631680FE1200A21259 /* 10-singular_attribute.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "10-singular_attribute.js"; sourceTree = ""; }; - C1EA5C641680FE1200A21259 /* 11-text_outside_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "11-text_outside_tags.js"; sourceTree = ""; }; - C1EA5C651680FE1200A21259 /* 12-text_only.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "12-text_only.js"; sourceTree = ""; }; - C1EA5C661680FE1200A21259 /* 13-comment_in_text.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "13-comment_in_text.js"; sourceTree = ""; }; - C1EA5C671680FE1200A21259 /* 14-comment_in_text_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "14-comment_in_text_in_script.js"; sourceTree = ""; }; - C1EA5C681680FE1200A21259 /* 15-non-verbose.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "15-non-verbose.js"; sourceTree = ""; }; - C1EA5C691680FE1200A21259 /* 16-ignore_whitespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "16-ignore_whitespace.js"; sourceTree = ""; }; - C1EA5C6A1680FE1200A21259 /* 17-xml_namespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "17-xml_namespace.js"; sourceTree = ""; }; - C1EA5C6B1680FE1200A21259 /* 18-enforce_empty_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "18-enforce_empty_tags.js"; sourceTree = ""; }; - C1EA5C6C1680FE1200A21259 /* 19-ignore_empty_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "19-ignore_empty_tags.js"; sourceTree = ""; }; - C1EA5C6D1680FE1200A21259 /* 20-rss.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "20-rss.js"; sourceTree = ""; }; - C1EA5C6E1680FE1200A21259 /* 21-atom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "21-atom.js"; sourceTree = ""; }; - C1EA5C6F1680FE1200A21259 /* utils_example.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils_example.js; sourceTree = ""; }; - C1EA5C701680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5C711680FE1200A21259 /* rssbug.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rssbug.js; sourceTree = ""; }; - C1EA5C721680FE1200A21259 /* rssbug.rss */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = rssbug.rss; sourceTree = ""; }; - C1EA5C731680FE1200A21259 /* runtests.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = runtests.html; sourceTree = ""; }; - C1EA5C741680FE1200A21259 /* runtests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtests.js; sourceTree = ""; }; - C1EA5C751680FE1200A21259 /* runtests.min.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = runtests.min.html; sourceTree = ""; }; - C1EA5C761680FE1200A21259 /* runtests.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtests.min.js; sourceTree = ""; }; - C1EA5C771680FE1200A21259 /* runtests_new.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtests_new.js; sourceTree = ""; }; - C1EA5C781680FE1200A21259 /* snippet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = snippet.js; sourceTree = ""; }; - C1EA5C791680FE1200A21259 /* test01.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test01.js; sourceTree = ""; }; - C1EA5C7B1680FE1200A21259 /* api.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = api.html; sourceTree = ""; }; - C1EA5C7C1680FE1200A21259 /* getelement.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = getelement.html; sourceTree = ""; }; - C1EA5C7D1680FE1200A21259 /* trackerchecker.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = trackerchecker.html; sourceTree = ""; }; - C1EA5C7F1680FE1200A21259 /* 01-basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "01-basic.js"; sourceTree = ""; }; - C1EA5C801680FE1200A21259 /* 02-single_tag_1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "02-single_tag_1.js"; sourceTree = ""; }; - C1EA5C811680FE1200A21259 /* 03-single_tag_2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "03-single_tag_2.js"; sourceTree = ""; }; - C1EA5C821680FE1200A21259 /* 04-unescaped_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "04-unescaped_in_script.js"; sourceTree = ""; }; - C1EA5C831680FE1200A21259 /* 05-tags_in_comment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "05-tags_in_comment.js"; sourceTree = ""; }; - C1EA5C841680FE1200A21259 /* 06-comment_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "06-comment_in_script.js"; sourceTree = ""; }; - C1EA5C851680FE1200A21259 /* 07-unescaped_in_style.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "07-unescaped_in_style.js"; sourceTree = ""; }; - C1EA5C861680FE1200A21259 /* 08-extra_spaces_in_tag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "08-extra_spaces_in_tag.js"; sourceTree = ""; }; - C1EA5C871680FE1200A21259 /* 09-unquoted_attrib.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "09-unquoted_attrib.js"; sourceTree = ""; }; - C1EA5C881680FE1200A21259 /* 10-singular_attribute.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "10-singular_attribute.js"; sourceTree = ""; }; - C1EA5C891680FE1200A21259 /* 11-text_outside_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "11-text_outside_tags.js"; sourceTree = ""; }; - C1EA5C8A1680FE1200A21259 /* 12-text_only.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "12-text_only.js"; sourceTree = ""; }; - C1EA5C8B1680FE1200A21259 /* 13-comment_in_text.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "13-comment_in_text.js"; sourceTree = ""; }; - C1EA5C8C1680FE1200A21259 /* 14-comment_in_text_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "14-comment_in_text_in_script.js"; sourceTree = ""; }; - C1EA5C8D1680FE1200A21259 /* 15-non-verbose.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "15-non-verbose.js"; sourceTree = ""; }; - C1EA5C8E1680FE1200A21259 /* 16-ignore_whitespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "16-ignore_whitespace.js"; sourceTree = ""; }; - C1EA5C8F1680FE1200A21259 /* 17-xml_namespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "17-xml_namespace.js"; sourceTree = ""; }; - C1EA5C901680FE1200A21259 /* 18-enforce_empty_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "18-enforce_empty_tags.js"; sourceTree = ""; }; - C1EA5C911680FE1200A21259 /* 19-ignore_empty_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "19-ignore_empty_tags.js"; sourceTree = ""; }; - C1EA5C921680FE1200A21259 /* 20-rss.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "20-rss.js"; sourceTree = ""; }; - C1EA5C931680FE1200A21259 /* 21-atom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "21-atom.js"; sourceTree = ""; }; - C1EA5C941680FE1200A21259 /* 22-position_data.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "22-position_data.js"; sourceTree = ""; }; - C1EA5C961680FE1200A21259 /* snippet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = snippet.js; sourceTree = ""; }; - C1EA5C971680FE1200A21259 /* utils_example.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils_example.js; sourceTree = ""; }; - C1EA5C981680FE1200A21259 /* v8.log */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = v8.log; sourceTree = ""; }; - C1EA5C9A1680FE1200A21259 /* aws.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = aws.js; sourceTree = ""; }; - C1EA5C9B1680FE1200A21259 /* forever.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = forever.js; sourceTree = ""; }; - C1EA5C9C1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA5C9D1680FE1200A21259 /* main.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main.js; sourceTree = ""; }; - C1EA5CA01680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5CA21680FE1200A21259 /* form_data.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = form_data.js; sourceTree = ""; }; - C1EA5CA31680FE1200A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA5CA41680FE1200A21259 /* node-form-data.sublime-project */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "node-form-data.sublime-project"; sourceTree = ""; }; - C1EA5CA51680FE1200A21259 /* node-form-data.sublime-workspace */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "node-form-data.sublime-workspace"; sourceTree = ""; }; - C1EA5CA81680FE1200A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA5CA91680FE1200A21259 /* async.min.js.gzip */ = {isa = PBXFileReference; lastKnownFileType = file; path = async.min.js.gzip; sourceTree = ""; }; - C1EA5CAB1680FE1200A21259 /* nodeunit.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nodeunit.css; sourceTree = ""; }; - C1EA5CAC1680FE1200A21259 /* nodeunit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nodeunit.js; sourceTree = ""; }; - C1EA5CAE1680FE1200A21259 /* async.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = async.min.js; sourceTree = ""; }; - C1EA5CAF1680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5CB11680FE1200A21259 /* async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = async.js; sourceTree = ""; }; - C1EA5CB21680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA5CB31680FE1200A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA5CB41680FE1200A21259 /* nodelint.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = nodelint.cfg; sourceTree = ""; }; - C1EA5CB51680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5CB61680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5CB81680FE1200A21259 /* .swp */ = {isa = PBXFileReference; lastKnownFileType = file; path = .swp; sourceTree = ""; }; - C1EA5CB91680FE1200A21259 /* test-async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-async.js"; sourceTree = ""; }; - C1EA5CBA1680FE1200A21259 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = test.html; sourceTree = ""; }; - C1EA5CBC1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5CBE1680FE1200A21259 /* combined_stream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = combined_stream.js; sourceTree = ""; }; - C1EA5CBF1680FE1200A21259 /* License */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License; sourceTree = ""; }; - C1EA5CC01680FE1200A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA5CC31680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5CC51680FE1200A21259 /* delayed_stream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = delayed_stream.js; sourceTree = ""; }; - C1EA5CC61680FE1200A21259 /* License */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License; sourceTree = ""; }; - C1EA5CC71680FE1200A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA5CC81680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5CC91680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA5CCB1680FE1200A21259 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = common.js; sourceTree = ""; }; - C1EA5CCD1680FE1200A21259 /* test-delayed-http-upload.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-http-upload.js"; sourceTree = ""; }; - C1EA5CCE1680FE1200A21259 /* test-delayed-stream-auto-pause.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-stream-auto-pause.js"; sourceTree = ""; }; - C1EA5CCF1680FE1200A21259 /* test-delayed-stream-pause.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-stream-pause.js"; sourceTree = ""; }; - C1EA5CD01680FE1200A21259 /* test-delayed-stream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-stream.js"; sourceTree = ""; }; - C1EA5CD11680FE1200A21259 /* test-handle-source-errors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-handle-source-errors.js"; sourceTree = ""; }; - C1EA5CD21680FE1200A21259 /* test-max-data-size.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-max-data-size.js"; sourceTree = ""; }; - C1EA5CD31680FE1200A21259 /* test-pipe-resumes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-pipe-resumes.js"; sourceTree = ""; }; - C1EA5CD41680FE1200A21259 /* test-proxy-readable.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-proxy-readable.js"; sourceTree = ""; }; - C1EA5CD51680FE1200A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA5CD61680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5CD71680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA5CD91680FE1200A21259 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = common.js; sourceTree = ""; }; - C1EA5CDB1680FE1200A21259 /* file1.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = file1.txt; sourceTree = ""; }; - C1EA5CDC1680FE1200A21259 /* file2.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = file2.txt; sourceTree = ""; }; - C1EA5CDE1680FE1200A21259 /* test-callback-streams.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-callback-streams.js"; sourceTree = ""; }; - C1EA5CDF1680FE1200A21259 /* test-data-size.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-data-size.js"; sourceTree = ""; }; - C1EA5CE01680FE1200A21259 /* test-delayed-streams-and-buffers-and-strings.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-streams-and-buffers-and-strings.js"; sourceTree = ""; }; - C1EA5CE11680FE1200A21259 /* test-delayed-streams.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-streams.js"; sourceTree = ""; }; - C1EA5CE21680FE1200A21259 /* test-max-data-size.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-max-data-size.js"; sourceTree = ""; }; - C1EA5CE31680FE1200A21259 /* test-unpaused-streams.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-unpaused-streams.js"; sourceTree = ""; }; - C1EA5CE41680FE1200A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA5CE51680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5CE61680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA5CE81680FE1200A21259 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = common.js; sourceTree = ""; }; - C1EA5CEA1680FE1200A21259 /* bacon.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bacon.txt; sourceTree = ""; }; - C1EA5CEB1680FE1200A21259 /* unicycle.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = unicycle.jpg; sourceTree = ""; }; - C1EA5CED1680FE1200A21259 /* test-form-get-length.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-form-get-length.js"; sourceTree = ""; }; - C1EA5CEE1680FE1200A21259 /* test-get-boundary.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-get-boundary.js"; sourceTree = ""; }; - C1EA5CEF1680FE1200A21259 /* test-http-response.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-http-response.js"; sourceTree = ""; }; - C1EA5CF01680FE1200A21259 /* test-pipe.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-pipe.js"; sourceTree = ""; }; - C1EA5CF11680FE1200A21259 /* test-submit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-submit.js"; sourceTree = ""; }; - C1EA5CF21680FE1200A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA5CF41680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA5CF51680FE1200A21259 /* mime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mime.js; sourceTree = ""; }; - C1EA5CF61680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5CF71680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5CF81680FE1200A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA5CFA1680FE1200A21259 /* mime.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mime.types; sourceTree = ""; }; - C1EA5CFB1680FE1200A21259 /* node.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = node.types; sourceTree = ""; }; - C1EA5CFC1680FE1200A21259 /* oauth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = oauth.js; sourceTree = ""; }; - C1EA5CFD1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5CFE1680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5D001680FE1200A21259 /* googledoodle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = googledoodle.png; sourceTree = ""; }; - C1EA5D011680FE1200A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA5D021680FE1200A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA5D031680FE1200A21259 /* squid.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = squid.conf; sourceTree = ""; }; - C1EA5D061680FE1200A21259 /* ca.cnf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.cnf; sourceTree = ""; }; - C1EA5D071680FE1200A21259 /* ca.crl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.crl; sourceTree = ""; }; - C1EA5D081680FE1200A21259 /* ca.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.crt; sourceTree = ""; }; - C1EA5D091680FE1200A21259 /* ca.csr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.csr; sourceTree = ""; }; - C1EA5D0A1680FE1200A21259 /* ca.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.key; sourceTree = ""; }; - C1EA5D0B1680FE1200A21259 /* ca.srl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.srl; sourceTree = ""; }; - C1EA5D0C1680FE1200A21259 /* server.cnf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.cnf; sourceTree = ""; }; - C1EA5D0D1680FE1200A21259 /* server.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.crt; sourceTree = ""; }; - C1EA5D0E1680FE1200A21259 /* server.csr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.csr; sourceTree = ""; }; - C1EA5D0F1680FE1200A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA5D101680FE1200A21259 /* server.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.key; sourceTree = ""; }; - C1EA5D111680FE1200A21259 /* npm-ca.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "npm-ca.crt"; sourceTree = ""; }; - C1EA5D121680FE1200A21259 /* test.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.crt; sourceTree = ""; }; - C1EA5D131680FE1200A21259 /* test.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.key; sourceTree = ""; }; - C1EA5D141680FE1200A21259 /* test-body.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-body.js"; sourceTree = ""; }; - C1EA5D151680FE1200A21259 /* test-cookie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-cookie.js"; sourceTree = ""; }; - C1EA5D161680FE1200A21259 /* test-cookiejar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-cookiejar.js"; sourceTree = ""; }; - C1EA5D171680FE1200A21259 /* test-defaults.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-defaults.js"; sourceTree = ""; }; - C1EA5D181680FE1200A21259 /* test-errors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-errors.js"; sourceTree = ""; }; - C1EA5D191680FE1200A21259 /* test-follow-all-303.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-follow-all-303.js"; sourceTree = ""; }; - C1EA5D1A1680FE1200A21259 /* test-follow-all.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-follow-all.js"; sourceTree = ""; }; - C1EA5D1B1680FE1200A21259 /* test-form.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-form.js"; sourceTree = ""; }; - C1EA5D1C1680FE1200A21259 /* test-headers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-headers.js"; sourceTree = ""; }; - C1EA5D1D1680FE1200A21259 /* test-httpModule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-httpModule.js"; sourceTree = ""; }; - C1EA5D1E1680FE1200A21259 /* test-https-strict.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-https-strict.js"; sourceTree = ""; }; - C1EA5D1F1680FE1200A21259 /* test-https.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-https.js"; sourceTree = ""; }; - C1EA5D201680FE1200A21259 /* test-oauth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-oauth.js"; sourceTree = ""; }; - C1EA5D211680FE1200A21259 /* test-params.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-params.js"; sourceTree = ""; }; - C1EA5D221680FE1200A21259 /* test-piped-redirect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-piped-redirect.js"; sourceTree = ""; }; - C1EA5D231680FE1200A21259 /* test-pipes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-pipes.js"; sourceTree = ""; }; - C1EA5D241680FE1200A21259 /* test-pool.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-pool.js"; sourceTree = ""; }; - C1EA5D251680FE1200A21259 /* test-protocol-changing-redirect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-protocol-changing-redirect.js"; sourceTree = ""; }; - C1EA5D261680FE1200A21259 /* test-proxy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-proxy.js"; sourceTree = ""; }; - C1EA5D271680FE1200A21259 /* test-qs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-qs.js"; sourceTree = ""; }; - C1EA5D281680FE1200A21259 /* test-redirect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-redirect.js"; sourceTree = ""; }; - C1EA5D291680FE1200A21259 /* test-s3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-s3.js"; sourceTree = ""; }; - C1EA5D2A1680FE1200A21259 /* test-timeout.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-timeout.js"; sourceTree = ""; }; - C1EA5D2B1680FE1200A21259 /* test-toJSON.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-toJSON.js"; sourceTree = ""; }; - C1EA5D2C1680FE1200A21259 /* test-tunnel.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-tunnel.js"; sourceTree = ""; }; - C1EA5D2D1680FE1200A21259 /* unicycle.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = unicycle.jpg; sourceTree = ""; }; - C1EA5D2E1680FE1200A21259 /* tunnel.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tunnel.js; sourceTree = ""; }; - C1EA5D2F1680FE1200A21259 /* uuid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = uuid.js; sourceTree = ""; }; - C1EA5D321680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5D331680FE1200A21259 /* jar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jar.js; sourceTree = ""; }; - C1EA5D341680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5D351680FE1200A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5D371680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5D391680FE1200A21259 /* uglifyjs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = uglifyjs; sourceTree = ""; }; - C1EA5D3A1680FE1200A21259 /* docstyle.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = docstyle.css; sourceTree = ""; }; - C1EA5D3C1680FE1200A21259 /* consolidator.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = consolidator.js; sourceTree = ""; }; - C1EA5D3D1680FE1200A21259 /* object-ast.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "object-ast.js"; sourceTree = ""; }; - C1EA5D3E1680FE1200A21259 /* parse-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "parse-js.js"; sourceTree = ""; }; - C1EA5D3F1680FE1200A21259 /* process.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = process.js; sourceTree = ""; }; - C1EA5D401680FE1200A21259 /* squeeze-more.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "squeeze-more.js"; sourceTree = ""; }; - C1EA5D411680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5D421680FE1200A21259 /* README.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = README.html; sourceTree = ""; }; - C1EA5D431680FE1200A21259 /* README.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.org; sourceTree = ""; }; - C1EA5D451680FE1200A21259 /* beautify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = beautify.js; sourceTree = ""; }; - C1EA5D461680FE1200A21259 /* testparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = testparser.js; sourceTree = ""; }; - C1EA5D4A1680FE1200A21259 /* array1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array1.js; sourceTree = ""; }; - C1EA5D4B1680FE1200A21259 /* array2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array2.js; sourceTree = ""; }; - C1EA5D4C1680FE1200A21259 /* array3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array3.js; sourceTree = ""; }; - C1EA5D4D1680FE1200A21259 /* array4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array4.js; sourceTree = ""; }; - C1EA5D4E1680FE1200A21259 /* assignment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assignment.js; sourceTree = ""; }; - C1EA5D4F1680FE1200A21259 /* concatstring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = concatstring.js; sourceTree = ""; }; - C1EA5D501680FE1200A21259 /* const.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = const.js; sourceTree = ""; }; - C1EA5D511680FE1200A21259 /* empty-blocks.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "empty-blocks.js"; sourceTree = ""; }; - C1EA5D521680FE1200A21259 /* forstatement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = forstatement.js; sourceTree = ""; }; - C1EA5D531680FE1200A21259 /* if.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = if.js; sourceTree = ""; }; - C1EA5D541680FE1200A21259 /* ifreturn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn.js; sourceTree = ""; }; - C1EA5D551680FE1200A21259 /* ifreturn2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn2.js; sourceTree = ""; }; - C1EA5D561680FE1200A21259 /* issue10.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue10.js; sourceTree = ""; }; - C1EA5D571680FE1200A21259 /* issue11.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue11.js; sourceTree = ""; }; - C1EA5D581680FE1200A21259 /* issue13.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue13.js; sourceTree = ""; }; - C1EA5D591680FE1200A21259 /* issue14.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue14.js; sourceTree = ""; }; - C1EA5D5A1680FE1200A21259 /* issue16.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue16.js; sourceTree = ""; }; - C1EA5D5B1680FE1200A21259 /* issue17.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue17.js; sourceTree = ""; }; - C1EA5D5C1680FE1200A21259 /* issue20.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue20.js; sourceTree = ""; }; - C1EA5D5D1680FE1200A21259 /* issue21.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue21.js; sourceTree = ""; }; - C1EA5D5E1680FE1200A21259 /* issue25.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue25.js; sourceTree = ""; }; - C1EA5D5F1680FE1200A21259 /* issue27.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue27.js; sourceTree = ""; }; - C1EA5D601680FE1200A21259 /* issue278.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue278.js; sourceTree = ""; }; - C1EA5D611680FE1200A21259 /* issue28.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue28.js; sourceTree = ""; }; - C1EA5D621680FE1200A21259 /* issue29.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue29.js; sourceTree = ""; }; - C1EA5D631680FE1200A21259 /* issue30.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue30.js; sourceTree = ""; }; - C1EA5D641680FE1200A21259 /* issue34.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue34.js; sourceTree = ""; }; - C1EA5D651680FE1200A21259 /* issue4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue4.js; sourceTree = ""; }; - C1EA5D661680FE1200A21259 /* issue48.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue48.js; sourceTree = ""; }; - C1EA5D671680FE1200A21259 /* issue50.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue50.js; sourceTree = ""; }; - C1EA5D681680FE1200A21259 /* issue53.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue53.js; sourceTree = ""; }; - C1EA5D691680FE1200A21259 /* issue54.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue54.1.js; sourceTree = ""; }; - C1EA5D6A1680FE1200A21259 /* issue68.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue68.js; sourceTree = ""; }; - C1EA5D6B1680FE1200A21259 /* issue69.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue69.js; sourceTree = ""; }; - C1EA5D6C1680FE1200A21259 /* issue9.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue9.js; sourceTree = ""; }; - C1EA5D6D1680FE1200A21259 /* mangle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mangle.js; sourceTree = ""; }; - C1EA5D6E1680FE1200A21259 /* null_string.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = null_string.js; sourceTree = ""; }; - C1EA5D6F1680FE1200A21259 /* strict-equals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "strict-equals.js"; sourceTree = ""; }; - C1EA5D701680FE1200A21259 /* var.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = var.js; sourceTree = ""; }; - C1EA5D711680FE1200A21259 /* whitespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = whitespace.js; sourceTree = ""; }; - C1EA5D721680FE1200A21259 /* with.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = with.js; sourceTree = ""; }; - C1EA5D741680FE1200A21259 /* array1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array1.js; sourceTree = ""; }; - C1EA5D751680FE1200A21259 /* array2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array2.js; sourceTree = ""; }; - C1EA5D761680FE1200A21259 /* array3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array3.js; sourceTree = ""; }; - C1EA5D771680FE1200A21259 /* array4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array4.js; sourceTree = ""; }; - C1EA5D781680FE1200A21259 /* assignment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assignment.js; sourceTree = ""; }; - C1EA5D791680FE1200A21259 /* concatstring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = concatstring.js; sourceTree = ""; }; - C1EA5D7A1680FE1200A21259 /* const.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = const.js; sourceTree = ""; }; - C1EA5D7B1680FE1200A21259 /* empty-blocks.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "empty-blocks.js"; sourceTree = ""; }; - C1EA5D7C1680FE1200A21259 /* forstatement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = forstatement.js; sourceTree = ""; }; - C1EA5D7D1680FE1200A21259 /* if.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = if.js; sourceTree = ""; }; - C1EA5D7E1680FE1200A21259 /* ifreturn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn.js; sourceTree = ""; }; - C1EA5D7F1680FE1200A21259 /* ifreturn2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn2.js; sourceTree = ""; }; - C1EA5D801680FE1200A21259 /* issue10.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue10.js; sourceTree = ""; }; - C1EA5D811680FE1200A21259 /* issue11.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue11.js; sourceTree = ""; }; - C1EA5D821680FE1200A21259 /* issue13.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue13.js; sourceTree = ""; }; - C1EA5D831680FE1200A21259 /* issue14.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue14.js; sourceTree = ""; }; - C1EA5D841680FE1200A21259 /* issue16.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue16.js; sourceTree = ""; }; - C1EA5D851680FE1200A21259 /* issue17.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue17.js; sourceTree = ""; }; - C1EA5D861680FE1200A21259 /* issue20.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue20.js; sourceTree = ""; }; - C1EA5D871680FE1200A21259 /* issue21.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue21.js; sourceTree = ""; }; - C1EA5D881680FE1200A21259 /* issue25.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue25.js; sourceTree = ""; }; - C1EA5D891680FE1200A21259 /* issue27.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue27.js; sourceTree = ""; }; - C1EA5D8A1680FE1200A21259 /* issue278.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue278.js; sourceTree = ""; }; - C1EA5D8B1680FE1200A21259 /* issue28.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue28.js; sourceTree = ""; }; - C1EA5D8C1680FE1200A21259 /* issue29.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue29.js; sourceTree = ""; }; - C1EA5D8D1680FE1200A21259 /* issue30.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue30.js; sourceTree = ""; }; - C1EA5D8E1680FE1200A21259 /* issue34.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue34.js; sourceTree = ""; }; - C1EA5D8F1680FE1200A21259 /* issue4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue4.js; sourceTree = ""; }; - C1EA5D901680FE1200A21259 /* issue48.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue48.js; sourceTree = ""; }; - C1EA5D911680FE1200A21259 /* issue50.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue50.js; sourceTree = ""; }; - C1EA5D921680FE1200A21259 /* issue53.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue53.js; sourceTree = ""; }; - C1EA5D931680FE1200A21259 /* issue54.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue54.1.js; sourceTree = ""; }; - C1EA5D941680FE1200A21259 /* issue68.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue68.js; sourceTree = ""; }; - C1EA5D951680FE1200A21259 /* issue69.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue69.js; sourceTree = ""; }; - C1EA5D961680FE1200A21259 /* issue9.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue9.js; sourceTree = ""; }; - C1EA5D971680FE1200A21259 /* mangle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mangle.js; sourceTree = ""; }; - C1EA5D981680FE1200A21259 /* null_string.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = null_string.js; sourceTree = ""; }; - C1EA5D991680FE1200A21259 /* strict-equals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "strict-equals.js"; sourceTree = ""; }; - C1EA5D9A1680FE1200A21259 /* var.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = var.js; sourceTree = ""; }; - C1EA5D9B1680FE1200A21259 /* whitespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = whitespace.js; sourceTree = ""; }; - C1EA5D9C1680FE1200A21259 /* with.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = with.js; sourceTree = ""; }; - C1EA5D9D1680FE1200A21259 /* scripts.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = scripts.js; sourceTree = ""; }; - C1EA5D9F1680FE1200A21259 /* 269.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = 269.js; sourceTree = ""; }; - C1EA5DA01680FE1200A21259 /* app.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = app.js; sourceTree = ""; }; - C1EA5DA11680FE1200A21259 /* embed-tokens.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "embed-tokens.js"; sourceTree = ""; }; - C1EA5DA21680FE1200A21259 /* goto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = goto.js; sourceTree = ""; }; - C1EA5DA31680FE1200A21259 /* goto2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = goto2.js; sourceTree = ""; }; - C1EA5DA41680FE1200A21259 /* hoist.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hoist.js; sourceTree = ""; }; - C1EA5DA51680FE1200A21259 /* instrument.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = instrument.js; sourceTree = ""; }; - C1EA5DA61680FE1200A21259 /* instrument2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = instrument2.js; sourceTree = ""; }; - C1EA5DA71680FE1200A21259 /* liftvars.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = liftvars.js; sourceTree = ""; }; - C1EA5DA81680FE1200A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA5DA91680FE1200A21259 /* uglify-hangs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "uglify-hangs.js"; sourceTree = ""; }; - C1EA5DAA1680FE1200A21259 /* uglify-hangs2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "uglify-hangs2.js"; sourceTree = ""; }; - C1EA5DAB1680FE1200A21259 /* uglify-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "uglify-js.js"; sourceTree = ""; }; - C1EA5DAC1680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5DAD1680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA5DAF1680FE1200A21259 /* buster-syntax-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-syntax-test.js"; sourceTree = ""; }; - C1EA5DB01680FE1200A21259 /* syntax-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "syntax-test.js"; sourceTree = ""; }; - C1EA5DB21680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA5DB31680FE1200A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA5DB41680FE1200A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA5DB51680FE1200A21259 /* jsTestDriver.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsTestDriver.conf; sourceTree = ""; }; - C1EA5DB81680FE1200A21259 /* auto-run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "auto-run.js"; sourceTree = ""; }; - C1EA5DB91680FE1200A21259 /* browser-env.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "browser-env.js"; sourceTree = ""; }; - C1EA5DBB1680FE1200A21259 /* console.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = console.js; sourceTree = ""; }; - C1EA5DBC1680FE1200A21259 /* dots.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = dots.js; sourceTree = ""; }; - C1EA5DBD1680FE1200A21259 /* html.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = html.js; sourceTree = ""; }; - C1EA5DBE1680FE1200A21259 /* json-proxy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "json-proxy.js"; sourceTree = ""; }; - C1EA5DBF1680FE1200A21259 /* quiet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = quiet.js; sourceTree = ""; }; - C1EA5DC01680FE1200A21259 /* specification.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = specification.js; sourceTree = ""; }; - C1EA5DC11680FE1200A21259 /* tap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tap.js; sourceTree = ""; }; - C1EA5DC21680FE1200A21259 /* teamcity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = teamcity.js; sourceTree = ""; }; - C1EA5DC31680FE1200A21259 /* xml.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = xml.js; sourceTree = ""; }; - C1EA5DC41680FE1200A21259 /* reporters.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = reporters.js; sourceTree = ""; }; - C1EA5DC51680FE1200A21259 /* spec.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = spec.js; sourceTree = ""; }; - C1EA5DC61680FE1200A21259 /* stack-filter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "stack-filter.js"; sourceTree = ""; }; - C1EA5DC71680FE1200A21259 /* test-case.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-case.js"; sourceTree = ""; }; - C1EA5DC81680FE1200A21259 /* test-context.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-context.js"; sourceTree = ""; }; - C1EA5DC91680FE1200A21259 /* test-runner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-runner.js"; sourceTree = ""; }; - C1EA5DCA1680FE1200A21259 /* buster-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-test.js"; sourceTree = ""; }; - C1EA5DCB1680FE1200A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA5DCE1680FE1200A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA5DCF1680FE1200A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA5DD01680FE1200A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA5DD11680FE1200A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA5DD31680FE1200A21259 /* buster-terminal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-terminal.js"; sourceTree = ""; }; - C1EA5DD41680FE1200A21259 /* matrix.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = matrix.js; sourceTree = ""; }; - C1EA5DD51680FE1200A21259 /* relative-grid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "relative-grid.js"; sourceTree = ""; }; - C1EA5DD61680FE1200A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5DD71680FE1200A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA5DD91680FE1200A21259 /* buster-terminal-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-terminal-test.js"; sourceTree = ""; }; - C1EA5DDA1680FE1200A21259 /* helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = helper.js; sourceTree = ""; }; - C1EA5DDB1680FE1200A21259 /* matrix-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "matrix-test.js"; sourceTree = ""; }; - C1EA5DDC1680FE1200A21259 /* relative-grid-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "relative-grid-test.js"; sourceTree = ""; }; - C1EA5DE11680FE1200A21259 /* documentfeatures.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = documentfeatures.js; sourceTree = ""; }; - C1EA5DE21680FE1200A21259 /* domtohtml.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = domtohtml.js; sourceTree = ""; }; - C1EA5DE31680FE1200A21259 /* htmlencoding.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmlencoding.js; sourceTree = ""; }; - C1EA5DE41680FE1200A21259 /* htmltodom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmltodom.js; sourceTree = ""; }; - C1EA5DE51680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5DE71680FE1200A21259 /* core.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = core.js; sourceTree = ""; }; - C1EA5DE91680FE1200A21259 /* core.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = core.js; sourceTree = ""; }; - C1EA5DEA1680FE1200A21259 /* events.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = events.js; sourceTree = ""; }; - C1EA5DEB1680FE1200A21259 /* html.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = html.js; sourceTree = ""; }; - C1EA5DEC1680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5DEE1680FE1200A21259 /* javascript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = javascript.js; sourceTree = ""; }; - C1EA5DEF1680FE1200A21259 /* style.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = style.js; sourceTree = ""; }; - C1EA5DF11680FE1200A21259 /* core.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = core.js; sourceTree = ""; }; - C1EA5DF21680FE1200A21259 /* events.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = events.js; sourceTree = ""; }; - C1EA5DF31680FE1200A21259 /* html.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = html.js; sourceTree = ""; }; - C1EA5DF41680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5DF51680FE1200A21259 /* ls.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ls.js; sourceTree = ""; }; - C1EA5DF61680FE1200A21259 /* xpath.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = xpath.js; sourceTree = ""; }; - C1EA5DF81680FE1200A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5DF91680FE1200A21259 /* sizzle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sizzle.js; sourceTree = ""; }; - C1EA5DFA1680FE1200A21259 /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; - C1EA5DFB1680FE1200A21259 /* jsdom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jsdom.js; sourceTree = ""; }; - C1EA5DFC1680FE1200A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA5DFF1680FE1200A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5E001680FE1200A21259 /* binding.gyp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = binding.gyp; sourceTree = ""; }; - C1EA5E021680FE1200A21259 /* binding.Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = binding.Makefile; sourceTree = ""; }; - C1EA5E031680FE1200A21259 /* config.gypi */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = config.gypi; sourceTree = ""; }; - C1EA5E041680FE1200A21259 /* contextify.target.mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = contextify.target.mk; sourceTree = ""; }; - C1EA5E051680FE1200A21259 /* gyp-mac-tool */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "gyp-mac-tool"; sourceTree = ""; }; - C1EA5E061680FE1200A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA5E0A1680FE1200A21259 /* contextify.node.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = contextify.node.d; sourceTree = ""; }; - C1EA5E0E1680FE1300A21259 /* contextify.o.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = contextify.o.d; sourceTree = ""; }; - C1EA5E0F1680FE1300A21259 /* contextify.node */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = contextify.node; sourceTree = ""; }; - C1EA5E101680FE1300A21259 /* linker.lock */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = linker.lock; sourceTree = ""; }; - C1EA5E141680FE1300A21259 /* contextify.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = contextify.o; sourceTree = ""; }; - C1EA5E151680FE1300A21259 /* changelog */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = changelog; sourceTree = ""; }; - C1EA5E171680FE1300A21259 /* contextify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = contextify.js; sourceTree = ""; }; - C1EA5E181680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA5E1B1680FE1300A21259 /* bindings.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bindings.js; sourceTree = ""; }; - C1EA5E1C1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5E1D1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5E1E1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5E1F1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5E211680FE1300A21259 /* contextify.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = contextify.cc; sourceTree = ""; }; - C1EA5E231680FE1300A21259 /* contextify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = contextify.js; sourceTree = ""; }; - C1EA5E241680FE1300A21259 /* wscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wscript; sourceTree = ""; }; - C1EA5E261680FE1300A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA5E271680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5E291680FE1300A21259 /* clone.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clone.js; sourceTree = ""; }; - C1EA5E2A1680FE1300A21259 /* CSSFontFaceRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSFontFaceRule.js; sourceTree = ""; }; - C1EA5E2B1680FE1300A21259 /* CSSImportRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSImportRule.js; sourceTree = ""; }; - C1EA5E2C1680FE1300A21259 /* CSSKeyframeRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSKeyframeRule.js; sourceTree = ""; }; - C1EA5E2D1680FE1300A21259 /* CSSKeyframesRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSKeyframesRule.js; sourceTree = ""; }; - C1EA5E2E1680FE1300A21259 /* CSSMediaRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSMediaRule.js; sourceTree = ""; }; - C1EA5E2F1680FE1300A21259 /* CSSRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSRule.js; sourceTree = ""; }; - C1EA5E301680FE1300A21259 /* CSSStyleDeclaration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSStyleDeclaration.js; sourceTree = ""; }; - C1EA5E311680FE1300A21259 /* CSSStyleRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSStyleRule.js; sourceTree = ""; }; - C1EA5E321680FE1300A21259 /* CSSStyleSheet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSStyleSheet.js; sourceTree = ""; }; - C1EA5E331680FE1300A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA5E341680FE1300A21259 /* MediaList.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = MediaList.js; sourceTree = ""; }; - C1EA5E351680FE1300A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA5E361680FE1300A21259 /* StyleSheet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = StyleSheet.js; sourceTree = ""; }; - C1EA5E371680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5E381680FE1300A21259 /* README.mdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.mdown; sourceTree = ""; }; - C1EA5E3A1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA5E3C1680FE1300A21259 /* CSSStyleDeclaration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CSSStyleDeclaration.js; sourceTree = ""; }; - C1EA5E3E1680FE1300A21259 /* alignmentBaseline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = alignmentBaseline.js; sourceTree = ""; }; - C1EA5E3F1680FE1300A21259 /* azimuth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = azimuth.js; sourceTree = ""; }; - C1EA5E401680FE1300A21259 /* background.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = background.js; sourceTree = ""; }; - C1EA5E411680FE1300A21259 /* backgroundAttachment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundAttachment.js; sourceTree = ""; }; - C1EA5E421680FE1300A21259 /* backgroundClip.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundClip.js; sourceTree = ""; }; - C1EA5E431680FE1300A21259 /* backgroundColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundColor.js; sourceTree = ""; }; - C1EA5E441680FE1300A21259 /* backgroundImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundImage.js; sourceTree = ""; }; - C1EA5E451680FE1300A21259 /* backgroundOrigin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundOrigin.js; sourceTree = ""; }; - C1EA5E461680FE1300A21259 /* backgroundPosition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundPosition.js; sourceTree = ""; }; - C1EA5E471680FE1300A21259 /* backgroundPositionX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundPositionX.js; sourceTree = ""; }; - C1EA5E481680FE1300A21259 /* backgroundPositionY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundPositionY.js; sourceTree = ""; }; - C1EA5E491680FE1300A21259 /* backgroundRepeat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundRepeat.js; sourceTree = ""; }; - C1EA5E4A1680FE1300A21259 /* backgroundRepeatX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundRepeatX.js; sourceTree = ""; }; - C1EA5E4B1680FE1300A21259 /* backgroundRepeatY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundRepeatY.js; sourceTree = ""; }; - C1EA5E4C1680FE1300A21259 /* backgroundSize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backgroundSize.js; sourceTree = ""; }; - C1EA5E4D1680FE1300A21259 /* baselineShift.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = baselineShift.js; sourceTree = ""; }; - C1EA5E4E1680FE1300A21259 /* border.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = border.js; sourceTree = ""; }; - C1EA5E4F1680FE1300A21259 /* borderBottom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottom.js; sourceTree = ""; }; - C1EA5E501680FE1300A21259 /* borderBottomColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottomColor.js; sourceTree = ""; }; - C1EA5E511680FE1300A21259 /* borderBottomLeftRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottomLeftRadius.js; sourceTree = ""; }; - C1EA5E521680FE1300A21259 /* borderBottomRightRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottomRightRadius.js; sourceTree = ""; }; - C1EA5E531680FE1300A21259 /* borderBottomStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottomStyle.js; sourceTree = ""; }; - C1EA5E541680FE1300A21259 /* borderBottomWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderBottomWidth.js; sourceTree = ""; }; - C1EA5E551680FE1300A21259 /* borderCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderCollapse.js; sourceTree = ""; }; - C1EA5E561680FE1300A21259 /* borderColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderColor.js; sourceTree = ""; }; - C1EA5E571680FE1300A21259 /* borderImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImage.js; sourceTree = ""; }; - C1EA5E581680FE1300A21259 /* borderImageOutset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImageOutset.js; sourceTree = ""; }; - C1EA5E591680FE1300A21259 /* borderImageRepeat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImageRepeat.js; sourceTree = ""; }; - C1EA5E5A1680FE1300A21259 /* borderImageSlice.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImageSlice.js; sourceTree = ""; }; - C1EA5E5B1680FE1300A21259 /* borderImageSource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImageSource.js; sourceTree = ""; }; - C1EA5E5C1680FE1300A21259 /* borderImageWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderImageWidth.js; sourceTree = ""; }; - C1EA5E5D1680FE1300A21259 /* borderLeft.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderLeft.js; sourceTree = ""; }; - C1EA5E5E1680FE1300A21259 /* borderLeftColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderLeftColor.js; sourceTree = ""; }; - C1EA5E5F1680FE1300A21259 /* borderLeftStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderLeftStyle.js; sourceTree = ""; }; - C1EA5E601680FE1300A21259 /* borderLeftWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderLeftWidth.js; sourceTree = ""; }; - C1EA5E611680FE1300A21259 /* borderRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderRadius.js; sourceTree = ""; }; - C1EA5E621680FE1300A21259 /* borderRight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderRight.js; sourceTree = ""; }; - C1EA5E631680FE1300A21259 /* borderRightColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderRightColor.js; sourceTree = ""; }; - C1EA5E641680FE1300A21259 /* borderRightStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderRightStyle.js; sourceTree = ""; }; - C1EA5E651680FE1300A21259 /* borderRightWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderRightWidth.js; sourceTree = ""; }; - C1EA5E661680FE1300A21259 /* borderSpacing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderSpacing.js; sourceTree = ""; }; - C1EA5E671680FE1300A21259 /* borderStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderStyle.js; sourceTree = ""; }; - C1EA5E681680FE1300A21259 /* borderTop.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTop.js; sourceTree = ""; }; - C1EA5E691680FE1300A21259 /* borderTopColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTopColor.js; sourceTree = ""; }; - C1EA5E6A1680FE1300A21259 /* borderTopLeftRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTopLeftRadius.js; sourceTree = ""; }; - C1EA5E6B1680FE1300A21259 /* borderTopRightRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTopRightRadius.js; sourceTree = ""; }; - C1EA5E6C1680FE1300A21259 /* borderTopStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTopStyle.js; sourceTree = ""; }; - C1EA5E6D1680FE1300A21259 /* borderTopWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderTopWidth.js; sourceTree = ""; }; - C1EA5E6E1680FE1300A21259 /* borderWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borderWidth.js; sourceTree = ""; }; - C1EA5E6F1680FE1300A21259 /* bottom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bottom.js; sourceTree = ""; }; - C1EA5E701680FE1300A21259 /* boxShadow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = boxShadow.js; sourceTree = ""; }; - C1EA5E711680FE1300A21259 /* boxSizing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = boxSizing.js; sourceTree = ""; }; - C1EA5E721680FE1300A21259 /* captionSide.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = captionSide.js; sourceTree = ""; }; - C1EA5E731680FE1300A21259 /* clear.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clear.js; sourceTree = ""; }; - C1EA5E741680FE1300A21259 /* clip.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clip.js; sourceTree = ""; }; - C1EA5E751680FE1300A21259 /* clipPath.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clipPath.js; sourceTree = ""; }; - C1EA5E761680FE1300A21259 /* clipRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clipRule.js; sourceTree = ""; }; - C1EA5E771680FE1300A21259 /* color.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = color.js; sourceTree = ""; }; - C1EA5E781680FE1300A21259 /* colorInterpolation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = colorInterpolation.js; sourceTree = ""; }; - C1EA5E791680FE1300A21259 /* colorInterpolationFilters.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = colorInterpolationFilters.js; sourceTree = ""; }; - C1EA5E7A1680FE1300A21259 /* colorProfile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = colorProfile.js; sourceTree = ""; }; - C1EA5E7B1680FE1300A21259 /* colorRendering.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = colorRendering.js; sourceTree = ""; }; - C1EA5E7C1680FE1300A21259 /* content.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = content.js; sourceTree = ""; }; - C1EA5E7D1680FE1300A21259 /* counterIncrement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = counterIncrement.js; sourceTree = ""; }; - C1EA5E7E1680FE1300A21259 /* counterReset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = counterReset.js; sourceTree = ""; }; - C1EA5E7F1680FE1300A21259 /* cssFloat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cssFloat.js; sourceTree = ""; }; - C1EA5E801680FE1300A21259 /* cue.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cue.js; sourceTree = ""; }; - C1EA5E811680FE1300A21259 /* cueAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cueAfter.js; sourceTree = ""; }; - C1EA5E821680FE1300A21259 /* cueBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cueBefore.js; sourceTree = ""; }; - C1EA5E831680FE1300A21259 /* cursor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cursor.js; sourceTree = ""; }; - C1EA5E841680FE1300A21259 /* direction.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = direction.js; sourceTree = ""; }; - C1EA5E851680FE1300A21259 /* display.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = display.js; sourceTree = ""; }; - C1EA5E861680FE1300A21259 /* dominantBaseline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = dominantBaseline.js; sourceTree = ""; }; - C1EA5E871680FE1300A21259 /* elevation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = elevation.js; sourceTree = ""; }; - C1EA5E881680FE1300A21259 /* emptyCells.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = emptyCells.js; sourceTree = ""; }; - C1EA5E891680FE1300A21259 /* enableBackground.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = enableBackground.js; sourceTree = ""; }; - C1EA5E8A1680FE1300A21259 /* fill.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fill.js; sourceTree = ""; }; - C1EA5E8B1680FE1300A21259 /* fillOpacity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fillOpacity.js; sourceTree = ""; }; - C1EA5E8C1680FE1300A21259 /* fillRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fillRule.js; sourceTree = ""; }; - C1EA5E8D1680FE1300A21259 /* filter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = filter.js; sourceTree = ""; }; - C1EA5E8E1680FE1300A21259 /* floodColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = floodColor.js; sourceTree = ""; }; - C1EA5E8F1680FE1300A21259 /* floodOpacity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = floodOpacity.js; sourceTree = ""; }; - C1EA5E901680FE1300A21259 /* font.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = font.js; sourceTree = ""; }; - C1EA5E911680FE1300A21259 /* fontFamily.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontFamily.js; sourceTree = ""; }; - C1EA5E921680FE1300A21259 /* fontSize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontSize.js; sourceTree = ""; }; - C1EA5E931680FE1300A21259 /* fontSizeAdjust.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontSizeAdjust.js; sourceTree = ""; }; - C1EA5E941680FE1300A21259 /* fontStretch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontStretch.js; sourceTree = ""; }; - C1EA5E951680FE1300A21259 /* fontStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontStyle.js; sourceTree = ""; }; - C1EA5E961680FE1300A21259 /* fontVariant.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontVariant.js; sourceTree = ""; }; - C1EA5E971680FE1300A21259 /* fontWeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fontWeight.js; sourceTree = ""; }; - C1EA5E981680FE1300A21259 /* glyphOrientationHorizontal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glyphOrientationHorizontal.js; sourceTree = ""; }; - C1EA5E991680FE1300A21259 /* glyphOrientationVertical.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glyphOrientationVertical.js; sourceTree = ""; }; - C1EA5E9A1680FE1300A21259 /* height.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = height.js; sourceTree = ""; }; - C1EA5E9B1680FE1300A21259 /* imageRendering.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = imageRendering.js; sourceTree = ""; }; - C1EA5E9C1680FE1300A21259 /* kerning.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = kerning.js; sourceTree = ""; }; - C1EA5E9D1680FE1300A21259 /* left.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = left.js; sourceTree = ""; }; - C1EA5E9E1680FE1300A21259 /* letterSpacing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = letterSpacing.js; sourceTree = ""; }; - C1EA5E9F1680FE1300A21259 /* lightingColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lightingColor.js; sourceTree = ""; }; - C1EA5EA01680FE1300A21259 /* lineHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lineHeight.js; sourceTree = ""; }; - C1EA5EA11680FE1300A21259 /* listStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = listStyle.js; sourceTree = ""; }; - C1EA5EA21680FE1300A21259 /* listStyleImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = listStyleImage.js; sourceTree = ""; }; - C1EA5EA31680FE1300A21259 /* listStylePosition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = listStylePosition.js; sourceTree = ""; }; - C1EA5EA41680FE1300A21259 /* listStyleType.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = listStyleType.js; sourceTree = ""; }; - C1EA5EA51680FE1300A21259 /* margin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = margin.js; sourceTree = ""; }; - C1EA5EA61680FE1300A21259 /* marginBottom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marginBottom.js; sourceTree = ""; }; - C1EA5EA71680FE1300A21259 /* marginLeft.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marginLeft.js; sourceTree = ""; }; - C1EA5EA81680FE1300A21259 /* marginRight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marginRight.js; sourceTree = ""; }; - C1EA5EA91680FE1300A21259 /* marginTop.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marginTop.js; sourceTree = ""; }; - C1EA5EAA1680FE1300A21259 /* marker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marker.js; sourceTree = ""; }; - C1EA5EAB1680FE1300A21259 /* markerEnd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = markerEnd.js; sourceTree = ""; }; - C1EA5EAC1680FE1300A21259 /* markerMid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = markerMid.js; sourceTree = ""; }; - C1EA5EAD1680FE1300A21259 /* markerOffset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = markerOffset.js; sourceTree = ""; }; - C1EA5EAE1680FE1300A21259 /* markerStart.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = markerStart.js; sourceTree = ""; }; - C1EA5EAF1680FE1300A21259 /* marks.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = marks.js; sourceTree = ""; }; - C1EA5EB01680FE1300A21259 /* mask.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mask.js; sourceTree = ""; }; - C1EA5EB11680FE1300A21259 /* maxHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = maxHeight.js; sourceTree = ""; }; - C1EA5EB21680FE1300A21259 /* maxWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = maxWidth.js; sourceTree = ""; }; - C1EA5EB31680FE1300A21259 /* minHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minHeight.js; sourceTree = ""; }; - C1EA5EB41680FE1300A21259 /* minWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minWidth.js; sourceTree = ""; }; - C1EA5EB51680FE1300A21259 /* opacity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = opacity.js; sourceTree = ""; }; - C1EA5EB61680FE1300A21259 /* orphans.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = orphans.js; sourceTree = ""; }; - C1EA5EB71680FE1300A21259 /* outline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outline.js; sourceTree = ""; }; - C1EA5EB81680FE1300A21259 /* outlineColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outlineColor.js; sourceTree = ""; }; - C1EA5EB91680FE1300A21259 /* outlineOffset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outlineOffset.js; sourceTree = ""; }; - C1EA5EBA1680FE1300A21259 /* outlineStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outlineStyle.js; sourceTree = ""; }; - C1EA5EBB1680FE1300A21259 /* outlineWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outlineWidth.js; sourceTree = ""; }; - C1EA5EBC1680FE1300A21259 /* overflow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = overflow.js; sourceTree = ""; }; - C1EA5EBD1680FE1300A21259 /* overflowX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = overflowX.js; sourceTree = ""; }; - C1EA5EBE1680FE1300A21259 /* overflowY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = overflowY.js; sourceTree = ""; }; - C1EA5EBF1680FE1300A21259 /* padding.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = padding.js; sourceTree = ""; }; - C1EA5EC01680FE1300A21259 /* paddingBottom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = paddingBottom.js; sourceTree = ""; }; - C1EA5EC11680FE1300A21259 /* paddingLeft.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = paddingLeft.js; sourceTree = ""; }; - C1EA5EC21680FE1300A21259 /* paddingRight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = paddingRight.js; sourceTree = ""; }; - C1EA5EC31680FE1300A21259 /* paddingTop.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = paddingTop.js; sourceTree = ""; }; - C1EA5EC41680FE1300A21259 /* page.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = page.js; sourceTree = ""; }; - C1EA5EC51680FE1300A21259 /* pageBreakAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pageBreakAfter.js; sourceTree = ""; }; - C1EA5EC61680FE1300A21259 /* pageBreakBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pageBreakBefore.js; sourceTree = ""; }; - C1EA5EC71680FE1300A21259 /* pageBreakInside.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pageBreakInside.js; sourceTree = ""; }; - C1EA5EC81680FE1300A21259 /* pause.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pause.js; sourceTree = ""; }; - C1EA5EC91680FE1300A21259 /* pauseAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pauseAfter.js; sourceTree = ""; }; - C1EA5ECA1680FE1300A21259 /* pauseBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pauseBefore.js; sourceTree = ""; }; - C1EA5ECB1680FE1300A21259 /* pitch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pitch.js; sourceTree = ""; }; - C1EA5ECC1680FE1300A21259 /* pitchRange.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pitchRange.js; sourceTree = ""; }; - C1EA5ECD1680FE1300A21259 /* playDuring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = playDuring.js; sourceTree = ""; }; - C1EA5ECE1680FE1300A21259 /* pointerEvents.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pointerEvents.js; sourceTree = ""; }; - C1EA5ECF1680FE1300A21259 /* position.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = position.js; sourceTree = ""; }; - C1EA5ED01680FE1300A21259 /* quotes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = quotes.js; sourceTree = ""; }; - C1EA5ED11680FE1300A21259 /* resize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resize.js; sourceTree = ""; }; - C1EA5ED21680FE1300A21259 /* richness.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = richness.js; sourceTree = ""; }; - C1EA5ED31680FE1300A21259 /* right.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = right.js; sourceTree = ""; }; - C1EA5ED41680FE1300A21259 /* shapeRendering.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shapeRendering.js; sourceTree = ""; }; - C1EA5ED51680FE1300A21259 /* size.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = size.js; sourceTree = ""; }; - C1EA5ED61680FE1300A21259 /* speak.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speak.js; sourceTree = ""; }; - C1EA5ED71680FE1300A21259 /* speakHeader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speakHeader.js; sourceTree = ""; }; - C1EA5ED81680FE1300A21259 /* speakNumeral.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speakNumeral.js; sourceTree = ""; }; - C1EA5ED91680FE1300A21259 /* speakPunctuation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speakPunctuation.js; sourceTree = ""; }; - C1EA5EDA1680FE1300A21259 /* speechRate.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speechRate.js; sourceTree = ""; }; - C1EA5EDB1680FE1300A21259 /* src.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = src.js; sourceTree = ""; }; - C1EA5EDC1680FE1300A21259 /* stopColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stopColor.js; sourceTree = ""; }; - C1EA5EDD1680FE1300A21259 /* stopOpacity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stopOpacity.js; sourceTree = ""; }; - C1EA5EDE1680FE1300A21259 /* stress.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stress.js; sourceTree = ""; }; - C1EA5EDF1680FE1300A21259 /* stroke.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stroke.js; sourceTree = ""; }; - C1EA5EE01680FE1300A21259 /* strokeDasharray.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeDasharray.js; sourceTree = ""; }; - C1EA5EE11680FE1300A21259 /* strokeDashoffset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeDashoffset.js; sourceTree = ""; }; - C1EA5EE21680FE1300A21259 /* strokeLinecap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeLinecap.js; sourceTree = ""; }; - C1EA5EE31680FE1300A21259 /* strokeLinejoin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeLinejoin.js; sourceTree = ""; }; - C1EA5EE41680FE1300A21259 /* strokeMiterlimit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeMiterlimit.js; sourceTree = ""; }; - C1EA5EE51680FE1300A21259 /* strokeOpacity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeOpacity.js; sourceTree = ""; }; - C1EA5EE61680FE1300A21259 /* strokeWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = strokeWidth.js; sourceTree = ""; }; - C1EA5EE71680FE1300A21259 /* tableLayout.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tableLayout.js; sourceTree = ""; }; - C1EA5EE81680FE1300A21259 /* textAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textAlign.js; sourceTree = ""; }; - C1EA5EE91680FE1300A21259 /* textAnchor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textAnchor.js; sourceTree = ""; }; - C1EA5EEA1680FE1300A21259 /* textDecoration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textDecoration.js; sourceTree = ""; }; - C1EA5EEB1680FE1300A21259 /* textIndent.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textIndent.js; sourceTree = ""; }; - C1EA5EEC1680FE1300A21259 /* textLineThrough.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textLineThrough.js; sourceTree = ""; }; - C1EA5EED1680FE1300A21259 /* textLineThroughColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textLineThroughColor.js; sourceTree = ""; }; - C1EA5EEE1680FE1300A21259 /* textLineThroughMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textLineThroughMode.js; sourceTree = ""; }; - C1EA5EEF1680FE1300A21259 /* textLineThroughStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textLineThroughStyle.js; sourceTree = ""; }; - C1EA5EF01680FE1300A21259 /* textLineThroughWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textLineThroughWidth.js; sourceTree = ""; }; - C1EA5EF11680FE1300A21259 /* textOverflow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverflow.js; sourceTree = ""; }; - C1EA5EF21680FE1300A21259 /* textOverline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverline.js; sourceTree = ""; }; - C1EA5EF31680FE1300A21259 /* textOverlineColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverlineColor.js; sourceTree = ""; }; - C1EA5EF41680FE1300A21259 /* textOverlineMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverlineMode.js; sourceTree = ""; }; - C1EA5EF51680FE1300A21259 /* textOverlineStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverlineStyle.js; sourceTree = ""; }; - C1EA5EF61680FE1300A21259 /* textOverlineWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textOverlineWidth.js; sourceTree = ""; }; - C1EA5EF71680FE1300A21259 /* textRendering.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textRendering.js; sourceTree = ""; }; - C1EA5EF81680FE1300A21259 /* textShadow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textShadow.js; sourceTree = ""; }; - C1EA5EF91680FE1300A21259 /* textTransform.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textTransform.js; sourceTree = ""; }; - C1EA5EFA1680FE1300A21259 /* textUnderline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textUnderline.js; sourceTree = ""; }; - C1EA5EFB1680FE1300A21259 /* textUnderlineColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textUnderlineColor.js; sourceTree = ""; }; - C1EA5EFC1680FE1300A21259 /* textUnderlineMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textUnderlineMode.js; sourceTree = ""; }; - C1EA5EFD1680FE1300A21259 /* textUnderlineStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textUnderlineStyle.js; sourceTree = ""; }; - C1EA5EFE1680FE1300A21259 /* textUnderlineWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = textUnderlineWidth.js; sourceTree = ""; }; - C1EA5EFF1680FE1300A21259 /* top.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = top.js; sourceTree = ""; }; - C1EA5F001680FE1300A21259 /* unicodeBidi.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = unicodeBidi.js; sourceTree = ""; }; - C1EA5F011680FE1300A21259 /* unicodeRange.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = unicodeRange.js; sourceTree = ""; }; - C1EA5F021680FE1300A21259 /* vectorEffect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = vectorEffect.js; sourceTree = ""; }; - C1EA5F031680FE1300A21259 /* verticalAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = verticalAlign.js; sourceTree = ""; }; - C1EA5F041680FE1300A21259 /* visibility.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = visibility.js; sourceTree = ""; }; - C1EA5F051680FE1300A21259 /* voiceFamily.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = voiceFamily.js; sourceTree = ""; }; - C1EA5F061680FE1300A21259 /* volume.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = volume.js; sourceTree = ""; }; - C1EA5F071680FE1300A21259 /* webkitAnimation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimation.js; sourceTree = ""; }; - C1EA5F081680FE1300A21259 /* webkitAnimationDelay.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationDelay.js; sourceTree = ""; }; - C1EA5F091680FE1300A21259 /* webkitAnimationDirection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationDirection.js; sourceTree = ""; }; - C1EA5F0A1680FE1300A21259 /* webkitAnimationDuration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationDuration.js; sourceTree = ""; }; - C1EA5F0B1680FE1300A21259 /* webkitAnimationFillMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationFillMode.js; sourceTree = ""; }; - C1EA5F0C1680FE1300A21259 /* webkitAnimationIterationCount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationIterationCount.js; sourceTree = ""; }; - C1EA5F0D1680FE1300A21259 /* webkitAnimationName.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationName.js; sourceTree = ""; }; - C1EA5F0E1680FE1300A21259 /* webkitAnimationPlayState.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationPlayState.js; sourceTree = ""; }; - C1EA5F0F1680FE1300A21259 /* webkitAnimationTimingFunction.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAnimationTimingFunction.js; sourceTree = ""; }; - C1EA5F101680FE1300A21259 /* webkitAppearance.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAppearance.js; sourceTree = ""; }; - C1EA5F111680FE1300A21259 /* webkitAspectRatio.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitAspectRatio.js; sourceTree = ""; }; - C1EA5F121680FE1300A21259 /* webkitBackfaceVisibility.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBackfaceVisibility.js; sourceTree = ""; }; - C1EA5F131680FE1300A21259 /* webkitBackgroundClip.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBackgroundClip.js; sourceTree = ""; }; - C1EA5F141680FE1300A21259 /* webkitBackgroundComposite.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBackgroundComposite.js; sourceTree = ""; }; - C1EA5F151680FE1300A21259 /* webkitBackgroundOrigin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBackgroundOrigin.js; sourceTree = ""; }; - C1EA5F161680FE1300A21259 /* webkitBackgroundSize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBackgroundSize.js; sourceTree = ""; }; - C1EA5F171680FE1300A21259 /* webkitBorderAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderAfter.js; sourceTree = ""; }; - C1EA5F181680FE1300A21259 /* webkitBorderAfterColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderAfterColor.js; sourceTree = ""; }; - C1EA5F191680FE1300A21259 /* webkitBorderAfterStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderAfterStyle.js; sourceTree = ""; }; - C1EA5F1A1680FE1300A21259 /* webkitBorderAfterWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderAfterWidth.js; sourceTree = ""; }; - C1EA5F1B1680FE1300A21259 /* webkitBorderBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderBefore.js; sourceTree = ""; }; - C1EA5F1C1680FE1300A21259 /* webkitBorderBeforeColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderBeforeColor.js; sourceTree = ""; }; - C1EA5F1D1680FE1300A21259 /* webkitBorderBeforeStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderBeforeStyle.js; sourceTree = ""; }; - C1EA5F1E1680FE1300A21259 /* webkitBorderBeforeWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderBeforeWidth.js; sourceTree = ""; }; - C1EA5F1F1680FE1300A21259 /* webkitBorderEnd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderEnd.js; sourceTree = ""; }; - C1EA5F201680FE1300A21259 /* webkitBorderEndColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderEndColor.js; sourceTree = ""; }; - C1EA5F211680FE1300A21259 /* webkitBorderEndStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderEndStyle.js; sourceTree = ""; }; - C1EA5F221680FE1300A21259 /* webkitBorderEndWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderEndWidth.js; sourceTree = ""; }; - C1EA5F231680FE1300A21259 /* webkitBorderFit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderFit.js; sourceTree = ""; }; - C1EA5F241680FE1300A21259 /* webkitBorderHorizontalSpacing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderHorizontalSpacing.js; sourceTree = ""; }; - C1EA5F251680FE1300A21259 /* webkitBorderImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderImage.js; sourceTree = ""; }; - C1EA5F261680FE1300A21259 /* webkitBorderRadius.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderRadius.js; sourceTree = ""; }; - C1EA5F271680FE1300A21259 /* webkitBorderStart.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderStart.js; sourceTree = ""; }; - C1EA5F281680FE1300A21259 /* webkitBorderStartColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderStartColor.js; sourceTree = ""; }; - C1EA5F291680FE1300A21259 /* webkitBorderStartStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderStartStyle.js; sourceTree = ""; }; - C1EA5F2A1680FE1300A21259 /* webkitBorderStartWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderStartWidth.js; sourceTree = ""; }; - C1EA5F2B1680FE1300A21259 /* webkitBorderVerticalSpacing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBorderVerticalSpacing.js; sourceTree = ""; }; - C1EA5F2C1680FE1300A21259 /* webkitBoxAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxAlign.js; sourceTree = ""; }; - C1EA5F2D1680FE1300A21259 /* webkitBoxDirection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxDirection.js; sourceTree = ""; }; - C1EA5F2E1680FE1300A21259 /* webkitBoxFlex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxFlex.js; sourceTree = ""; }; - C1EA5F2F1680FE1300A21259 /* webkitBoxFlexGroup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxFlexGroup.js; sourceTree = ""; }; - C1EA5F301680FE1300A21259 /* webkitBoxLines.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxLines.js; sourceTree = ""; }; - C1EA5F311680FE1300A21259 /* webkitBoxOrdinalGroup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxOrdinalGroup.js; sourceTree = ""; }; - C1EA5F321680FE1300A21259 /* webkitBoxOrient.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxOrient.js; sourceTree = ""; }; - C1EA5F331680FE1300A21259 /* webkitBoxPack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxPack.js; sourceTree = ""; }; - C1EA5F341680FE1300A21259 /* webkitBoxReflect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxReflect.js; sourceTree = ""; }; - C1EA5F351680FE1300A21259 /* webkitBoxShadow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitBoxShadow.js; sourceTree = ""; }; - C1EA5F361680FE1300A21259 /* webkitColorCorrection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColorCorrection.js; sourceTree = ""; }; - C1EA5F371680FE1300A21259 /* webkitColumnAxis.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnAxis.js; sourceTree = ""; }; - C1EA5F381680FE1300A21259 /* webkitColumnBreakAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnBreakAfter.js; sourceTree = ""; }; - C1EA5F391680FE1300A21259 /* webkitColumnBreakBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnBreakBefore.js; sourceTree = ""; }; - C1EA5F3A1680FE1300A21259 /* webkitColumnBreakInside.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnBreakInside.js; sourceTree = ""; }; - C1EA5F3B1680FE1300A21259 /* webkitColumnCount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnCount.js; sourceTree = ""; }; - C1EA5F3C1680FE1300A21259 /* webkitColumnGap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnGap.js; sourceTree = ""; }; - C1EA5F3D1680FE1300A21259 /* webkitColumnRule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnRule.js; sourceTree = ""; }; - C1EA5F3E1680FE1300A21259 /* webkitColumnRuleColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnRuleColor.js; sourceTree = ""; }; - C1EA5F3F1680FE1300A21259 /* webkitColumnRuleStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnRuleStyle.js; sourceTree = ""; }; - C1EA5F401680FE1300A21259 /* webkitColumnRuleWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnRuleWidth.js; sourceTree = ""; }; - C1EA5F411680FE1300A21259 /* webkitColumns.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumns.js; sourceTree = ""; }; - C1EA5F421680FE1300A21259 /* webkitColumnSpan.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnSpan.js; sourceTree = ""; }; - C1EA5F431680FE1300A21259 /* webkitColumnWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitColumnWidth.js; sourceTree = ""; }; - C1EA5F441680FE1300A21259 /* webkitFilter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFilter.js; sourceTree = ""; }; - C1EA5F451680FE1300A21259 /* webkitFlexAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexAlign.js; sourceTree = ""; }; - C1EA5F461680FE1300A21259 /* webkitFlexDirection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexDirection.js; sourceTree = ""; }; - C1EA5F471680FE1300A21259 /* webkitFlexFlow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexFlow.js; sourceTree = ""; }; - C1EA5F481680FE1300A21259 /* webkitFlexItemAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexItemAlign.js; sourceTree = ""; }; - C1EA5F491680FE1300A21259 /* webkitFlexLinePack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexLinePack.js; sourceTree = ""; }; - C1EA5F4A1680FE1300A21259 /* webkitFlexOrder.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexOrder.js; sourceTree = ""; }; - C1EA5F4B1680FE1300A21259 /* webkitFlexPack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexPack.js; sourceTree = ""; }; - C1EA5F4C1680FE1300A21259 /* webkitFlexWrap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlexWrap.js; sourceTree = ""; }; - C1EA5F4D1680FE1300A21259 /* webkitFlowFrom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlowFrom.js; sourceTree = ""; }; - C1EA5F4E1680FE1300A21259 /* webkitFlowInto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFlowInto.js; sourceTree = ""; }; - C1EA5F4F1680FE1300A21259 /* webkitFontFeatureSettings.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFontFeatureSettings.js; sourceTree = ""; }; - C1EA5F501680FE1300A21259 /* webkitFontKerning.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFontKerning.js; sourceTree = ""; }; - C1EA5F511680FE1300A21259 /* webkitFontSizeDelta.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFontSizeDelta.js; sourceTree = ""; }; - C1EA5F521680FE1300A21259 /* webkitFontSmoothing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFontSmoothing.js; sourceTree = ""; }; - C1EA5F531680FE1300A21259 /* webkitFontVariantLigatures.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitFontVariantLigatures.js; sourceTree = ""; }; - C1EA5F541680FE1300A21259 /* webkitHighlight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHighlight.js; sourceTree = ""; }; - C1EA5F551680FE1300A21259 /* webkitHyphenateCharacter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHyphenateCharacter.js; sourceTree = ""; }; - C1EA5F561680FE1300A21259 /* webkitHyphenateLimitAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHyphenateLimitAfter.js; sourceTree = ""; }; - C1EA5F571680FE1300A21259 /* webkitHyphenateLimitBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHyphenateLimitBefore.js; sourceTree = ""; }; - C1EA5F581680FE1300A21259 /* webkitHyphenateLimitLines.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHyphenateLimitLines.js; sourceTree = ""; }; - C1EA5F591680FE1300A21259 /* webkitHyphens.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitHyphens.js; sourceTree = ""; }; - C1EA5F5A1680FE1300A21259 /* webkitLineAlign.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineAlign.js; sourceTree = ""; }; - C1EA5F5B1680FE1300A21259 /* webkitLineBoxContain.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineBoxContain.js; sourceTree = ""; }; - C1EA5F5C1680FE1300A21259 /* webkitLineBreak.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineBreak.js; sourceTree = ""; }; - C1EA5F5D1680FE1300A21259 /* webkitLineClamp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineClamp.js; sourceTree = ""; }; - C1EA5F5E1680FE1300A21259 /* webkitLineGrid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineGrid.js; sourceTree = ""; }; - C1EA5F5F1680FE1300A21259 /* webkitLineSnap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLineSnap.js; sourceTree = ""; }; - C1EA5F601680FE1300A21259 /* webkitLocale.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLocale.js; sourceTree = ""; }; - C1EA5F611680FE1300A21259 /* webkitLogicalHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLogicalHeight.js; sourceTree = ""; }; - C1EA5F621680FE1300A21259 /* webkitLogicalWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitLogicalWidth.js; sourceTree = ""; }; - C1EA5F631680FE1300A21259 /* webkitMarginAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginAfter.js; sourceTree = ""; }; - C1EA5F641680FE1300A21259 /* webkitMarginAfterCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginAfterCollapse.js; sourceTree = ""; }; - C1EA5F651680FE1300A21259 /* webkitMarginBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginBefore.js; sourceTree = ""; }; - C1EA5F661680FE1300A21259 /* webkitMarginBeforeCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginBeforeCollapse.js; sourceTree = ""; }; - C1EA5F671680FE1300A21259 /* webkitMarginBottomCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginBottomCollapse.js; sourceTree = ""; }; - C1EA5F681680FE1300A21259 /* webkitMarginCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginCollapse.js; sourceTree = ""; }; - C1EA5F691680FE1300A21259 /* webkitMarginEnd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginEnd.js; sourceTree = ""; }; - C1EA5F6A1680FE1300A21259 /* webkitMarginStart.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginStart.js; sourceTree = ""; }; - C1EA5F6B1680FE1300A21259 /* webkitMarginTopCollapse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarginTopCollapse.js; sourceTree = ""; }; - C1EA5F6C1680FE1300A21259 /* webkitMarquee.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarquee.js; sourceTree = ""; }; - C1EA5F6D1680FE1300A21259 /* webkitMarqueeDirection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarqueeDirection.js; sourceTree = ""; }; - C1EA5F6E1680FE1300A21259 /* webkitMarqueeIncrement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarqueeIncrement.js; sourceTree = ""; }; - C1EA5F6F1680FE1300A21259 /* webkitMarqueeRepetition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarqueeRepetition.js; sourceTree = ""; }; - C1EA5F701680FE1300A21259 /* webkitMarqueeSpeed.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarqueeSpeed.js; sourceTree = ""; }; - C1EA5F711680FE1300A21259 /* webkitMarqueeStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMarqueeStyle.js; sourceTree = ""; }; - C1EA5F721680FE1300A21259 /* webkitMask.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMask.js; sourceTree = ""; }; - C1EA5F731680FE1300A21259 /* webkitMaskAttachment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskAttachment.js; sourceTree = ""; }; - C1EA5F741680FE1300A21259 /* webkitMaskBoxImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImage.js; sourceTree = ""; }; - C1EA5F751680FE1300A21259 /* webkitMaskBoxImageOutset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImageOutset.js; sourceTree = ""; }; - C1EA5F761680FE1300A21259 /* webkitMaskBoxImageRepeat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImageRepeat.js; sourceTree = ""; }; - C1EA5F771680FE1300A21259 /* webkitMaskBoxImageSlice.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImageSlice.js; sourceTree = ""; }; - C1EA5F781680FE1300A21259 /* webkitMaskBoxImageSource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImageSource.js; sourceTree = ""; }; - C1EA5F791680FE1300A21259 /* webkitMaskBoxImageWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskBoxImageWidth.js; sourceTree = ""; }; - C1EA5F7A1680FE1300A21259 /* webkitMaskClip.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskClip.js; sourceTree = ""; }; - C1EA5F7B1680FE1300A21259 /* webkitMaskComposite.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskComposite.js; sourceTree = ""; }; - C1EA5F7C1680FE1300A21259 /* webkitMaskImage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskImage.js; sourceTree = ""; }; - C1EA5F7D1680FE1300A21259 /* webkitMaskOrigin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskOrigin.js; sourceTree = ""; }; - C1EA5F7E1680FE1300A21259 /* webkitMaskPosition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskPosition.js; sourceTree = ""; }; - C1EA5F7F1680FE1300A21259 /* webkitMaskPositionX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskPositionX.js; sourceTree = ""; }; - C1EA5F801680FE1300A21259 /* webkitMaskPositionY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskPositionY.js; sourceTree = ""; }; - C1EA5F811680FE1300A21259 /* webkitMaskRepeat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskRepeat.js; sourceTree = ""; }; - C1EA5F821680FE1300A21259 /* webkitMaskRepeatX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskRepeatX.js; sourceTree = ""; }; - C1EA5F831680FE1300A21259 /* webkitMaskRepeatY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskRepeatY.js; sourceTree = ""; }; - C1EA5F841680FE1300A21259 /* webkitMaskSize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaskSize.js; sourceTree = ""; }; - C1EA5F851680FE1300A21259 /* webkitMatchNearestMailBlockquoteColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMatchNearestMailBlockquoteColor.js; sourceTree = ""; }; - C1EA5F861680FE1300A21259 /* webkitMaxLogicalHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaxLogicalHeight.js; sourceTree = ""; }; - C1EA5F871680FE1300A21259 /* webkitMaxLogicalWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMaxLogicalWidth.js; sourceTree = ""; }; - C1EA5F881680FE1300A21259 /* webkitMinLogicalHeight.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMinLogicalHeight.js; sourceTree = ""; }; - C1EA5F891680FE1300A21259 /* webkitMinLogicalWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitMinLogicalWidth.js; sourceTree = ""; }; - C1EA5F8A1680FE1300A21259 /* webkitNbspMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitNbspMode.js; sourceTree = ""; }; - C1EA5F8B1680FE1300A21259 /* webkitOverflowScrolling.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitOverflowScrolling.js; sourceTree = ""; }; - C1EA5F8C1680FE1300A21259 /* webkitPaddingAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPaddingAfter.js; sourceTree = ""; }; - C1EA5F8D1680FE1300A21259 /* webkitPaddingBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPaddingBefore.js; sourceTree = ""; }; - C1EA5F8E1680FE1300A21259 /* webkitPaddingEnd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPaddingEnd.js; sourceTree = ""; }; - C1EA5F8F1680FE1300A21259 /* webkitPaddingStart.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPaddingStart.js; sourceTree = ""; }; - C1EA5F901680FE1300A21259 /* webkitPerspective.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPerspective.js; sourceTree = ""; }; - C1EA5F911680FE1300A21259 /* webkitPerspectiveOrigin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPerspectiveOrigin.js; sourceTree = ""; }; - C1EA5F921680FE1300A21259 /* webkitPerspectiveOriginX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPerspectiveOriginX.js; sourceTree = ""; }; - C1EA5F931680FE1300A21259 /* webkitPerspectiveOriginY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPerspectiveOriginY.js; sourceTree = ""; }; - C1EA5F941680FE1300A21259 /* webkitPrintColorAdjust.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitPrintColorAdjust.js; sourceTree = ""; }; - C1EA5F951680FE1300A21259 /* webkitRegionBreakAfter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitRegionBreakAfter.js; sourceTree = ""; }; - C1EA5F961680FE1300A21259 /* webkitRegionBreakBefore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitRegionBreakBefore.js; sourceTree = ""; }; - C1EA5F971680FE1300A21259 /* webkitRegionBreakInside.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitRegionBreakInside.js; sourceTree = ""; }; - C1EA5F981680FE1300A21259 /* webkitRegionOverflow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitRegionOverflow.js; sourceTree = ""; }; - C1EA5F991680FE1300A21259 /* webkitRtlOrdering.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitRtlOrdering.js; sourceTree = ""; }; - C1EA5F9A1680FE1300A21259 /* webkitSvgShadow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitSvgShadow.js; sourceTree = ""; }; - C1EA5F9B1680FE1300A21259 /* webkitTapHighlightColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTapHighlightColor.js; sourceTree = ""; }; - C1EA5F9C1680FE1300A21259 /* webkitTextCombine.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextCombine.js; sourceTree = ""; }; - C1EA5F9D1680FE1300A21259 /* webkitTextDecorationsInEffect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextDecorationsInEffect.js; sourceTree = ""; }; - C1EA5F9E1680FE1300A21259 /* webkitTextEmphasis.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextEmphasis.js; sourceTree = ""; }; - C1EA5F9F1680FE1300A21259 /* webkitTextEmphasisColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextEmphasisColor.js; sourceTree = ""; }; - C1EA5FA01680FE1300A21259 /* webkitTextEmphasisPosition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextEmphasisPosition.js; sourceTree = ""; }; - C1EA5FA11680FE1300A21259 /* webkitTextEmphasisStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextEmphasisStyle.js; sourceTree = ""; }; - C1EA5FA21680FE1300A21259 /* webkitTextFillColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextFillColor.js; sourceTree = ""; }; - C1EA5FA31680FE1300A21259 /* webkitTextOrientation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextOrientation.js; sourceTree = ""; }; - C1EA5FA41680FE1300A21259 /* webkitTextSecurity.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextSecurity.js; sourceTree = ""; }; - C1EA5FA51680FE1300A21259 /* webkitTextSizeAdjust.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextSizeAdjust.js; sourceTree = ""; }; - C1EA5FA61680FE1300A21259 /* webkitTextStroke.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextStroke.js; sourceTree = ""; }; - C1EA5FA71680FE1300A21259 /* webkitTextStrokeColor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextStrokeColor.js; sourceTree = ""; }; - C1EA5FA81680FE1300A21259 /* webkitTextStrokeWidth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTextStrokeWidth.js; sourceTree = ""; }; - C1EA5FA91680FE1300A21259 /* webkitTransform.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransform.js; sourceTree = ""; }; - C1EA5FAA1680FE1300A21259 /* webkitTransformOrigin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransformOrigin.js; sourceTree = ""; }; - C1EA5FAB1680FE1300A21259 /* webkitTransformOriginX.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransformOriginX.js; sourceTree = ""; }; - C1EA5FAC1680FE1300A21259 /* webkitTransformOriginY.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransformOriginY.js; sourceTree = ""; }; - C1EA5FAD1680FE1300A21259 /* webkitTransformOriginZ.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransformOriginZ.js; sourceTree = ""; }; - C1EA5FAE1680FE1300A21259 /* webkitTransformStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransformStyle.js; sourceTree = ""; }; - C1EA5FAF1680FE1300A21259 /* webkitTransition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransition.js; sourceTree = ""; }; - C1EA5FB01680FE1300A21259 /* webkitTransitionDelay.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransitionDelay.js; sourceTree = ""; }; - C1EA5FB11680FE1300A21259 /* webkitTransitionDuration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransitionDuration.js; sourceTree = ""; }; - C1EA5FB21680FE1300A21259 /* webkitTransitionProperty.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransitionProperty.js; sourceTree = ""; }; - C1EA5FB31680FE1300A21259 /* webkitTransitionTimingFunction.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitTransitionTimingFunction.js; sourceTree = ""; }; - C1EA5FB41680FE1300A21259 /* webkitUserDrag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitUserDrag.js; sourceTree = ""; }; - C1EA5FB51680FE1300A21259 /* webkitUserModify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitUserModify.js; sourceTree = ""; }; - C1EA5FB61680FE1300A21259 /* webkitUserSelect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitUserSelect.js; sourceTree = ""; }; - C1EA5FB71680FE1300A21259 /* webkitWrap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrap.js; sourceTree = ""; }; - C1EA5FB81680FE1300A21259 /* webkitWrapFlow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapFlow.js; sourceTree = ""; }; - C1EA5FB91680FE1300A21259 /* webkitWrapMargin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapMargin.js; sourceTree = ""; }; - C1EA5FBA1680FE1300A21259 /* webkitWrapPadding.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapPadding.js; sourceTree = ""; }; - C1EA5FBB1680FE1300A21259 /* webkitWrapShapeInside.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapShapeInside.js; sourceTree = ""; }; - C1EA5FBC1680FE1300A21259 /* webkitWrapShapeOutside.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapShapeOutside.js; sourceTree = ""; }; - C1EA5FBD1680FE1300A21259 /* webkitWrapThrough.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWrapThrough.js; sourceTree = ""; }; - C1EA5FBE1680FE1300A21259 /* webkitWritingMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webkitWritingMode.js; sourceTree = ""; }; - C1EA5FBF1680FE1300A21259 /* whiteSpace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = whiteSpace.js; sourceTree = ""; }; - C1EA5FC01680FE1300A21259 /* widows.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = widows.js; sourceTree = ""; }; - C1EA5FC11680FE1300A21259 /* width.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = width.js; sourceTree = ""; }; - C1EA5FC21680FE1300A21259 /* wordBreak.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = wordBreak.js; sourceTree = ""; }; - C1EA5FC31680FE1300A21259 /* wordSpacing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = wordSpacing.js; sourceTree = ""; }; - C1EA5FC41680FE1300A21259 /* wordWrap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = wordWrap.js; sourceTree = ""; }; - C1EA5FC51680FE1300A21259 /* writingMode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = writingMode.js; sourceTree = ""; }; - C1EA5FC61680FE1300A21259 /* zIndex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = zIndex.js; sourceTree = ""; }; - C1EA5FC71680FE1300A21259 /* zoom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = zoom.js; sourceTree = ""; }; - C1EA5FC81680FE1300A21259 /* props */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = props; sourceTree = ""; }; - C1EA5FC91680FE1300A21259 /* make_properties.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = make_properties.pl; sourceTree = ""; }; - C1EA5FCA1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5FCB1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5FCD1680FE1300A21259 /* tests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tests.js; sourceTree = ""; }; - C1EA5FCF1680FE1300A21259 /* .project */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = .project; sourceTree = ""; }; - C1EA5FD01680FE1300A21259 /* .project.bak */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = .project.bak; sourceTree = ""; }; - C1EA5FD21680FE1300A21259 /* .jsdtscope */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = .jsdtscope; sourceTree = ""; }; - C1EA5FD31680FE1300A21259 /* org.eclipse.core.resources.prefs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = org.eclipse.core.resources.prefs; sourceTree = ""; }; - C1EA5FD41680FE1300A21259 /* org.eclipse.wst.jsdt.ui.superType.container */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = org.eclipse.wst.jsdt.ui.superType.container; sourceTree = ""; }; - C1EA5FD51680FE1300A21259 /* org.eclipse.wst.jsdt.ui.superType.name */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = org.eclipse.wst.jsdt.ui.superType.name; sourceTree = ""; }; - C1EA5FD61680FE1300A21259 /* a */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = a; sourceTree = ""; }; - C1EA5FD71680FE1300A21259 /* b */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = b; sourceTree = ""; }; - C1EA5FD81680FE1300A21259 /* c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = c; sourceTree = ""; }; - C1EA5FD91680FE1300A21259 /* CHANGELOG */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGELOG; sourceTree = ""; }; - C1EA5FDA1680FE1300A21259 /* json2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json2.js; sourceTree = ""; }; - C1EA5FDC1680FE1300A21259 /* htmlparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmlparser.js; sourceTree = ""; }; - C1EA5FDD1680FE1300A21259 /* htmlparser.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmlparser.min.js; sourceTree = ""; }; - C1EA5FDE1680FE1300A21259 /* node-htmlparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-htmlparser.js"; sourceTree = ""; }; - C1EA5FDF1680FE1300A21259 /* node-htmlparser.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-htmlparser.min.js"; sourceTree = ""; }; - C1EA5FE01680FE1300A21259 /* libxmljs.node */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.bundle"; path = libxmljs.node; sourceTree = ""; }; - C1EA5FE11680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA5FE31680FE1300A21259 /* a */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = a; sourceTree = ""; }; - C1EA5FE41680FE1300A21259 /* b */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = b; sourceTree = ""; }; - C1EA5FE51680FE1300A21259 /* compat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compat.js; sourceTree = ""; }; - C1EA5FE61680FE1300A21259 /* htmlparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = htmlparser.js; sourceTree = ""; }; - C1EA5FE71680FE1300A21259 /* parser.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = parser.zip; sourceTree = ""; }; - C1EA5FE81680FE1300A21259 /* test01.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test01.js; sourceTree = ""; }; - C1EA5FE91680FE1300A21259 /* test02.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test02.js; sourceTree = ""; }; - C1EA5FEA1680FE1300A21259 /* newparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = newparser.js; sourceTree = ""; }; - C1EA5FEB1680FE1300A21259 /* node-htmlparser.old.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-htmlparser.old.js"; sourceTree = ""; }; - C1EA5FEC1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5FED1680FE1300A21259 /* profile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = profile; sourceTree = ""; }; - C1EA5FEE1680FE1300A21259 /* profile.getelement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = profile.getelement.js; sourceTree = ""; }; - C1EA5FEF1680FE1300A21259 /* profile.getelement.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = profile.getelement.txt; sourceTree = ""; }; - C1EA5FF01680FE1300A21259 /* profile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = profile.js; sourceTree = ""; }; - C1EA5FF11680FE1300A21259 /* profileresults.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = profileresults.txt; sourceTree = ""; }; - C1EA5FF41680FE1300A21259 /* CHANGELOG */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGELOG; sourceTree = ""; }; - C1EA5FF51680FE1300A21259 /* json2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json2.js; sourceTree = ""; }; - C1EA5FF71680FE1300A21259 /* node-htmlparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-htmlparser.js"; sourceTree = ""; }; - C1EA5FF81680FE1300A21259 /* node-htmlparser.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-htmlparser.min.js"; sourceTree = ""; }; - C1EA5FF91680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA5FFA1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA5FFB1680FE1300A21259 /* profile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = profile.js; sourceTree = ""; }; - C1EA5FFC1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA5FFD1680FE1300A21259 /* runtests.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = runtests.html; sourceTree = ""; }; - C1EA5FFE1680FE1300A21259 /* runtests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtests.js; sourceTree = ""; }; - C1EA5FFF1680FE1300A21259 /* runtests.min.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = runtests.min.html; sourceTree = ""; }; - C1EA60001680FE1300A21259 /* runtests.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtests.min.js; sourceTree = ""; }; - C1EA60011680FE1300A21259 /* snippet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = snippet.js; sourceTree = ""; }; - C1EA60031680FE1300A21259 /* 01-basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "01-basic.js"; sourceTree = ""; }; - C1EA60041680FE1300A21259 /* 02-single_tag_1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "02-single_tag_1.js"; sourceTree = ""; }; - C1EA60051680FE1300A21259 /* 03-single_tag_2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "03-single_tag_2.js"; sourceTree = ""; }; - C1EA60061680FE1300A21259 /* 04-unescaped_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "04-unescaped_in_script.js"; sourceTree = ""; }; - C1EA60071680FE1300A21259 /* 05-tags_in_comment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "05-tags_in_comment.js"; sourceTree = ""; }; - C1EA60081680FE1300A21259 /* 06-comment_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "06-comment_in_script.js"; sourceTree = ""; }; - C1EA60091680FE1300A21259 /* 07-unescaped_in_style.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "07-unescaped_in_style.js"; sourceTree = ""; }; - C1EA600A1680FE1300A21259 /* 08-extra_spaces_in_tag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "08-extra_spaces_in_tag.js"; sourceTree = ""; }; - C1EA600B1680FE1300A21259 /* 09-unquoted_attrib.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "09-unquoted_attrib.js"; sourceTree = ""; }; - C1EA600C1680FE1300A21259 /* 10-singular_attribute.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "10-singular_attribute.js"; sourceTree = ""; }; - C1EA600D1680FE1300A21259 /* 11-text_outside_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "11-text_outside_tags.js"; sourceTree = ""; }; - C1EA600E1680FE1300A21259 /* 12-text_only.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "12-text_only.js"; sourceTree = ""; }; - C1EA600F1680FE1300A21259 /* 13-comment_in_text.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "13-comment_in_text.js"; sourceTree = ""; }; - C1EA60101680FE1300A21259 /* 14-comment_in_text_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "14-comment_in_text_in_script.js"; sourceTree = ""; }; - C1EA60111680FE1300A21259 /* 15-non-verbose.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "15-non-verbose.js"; sourceTree = ""; }; - C1EA60121680FE1300A21259 /* 16-ignore_whitespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "16-ignore_whitespace.js"; sourceTree = ""; }; - C1EA60131680FE1300A21259 /* 17-xml_namespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "17-xml_namespace.js"; sourceTree = ""; }; - C1EA60141680FE1300A21259 /* 18-enforce_empty_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "18-enforce_empty_tags.js"; sourceTree = ""; }; - C1EA60151680FE1300A21259 /* 19-ignore_empty_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "19-ignore_empty_tags.js"; sourceTree = ""; }; - C1EA60161680FE1300A21259 /* 20-rss.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "20-rss.js"; sourceTree = ""; }; - C1EA60171680FE1300A21259 /* 21-atom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "21-atom.js"; sourceTree = ""; }; - C1EA60181680FE1300A21259 /* utils_example.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils_example.js; sourceTree = ""; }; - C1EA60191680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA601A1680FE1300A21259 /* rssbug.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rssbug.js; sourceTree = ""; }; - C1EA601B1680FE1300A21259 /* rssbug.rss */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = rssbug.rss; sourceTree = ""; }; - C1EA601C1680FE1300A21259 /* runtests.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = runtests.html; sourceTree = ""; }; - C1EA601D1680FE1300A21259 /* runtests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtests.js; sourceTree = ""; }; - C1EA601E1680FE1300A21259 /* runtests.min.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = runtests.min.html; sourceTree = ""; }; - C1EA601F1680FE1300A21259 /* runtests.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtests.min.js; sourceTree = ""; }; - C1EA60201680FE1300A21259 /* runtests_new.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtests_new.js; sourceTree = ""; }; - C1EA60211680FE1300A21259 /* snippet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = snippet.js; sourceTree = ""; }; - C1EA60221680FE1300A21259 /* test01.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test01.js; sourceTree = ""; }; - C1EA60241680FE1300A21259 /* api.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = api.html; sourceTree = ""; }; - C1EA60251680FE1300A21259 /* getelement.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = getelement.html; sourceTree = ""; }; - C1EA60261680FE1300A21259 /* trackerchecker.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = trackerchecker.html; sourceTree = ""; }; - C1EA60281680FE1300A21259 /* 01-basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "01-basic.js"; sourceTree = ""; }; - C1EA60291680FE1300A21259 /* 02-single_tag_1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "02-single_tag_1.js"; sourceTree = ""; }; - C1EA602A1680FE1300A21259 /* 03-single_tag_2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "03-single_tag_2.js"; sourceTree = ""; }; - C1EA602B1680FE1300A21259 /* 04-unescaped_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "04-unescaped_in_script.js"; sourceTree = ""; }; - C1EA602C1680FE1300A21259 /* 05-tags_in_comment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "05-tags_in_comment.js"; sourceTree = ""; }; - C1EA602D1680FE1300A21259 /* 06-comment_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "06-comment_in_script.js"; sourceTree = ""; }; - C1EA602E1680FE1300A21259 /* 07-unescaped_in_style.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "07-unescaped_in_style.js"; sourceTree = ""; }; - C1EA602F1680FE1300A21259 /* 08-extra_spaces_in_tag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "08-extra_spaces_in_tag.js"; sourceTree = ""; }; - C1EA60301680FE1300A21259 /* 09-unquoted_attrib.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "09-unquoted_attrib.js"; sourceTree = ""; }; - C1EA60311680FE1300A21259 /* 10-singular_attribute.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "10-singular_attribute.js"; sourceTree = ""; }; - C1EA60321680FE1300A21259 /* 11-text_outside_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "11-text_outside_tags.js"; sourceTree = ""; }; - C1EA60331680FE1300A21259 /* 12-text_only.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "12-text_only.js"; sourceTree = ""; }; - C1EA60341680FE1300A21259 /* 13-comment_in_text.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "13-comment_in_text.js"; sourceTree = ""; }; - C1EA60351680FE1300A21259 /* 14-comment_in_text_in_script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "14-comment_in_text_in_script.js"; sourceTree = ""; }; - C1EA60361680FE1300A21259 /* 15-non-verbose.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "15-non-verbose.js"; sourceTree = ""; }; - C1EA60371680FE1300A21259 /* 16-ignore_whitespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "16-ignore_whitespace.js"; sourceTree = ""; }; - C1EA60381680FE1300A21259 /* 17-xml_namespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "17-xml_namespace.js"; sourceTree = ""; }; - C1EA60391680FE1300A21259 /* 18-enforce_empty_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "18-enforce_empty_tags.js"; sourceTree = ""; }; - C1EA603A1680FE1300A21259 /* 19-ignore_empty_tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "19-ignore_empty_tags.js"; sourceTree = ""; }; - C1EA603B1680FE1300A21259 /* 20-rss.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "20-rss.js"; sourceTree = ""; }; - C1EA603C1680FE1300A21259 /* 21-atom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "21-atom.js"; sourceTree = ""; }; - C1EA603D1680FE1300A21259 /* 22-position_data.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "22-position_data.js"; sourceTree = ""; }; - C1EA603F1680FE1300A21259 /* snippet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = snippet.js; sourceTree = ""; }; - C1EA60401680FE1300A21259 /* utils_example.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils_example.js; sourceTree = ""; }; - C1EA60411680FE1300A21259 /* v8.log */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = v8.log; sourceTree = ""; }; - C1EA60431680FE1300A21259 /* aws.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = aws.js; sourceTree = ""; }; - C1EA60441680FE1300A21259 /* forever.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = forever.js; sourceTree = ""; }; - C1EA60451680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA60461680FE1300A21259 /* main.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main.js; sourceTree = ""; }; - C1EA60491680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA604B1680FE1300A21259 /* form_data.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = form_data.js; sourceTree = ""; }; - C1EA604C1680FE1300A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA604D1680FE1300A21259 /* node-form-data.sublime-project */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "node-form-data.sublime-project"; sourceTree = ""; }; - C1EA604E1680FE1300A21259 /* node-form-data.sublime-workspace */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "node-form-data.sublime-workspace"; sourceTree = ""; }; - C1EA60511680FE1300A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA60521680FE1300A21259 /* async.min.js.gzip */ = {isa = PBXFileReference; lastKnownFileType = file; path = async.min.js.gzip; sourceTree = ""; }; - C1EA60541680FE1300A21259 /* nodeunit.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nodeunit.css; sourceTree = ""; }; - C1EA60551680FE1300A21259 /* nodeunit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nodeunit.js; sourceTree = ""; }; - C1EA60571680FE1300A21259 /* async.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = async.min.js; sourceTree = ""; }; - C1EA60581680FE1300A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA605A1680FE1300A21259 /* async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = async.js; sourceTree = ""; }; - C1EA605B1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA605C1680FE1300A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA605D1680FE1300A21259 /* nodelint.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = nodelint.cfg; sourceTree = ""; }; - C1EA605E1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA605F1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA60611680FE1300A21259 /* .swp */ = {isa = PBXFileReference; lastKnownFileType = file; path = .swp; sourceTree = ""; }; - C1EA60621680FE1300A21259 /* test-async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-async.js"; sourceTree = ""; }; - C1EA60631680FE1300A21259 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = test.html; sourceTree = ""; }; - C1EA60651680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA60671680FE1300A21259 /* combined_stream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = combined_stream.js; sourceTree = ""; }; - C1EA60681680FE1300A21259 /* License */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License; sourceTree = ""; }; - C1EA60691680FE1300A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA606C1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA606E1680FE1300A21259 /* delayed_stream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = delayed_stream.js; sourceTree = ""; }; - C1EA606F1680FE1300A21259 /* License */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License; sourceTree = ""; }; - C1EA60701680FE1300A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA60711680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA60721680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA60741680FE1300A21259 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = common.js; sourceTree = ""; }; - C1EA60761680FE1300A21259 /* test-delayed-http-upload.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-http-upload.js"; sourceTree = ""; }; - C1EA60771680FE1300A21259 /* test-delayed-stream-auto-pause.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-stream-auto-pause.js"; sourceTree = ""; }; - C1EA60781680FE1300A21259 /* test-delayed-stream-pause.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-stream-pause.js"; sourceTree = ""; }; - C1EA60791680FE1300A21259 /* test-delayed-stream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-stream.js"; sourceTree = ""; }; - C1EA607A1680FE1300A21259 /* test-handle-source-errors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-handle-source-errors.js"; sourceTree = ""; }; - C1EA607B1680FE1300A21259 /* test-max-data-size.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-max-data-size.js"; sourceTree = ""; }; - C1EA607C1680FE1300A21259 /* test-pipe-resumes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-pipe-resumes.js"; sourceTree = ""; }; - C1EA607D1680FE1300A21259 /* test-proxy-readable.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-proxy-readable.js"; sourceTree = ""; }; - C1EA607E1680FE1300A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA607F1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA60801680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA60821680FE1300A21259 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = common.js; sourceTree = ""; }; - C1EA60841680FE1300A21259 /* file1.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = file1.txt; sourceTree = ""; }; - C1EA60851680FE1300A21259 /* file2.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = file2.txt; sourceTree = ""; }; - C1EA60871680FE1300A21259 /* test-callback-streams.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-callback-streams.js"; sourceTree = ""; }; - C1EA60881680FE1300A21259 /* test-data-size.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-data-size.js"; sourceTree = ""; }; - C1EA60891680FE1300A21259 /* test-delayed-streams-and-buffers-and-strings.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-streams-and-buffers-and-strings.js"; sourceTree = ""; }; - C1EA608A1680FE1300A21259 /* test-delayed-streams.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-delayed-streams.js"; sourceTree = ""; }; - C1EA608B1680FE1300A21259 /* test-max-data-size.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-max-data-size.js"; sourceTree = ""; }; - C1EA608C1680FE1300A21259 /* test-unpaused-streams.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-unpaused-streams.js"; sourceTree = ""; }; - C1EA608D1680FE1300A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA608E1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA608F1680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA60911680FE1300A21259 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = common.js; sourceTree = ""; }; - C1EA60931680FE1300A21259 /* bacon.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bacon.txt; sourceTree = ""; }; - C1EA60941680FE1300A21259 /* unicycle.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = unicycle.jpg; sourceTree = ""; }; - C1EA60961680FE1300A21259 /* test-form-get-length.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-form-get-length.js"; sourceTree = ""; }; - C1EA60971680FE1300A21259 /* test-get-boundary.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-get-boundary.js"; sourceTree = ""; }; - C1EA60981680FE1300A21259 /* test-http-response.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-http-response.js"; sourceTree = ""; }; - C1EA60991680FE1300A21259 /* test-pipe.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-pipe.js"; sourceTree = ""; }; - C1EA609A1680FE1300A21259 /* test-submit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-submit.js"; sourceTree = ""; }; - C1EA609B1680FE1300A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA609D1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA609E1680FE1300A21259 /* mime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mime.js; sourceTree = ""; }; - C1EA609F1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA60A01680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA60A11680FE1300A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA60A31680FE1300A21259 /* mime.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mime.types; sourceTree = ""; }; - C1EA60A41680FE1300A21259 /* node.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = node.types; sourceTree = ""; }; - C1EA60A51680FE1300A21259 /* oauth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = oauth.js; sourceTree = ""; }; - C1EA60A61680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA60A71680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA60A91680FE1300A21259 /* googledoodle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = googledoodle.png; sourceTree = ""; }; - C1EA60AA1680FE1300A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA60AB1680FE1300A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA60AC1680FE1300A21259 /* squid.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = squid.conf; sourceTree = ""; }; - C1EA60AF1680FE1300A21259 /* ca.cnf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.cnf; sourceTree = ""; }; - C1EA60B01680FE1300A21259 /* ca.crl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.crl; sourceTree = ""; }; - C1EA60B11680FE1300A21259 /* ca.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.crt; sourceTree = ""; }; - C1EA60B21680FE1300A21259 /* ca.csr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.csr; sourceTree = ""; }; - C1EA60B31680FE1300A21259 /* ca.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.key; sourceTree = ""; }; - C1EA60B41680FE1300A21259 /* ca.srl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ca.srl; sourceTree = ""; }; - C1EA60B51680FE1300A21259 /* server.cnf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.cnf; sourceTree = ""; }; - C1EA60B61680FE1300A21259 /* server.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.crt; sourceTree = ""; }; - C1EA60B71680FE1300A21259 /* server.csr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.csr; sourceTree = ""; }; - C1EA60B81680FE1300A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA60B91680FE1300A21259 /* server.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.key; sourceTree = ""; }; - C1EA60BA1680FE1300A21259 /* npm-ca.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "npm-ca.crt"; sourceTree = ""; }; - C1EA60BB1680FE1300A21259 /* test.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.crt; sourceTree = ""; }; - C1EA60BC1680FE1300A21259 /* test.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.key; sourceTree = ""; }; - C1EA60BD1680FE1300A21259 /* test-body.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-body.js"; sourceTree = ""; }; - C1EA60BE1680FE1300A21259 /* test-cookie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-cookie.js"; sourceTree = ""; }; - C1EA60BF1680FE1300A21259 /* test-cookiejar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-cookiejar.js"; sourceTree = ""; }; - C1EA60C01680FE1300A21259 /* test-defaults.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-defaults.js"; sourceTree = ""; }; - C1EA60C11680FE1300A21259 /* test-errors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-errors.js"; sourceTree = ""; }; - C1EA60C21680FE1300A21259 /* test-follow-all-303.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-follow-all-303.js"; sourceTree = ""; }; - C1EA60C31680FE1300A21259 /* test-follow-all.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-follow-all.js"; sourceTree = ""; }; - C1EA60C41680FE1300A21259 /* test-form.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-form.js"; sourceTree = ""; }; - C1EA60C51680FE1300A21259 /* test-headers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-headers.js"; sourceTree = ""; }; - C1EA60C61680FE1300A21259 /* test-httpModule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-httpModule.js"; sourceTree = ""; }; - C1EA60C71680FE1300A21259 /* test-https-strict.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-https-strict.js"; sourceTree = ""; }; - C1EA60C81680FE1300A21259 /* test-https.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-https.js"; sourceTree = ""; }; - C1EA60C91680FE1300A21259 /* test-oauth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-oauth.js"; sourceTree = ""; }; - C1EA60CA1680FE1300A21259 /* test-params.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-params.js"; sourceTree = ""; }; - C1EA60CB1680FE1300A21259 /* test-piped-redirect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-piped-redirect.js"; sourceTree = ""; }; - C1EA60CC1680FE1300A21259 /* test-pipes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-pipes.js"; sourceTree = ""; }; - C1EA60CD1680FE1300A21259 /* test-pool.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-pool.js"; sourceTree = ""; }; - C1EA60CE1680FE1300A21259 /* test-protocol-changing-redirect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-protocol-changing-redirect.js"; sourceTree = ""; }; - C1EA60CF1680FE1300A21259 /* test-proxy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-proxy.js"; sourceTree = ""; }; - C1EA60D01680FE1300A21259 /* test-qs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-qs.js"; sourceTree = ""; }; - C1EA60D11680FE1300A21259 /* test-redirect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-redirect.js"; sourceTree = ""; }; - C1EA60D21680FE1300A21259 /* test-s3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-s3.js"; sourceTree = ""; }; - C1EA60D31680FE1300A21259 /* test-timeout.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-timeout.js"; sourceTree = ""; }; - C1EA60D41680FE1300A21259 /* test-toJSON.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-toJSON.js"; sourceTree = ""; }; - C1EA60D51680FE1300A21259 /* test-tunnel.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-tunnel.js"; sourceTree = ""; }; - C1EA60D61680FE1300A21259 /* unicycle.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = unicycle.jpg; sourceTree = ""; }; - C1EA60D71680FE1300A21259 /* tunnel.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tunnel.js; sourceTree = ""; }; - C1EA60D81680FE1300A21259 /* uuid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = uuid.js; sourceTree = ""; }; - C1EA60DB1680FE1300A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA60DC1680FE1300A21259 /* jar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jar.js; sourceTree = ""; }; - C1EA60DD1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA60DE1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA60DF1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA60E01680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA60E21680FE1300A21259 /* buster-test.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "buster-test.css"; sourceTree = ""; }; - C1EA60E31680FE1300A21259 /* run-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "run-tests"; sourceTree = ""; }; - C1EA60E61680FE1300A21259 /* test-runner-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-runner-test.js"; sourceTree = ""; }; - C1EA60E71680FE1300A21259 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = test.html; sourceTree = ""; }; - C1EA60EA1680FE1300A21259 /* auto-run-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "auto-run-test.js"; sourceTree = ""; }; - C1EA60EB1680FE1300A21259 /* browser-env-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "browser-env-test.js"; sourceTree = ""; }; - C1EA60ED1680FE1300A21259 /* dots-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "dots-test.js"; sourceTree = ""; }; - C1EA60EE1680FE1300A21259 /* html-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "html-test.js"; sourceTree = ""; }; - C1EA60EF1680FE1300A21259 /* json-proxy-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "json-proxy-test.js"; sourceTree = ""; }; - C1EA60F01680FE1300A21259 /* specification-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "specification-test.js"; sourceTree = ""; }; - C1EA60F11680FE1300A21259 /* tap-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "tap-test.js"; sourceTree = ""; }; - C1EA60F21680FE1300A21259 /* teamcity-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "teamcity-test.js"; sourceTree = ""; }; - C1EA60F31680FE1300A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA60F41680FE1300A21259 /* xml-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "xml-test.js"; sourceTree = ""; }; - C1EA60F51680FE1300A21259 /* reporters-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "reporters-test.js"; sourceTree = ""; }; - C1EA60F61680FE1300A21259 /* spec-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "spec-test.js"; sourceTree = ""; }; - C1EA60F71680FE1300A21259 /* stack-filter-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "stack-filter-test.js"; sourceTree = ""; }; - C1EA60F81680FE1300A21259 /* test-case-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-case-test.js"; sourceTree = ""; }; - C1EA60F91680FE1300A21259 /* test-context-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-context-test.js"; sourceTree = ""; }; - C1EA60FA1680FE1300A21259 /* test-runner-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-runner-test.js"; sourceTree = ""; }; - C1EA60FC1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA60FD1680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA60FE1680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA60FF1680FE1300A21259 /* buster-config.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-config.js"; sourceTree = ""; }; - C1EA61011680FE1300A21259 /* run-analyzer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "run-analyzer.js"; sourceTree = ""; }; - C1EA61041680FE1300A21259 /* progress-reporter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "progress-reporter.js"; sourceTree = ""; }; - C1EA61051680FE1300A21259 /* remote-runner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "remote-runner.js"; sourceTree = ""; }; - C1EA61061680FE1300A21259 /* browser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browser.js; sourceTree = ""; }; - C1EA61071680FE1300A21259 /* node.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = node.js; sourceTree = ""; }; - C1EA61081680FE1300A21259 /* test-cli.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-cli.js"; sourceTree = ""; }; - C1EA61091680FE1300A21259 /* tmp-file.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "tmp-file.js"; sourceTree = ""; }; - C1EA610A1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA610D1680FE1300A21259 /* lodash */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = lodash; sourceTree = ""; }; - C1EA610F1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA61101680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA61111680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA61121680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA61141680FE1300A21259 /* ansi-colorizer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ansi-colorizer.js"; sourceTree = ""; }; - C1EA61151680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA61161680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61171680FE1300A21259 /* Readme.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.rst; sourceTree = ""; }; - C1EA61181680FE1300A21259 /* run-tests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "run-tests.js"; sourceTree = ""; }; - C1EA611A1680FE1300A21259 /* ansi-colorizer-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ansi-colorizer-test.js"; sourceTree = ""; }; - C1EA611C1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA611D1680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA611E1680FE1300A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA61201680FE1300A21259 /* ansi-grid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ansi-grid.js"; sourceTree = ""; }; - C1EA61211680FE1300A21259 /* ansi.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ansi.js; sourceTree = ""; }; - C1EA61221680FE1300A21259 /* matrix.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = matrix.js; sourceTree = ""; }; - C1EA61231680FE1300A21259 /* relative-grid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "relative-grid.js"; sourceTree = ""; }; - C1EA61241680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61251680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA61261680FE1300A21259 /* run-tests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "run-tests.js"; sourceTree = ""; }; - C1EA61281680FE1300A21259 /* ansi-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ansi-test.js"; sourceTree = ""; }; - C1EA61291680FE1300A21259 /* helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = helper.js; sourceTree = ""; }; - C1EA612A1680FE1300A21259 /* matrix-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "matrix-test.js"; sourceTree = ""; }; - C1EA612B1680FE1300A21259 /* relative-grid-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "relative-grid-test.js"; sourceTree = ""; }; - C1EA612D1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA612E1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA612F1680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA61301680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA61311680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA61331680FE1300A21259 /* bane.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bane.js; sourceTree = ""; }; - C1EA61341680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA61351680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61361680FE1300A21259 /* Readme.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.rst; sourceTree = ""; }; - C1EA61381680FE1300A21259 /* bane-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bane-test.js"; sourceTree = ""; }; - C1EA613A1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA613B1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA613C1680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA613D1680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA613E1680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA61401680FE1300A21259 /* analyzer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = analyzer.js; sourceTree = ""; }; - C1EA61411680FE1300A21259 /* buster-analyzer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-analyzer.js"; sourceTree = ""; }; - C1EA61421680FE1300A21259 /* file-reporter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-reporter.js"; sourceTree = ""; }; - C1EA61431680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA61441680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61451680FE1300A21259 /* Readme.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.rst; sourceTree = ""; }; - C1EA61471680FE1300A21259 /* analyzer-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "analyzer-test.js"; sourceTree = ""; }; - C1EA61481680FE1300A21259 /* file-reporter-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-reporter-test.js"; sourceTree = ""; }; - C1EA614A1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA614B1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA614C1680FE1300A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA614F1680FE1300A21259 /* args.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = args.js; sourceTree = ""; }; - C1EA61501680FE1300A21259 /* config.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = config.js; sourceTree = ""; }; - C1EA61511680FE1300A21259 /* help.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = help.js; sourceTree = ""; }; - C1EA61521680FE1300A21259 /* logger.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = logger.js; sourceTree = ""; }; - C1EA61531680FE1300A21259 /* buster-cli.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-cli.js"; sourceTree = ""; }; - C1EA61541680FE1300A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA61571680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA61581680FE1300A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA61591680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA615B1680FE1300A21259 /* buster-configuration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-configuration.js"; sourceTree = ""; }; - C1EA615C1680FE1300A21259 /* file-loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-loader.js"; sourceTree = ""; }; - C1EA615D1680FE1300A21259 /* group.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = group.js; sourceTree = ""; }; - C1EA615E1680FE1300A21259 /* util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.js; sourceTree = ""; }; - C1EA61611680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA61621680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA61641680FE1300A21259 /* g.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = g.js; sourceTree = ""; }; - C1EA61651680FE1300A21259 /* usr-local.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "usr-local.js"; sourceTree = ""; }; - C1EA61661680FE1300A21259 /* glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glob.js; sourceTree = ""; }; - C1EA61671680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA616A1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA616B1680FE1300A21259 /* graceful-fs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "graceful-fs.js"; sourceTree = ""; }; - C1EA616C1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA616D1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA616E1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA61701680FE1300A21259 /* open.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = open.js; sourceTree = ""; }; - C1EA61721680FE1300A21259 /* inherits.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inherits.js; sourceTree = ""; }; - C1EA61731680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61741680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA61751680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61761680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA61781680FE1300A21259 /* 00-setup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "00-setup.js"; sourceTree = ""; }; - C1EA61791680FE1300A21259 /* bash-comparison.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bash-comparison.js"; sourceTree = ""; }; - C1EA617A1680FE1300A21259 /* cwd-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "cwd-test.js"; sourceTree = ""; }; - C1EA617B1680FE1300A21259 /* mark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mark.js; sourceTree = ""; }; - C1EA617C1680FE1300A21259 /* pause-resume.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pause-resume.js"; sourceTree = ""; }; - C1EA617D1680FE1300A21259 /* root-nomount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "root-nomount.js"; sourceTree = ""; }; - C1EA617E1680FE1300A21259 /* root.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = root.js; sourceTree = ""; }; - C1EA617F1680FE1300A21259 /* zz-cleanup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "zz-cleanup.js"; sourceTree = ""; }; - C1EA61811680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA61821680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA61831680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA61841680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA61881680FE1300A21259 /* 1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 1.png; sourceTree = ""; }; - C1EA61891680FE1300A21259 /* 2.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = 2.html; sourceTree = ""; }; - C1EA618A1680FE1300A21259 /* 3.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 3.txt; sourceTree = ""; }; - C1EA618B1680FE1300A21259 /* 4.tgz */ = {isa = PBXFileReference; lastKnownFileType = file; path = 4.tgz; sourceTree = ""; }; - C1EA618C1680FE1300A21259 /* medium.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = medium.json; sourceTree = ""; }; - C1EA618D1680FE1300A21259 /* publish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = publish.js; sourceTree = ""; }; - C1EA618E1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA618F1680FE1300A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA61901680FE1300A21259 /* small.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = small.json; sourceTree = ""; }; - C1EA61921680FE1300A21259 /* file-etag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-etag.js"; sourceTree = ""; }; - C1EA61931680FE1300A21259 /* http-proxy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-proxy.js"; sourceTree = ""; }; - C1EA61941680FE1300A21259 /* invalid-error.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "invalid-error.js"; sourceTree = ""; }; - C1EA61951680FE1300A21259 /* load-path.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "load-path.js"; sourceTree = ""; }; - C1EA61971680FE1300A21259 /* iife.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = iife.js; sourceTree = ""; }; - C1EA61981680FE1300A21259 /* ramp-resources.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ramp-resources.js"; sourceTree = ""; }; - C1EA61991680FE1300A21259 /* resource-combiner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-combiner.js"; sourceTree = ""; }; - C1EA619A1680FE1300A21259 /* resource-file-resolver.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-file-resolver.js"; sourceTree = ""; }; - C1EA619B1680FE1300A21259 /* resource-middleware.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-middleware.js"; sourceTree = ""; }; - C1EA619C1680FE1300A21259 /* resource-set-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-cache.js"; sourceTree = ""; }; - C1EA619D1680FE1300A21259 /* resource-set.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set.js"; sourceTree = ""; }; - C1EA619E1680FE1300A21259 /* resource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resource.js; sourceTree = ""; }; - C1EA61A11680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA61A21680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA61A31680FE1300A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA61A41680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA61A61680FE1300A21259 /* buster-glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-glob.js"; sourceTree = ""; }; - C1EA61A71680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61A81680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA61AA1680FE1300A21259 /* buster-glob-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-glob-test.js"; sourceTree = ""; }; - C1EA61AC1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA61AD1680FE1300A21259 /* mime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mime.js; sourceTree = ""; }; - C1EA61AE1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61AF1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA61B01680FE1300A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA61B21680FE1300A21259 /* mime.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mime.types; sourceTree = ""; }; - C1EA61B31680FE1300A21259 /* node.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = node.types; sourceTree = ""; }; - C1EA61B51680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA61B61680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA61B71680FE1300A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA61BA1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA61BC1680FE1300A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA61BD1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA61BE1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61BF1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA61C11680FE1300A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA61C21680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61C31680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA61C51680FE1300A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA61C61680FE1300A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA61C71680FE1300A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA61C81680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61C91680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA61CC1680FE1300A21259 /* bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.js; sourceTree = ""; }; - C1EA61CD1680FE1300A21259 /* foo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.js; sourceTree = ""; }; - C1EA61CF1680FE1300A21259 /* other.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = other.js; sourceTree = ""; }; - C1EA61D01680FE1300A21259 /* some-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "some-test.js"; sourceTree = ""; }; - C1EA61D21680FE1300A21259 /* my-testish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "my-testish.js"; sourceTree = ""; }; - C1EA61D31680FE1300A21259 /* http-proxy-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-proxy-test.js"; sourceTree = ""; }; - C1EA61D41680FE1300A21259 /* load-path-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "load-path-test.js"; sourceTree = ""; }; - C1EA61D61680FE1300A21259 /* iife-processor-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "iife-processor-test.js"; sourceTree = ""; }; - C1EA61D71680FE1300A21259 /* resource-middleware-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-middleware-test.js"; sourceTree = ""; }; - C1EA61D81680FE1300A21259 /* resource-set-cache-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-cache-test.js"; sourceTree = ""; }; - C1EA61D91680FE1300A21259 /* resource-set-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-test.js"; sourceTree = ""; }; - C1EA61DA1680FE1300A21259 /* resource-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-test.js"; sourceTree = ""; }; - C1EA61DB1680FE1300A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA61DC1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61DD1680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA61DF1680FE1300A21259 /* buster-configuration-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-configuration-test.js"; sourceTree = ""; }; - C1EA61E01680FE1300A21259 /* file-loader-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-loader-test.js"; sourceTree = ""; }; - C1EA61E21680FE1300A21259 /* bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.js; sourceTree = ""; }; - C1EA61E41680FE1300A21259 /* file */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = file; sourceTree = ""; }; - C1EA61E51680FE1300A21259 /* file.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file.js; sourceTree = ""; }; - C1EA61E61680FE1300A21259 /* foo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.js; sourceTree = ""; }; - C1EA61E81680FE1300A21259 /* my-testish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "my-testish.js"; sourceTree = ""; }; - C1EA61E91680FE1300A21259 /* group-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "group-test.js"; sourceTree = ""; }; - C1EA61EA1680FE1300A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA61EB1680FE1300A21259 /* todo.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = todo.org; sourceTree = ""; }; - C1EA61ED1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA61EE1680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA61EF1680FE1300A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA61F01680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA61F21680FE1300A21259 /* buster-terminal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-terminal.js"; sourceTree = ""; }; - C1EA61F31680FE1300A21259 /* matrix.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = matrix.js; sourceTree = ""; }; - C1EA61F41680FE1300A21259 /* relative-grid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "relative-grid.js"; sourceTree = ""; }; - C1EA61F51680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA61F61680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA61F81680FE1300A21259 /* buster-terminal-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-terminal-test.js"; sourceTree = ""; }; - C1EA61F91680FE1300A21259 /* helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = helper.js; sourceTree = ""; }; - C1EA61FA1680FE1300A21259 /* matrix-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "matrix-test.js"; sourceTree = ""; }; - C1EA61FB1680FE1300A21259 /* relative-grid-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "relative-grid-test.js"; sourceTree = ""; }; - C1EA61FD1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA61FE1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA61FF1680FE1300A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA62021680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA62031680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA62051680FE1300A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA62061680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA62071680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA62081680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA620A1680FE1300A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA620C1680FE1300A21259 /* bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bench.js; sourceTree = ""; }; - C1EA620D1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA620E1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA620F1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62101680FE1300A21259 /* sigmund.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sigmund.js; sourceTree = ""; }; - C1EA62121680FE1300A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA62131680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA62141680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62161680FE1300A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA62171680FE1300A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA62181680FE1300A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA62191680FE1300A21259 /* defaults.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = defaults.js; sourceTree = ""; }; - C1EA621B1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA621C1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA621D1680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA621E1680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA62201680FE1300A21259 /* argument.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = argument.js; sourceTree = ""; }; - C1EA62211680FE1300A21259 /* operand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = operand.js; sourceTree = ""; }; - C1EA62221680FE1300A21259 /* option.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = option.js; sourceTree = ""; }; - C1EA62231680FE1300A21259 /* parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.js; sourceTree = ""; }; - C1EA62241680FE1300A21259 /* posix-argv-parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "posix-argv-parser.js"; sourceTree = ""; }; - C1EA62251680FE1300A21259 /* shorthand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shorthand.js; sourceTree = ""; }; - C1EA62261680FE1300A21259 /* types.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = types.js; sourceTree = ""; }; - C1EA62271680FE1300A21259 /* validators.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = validators.js; sourceTree = ""; }; - C1EA62281680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA62291680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA622A1680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA622C1680FE1300A21259 /* operand-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "operand-test.js"; sourceTree = ""; }; - C1EA622D1680FE1300A21259 /* option-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "option-test.js"; sourceTree = ""; }; - C1EA622E1680FE1300A21259 /* parser-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "parser-test.js"; sourceTree = ""; }; - C1EA622F1680FE1300A21259 /* posix-argv-parser-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "posix-argv-parser-test.js"; sourceTree = ""; }; - C1EA62301680FE1300A21259 /* shorthand-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "shorthand-test.js"; sourceTree = ""; }; - C1EA62311680FE1300A21259 /* types-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "types-test.js"; sourceTree = ""; }; - C1EA62321680FE1300A21259 /* validators-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "validators-test.js"; sourceTree = ""; }; - C1EA62341680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA62351680FE1300A21259 /* fiber.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fiber.js; sourceTree = ""; }; - C1EA62361680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA62371680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA62381680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62391680FE1300A21259 /* rimraf.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rimraf.js; sourceTree = ""; }; - C1EA623B1680FE1300A21259 /* run.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = run.sh; sourceTree = ""; }; - C1EA623C1680FE1300A21259 /* setup.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = setup.sh; sourceTree = ""; }; - C1EA623D1680FE1300A21259 /* test-async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-async.js"; sourceTree = ""; }; - C1EA623E1680FE1300A21259 /* test-fiber.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-fiber.js"; sourceTree = ""; }; - C1EA623F1680FE1300A21259 /* test-sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-sync.js"; sourceTree = ""; }; - C1EA62411680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA62421680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA62431680FE1300A21259 /* autolint.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = autolint.json; sourceTree = ""; }; - C1EA62441680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA62461680FE1300A21259 /* stream-logger.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "stream-logger.js"; sourceTree = ""; }; - C1EA62471680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA62481680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA62491680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA624B1680FE1300A21259 /* stream-logger-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "stream-logger-test.js"; sourceTree = ""; }; - C1EA624C1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA624D1680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA624E1680FE1300A21259 /* run-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "run-tests"; sourceTree = ""; }; - C1EA62501680FE1300A21259 /* buster-cli-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-cli-test.js"; sourceTree = ""; }; - C1EA62511680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA62531680FE1300A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA62541680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA62551680FE1300A21259 /* benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = benchmark.js; sourceTree = ""; }; - C1EA62561680FE1300A21259 /* ejs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ejs.js; sourceTree = ""; }; - C1EA62571680FE1300A21259 /* ejs.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ejs.min.js; sourceTree = ""; }; - C1EA62591680FE1300A21259 /* client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = client.html; sourceTree = ""; }; - C1EA625A1680FE1300A21259 /* list.ejs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = list.ejs; sourceTree = ""; }; - C1EA625B1680FE1300A21259 /* list.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = list.js; sourceTree = ""; }; - C1EA625C1680FE1300A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA625D1680FE1300A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA625F1680FE1300A21259 /* ejs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ejs.js; sourceTree = ""; }; - C1EA62601680FE1300A21259 /* filters.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = filters.js; sourceTree = ""; }; - C1EA62611680FE1300A21259 /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; - C1EA62621680FE1300A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA62631680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA62641680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA62661680FE1300A21259 /* compile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compile.js; sourceTree = ""; }; - C1EA62681680FE1300A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA62691680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA626B1680FE1300A21259 /* expresso */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = expresso; sourceTree = ""; }; - C1EA626D1680FE1300A21259 /* api.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = api.html; sourceTree = ""; }; - C1EA626E1680FE1300A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA626F1680FE1300A21259 /* index.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = index.md; sourceTree = ""; }; - C1EA62711680FE1300A21259 /* foot.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = foot.html; sourceTree = ""; }; - C1EA62721680FE1300A21259 /* head.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = head.html; sourceTree = ""; }; - C1EA62731680FE1300A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA62751680FE1300A21259 /* bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.js; sourceTree = ""; }; - C1EA62761680FE1300A21259 /* foo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.js; sourceTree = ""; }; - C1EA62771680FE1300A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA62781680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA62791680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA627B1680FE1300A21259 /* assert.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assert.test.js; sourceTree = ""; }; - C1EA627C1680FE1300A21259 /* async.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = async.test.js; sourceTree = ""; }; - C1EA627D1680FE1300A21259 /* bar.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.test.js; sourceTree = ""; }; - C1EA627E1680FE1300A21259 /* foo.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.test.js; sourceTree = ""; }; - C1EA627F1680FE1300A21259 /* http.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = http.test.js; sourceTree = ""; }; - C1EA62811680FE1300A21259 /* ejs.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ejs.test.js; sourceTree = ""; }; - C1EA62841680FE1300A21259 /* minify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minify.js; sourceTree = ""; }; - C1EA62851680FE1300A21259 /* post-compile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "post-compile.js"; sourceTree = ""; }; - C1EA62861680FE1300A21259 /* pre-compile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pre-compile.js"; sourceTree = ""; }; - C1EA62871680FE1300A21259 /* build.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = build.js; sourceTree = ""; }; - C1EA62891680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA628A1680FE1300A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA628B1680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA628C1680FE1300A21259 /* lodash.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lodash.js; sourceTree = ""; }; - C1EA628D1680FE1300A21259 /* lodash.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lodash.min.js; sourceTree = ""; }; - C1EA628E1680FE1300A21259 /* lodash.underscore.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lodash.underscore.min.js; sourceTree = ""; }; - C1EA628F1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA62911680FE1300A21259 /* perf.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = perf.js; sourceTree = ""; }; - C1EA62921680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62951680FE1300A21259 /* a.jst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = a.jst; sourceTree = ""; }; - C1EA62961680FE1300A21259 /* b.jst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = b.jst; sourceTree = ""; }; - C1EA62971680FE1300A21259 /* c.tpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = c.tpl; sourceTree = ""; }; - C1EA62981680FE1300A21259 /* test-build.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-build.js"; sourceTree = ""; }; - C1EA62991680FE1300A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA629C1680FE1300A21259 /* benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = benchmark.js; sourceTree = ""; }; - C1EA629D1680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA629E1680FE1300A21259 /* nano.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = nano.jar; sourceTree = ""; }; - C1EA629F1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62A11680FE1300A21259 /* compiler.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = compiler.jar; sourceTree = ""; }; - C1EA62A21680FE1300A21259 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; - C1EA62A31680FE1300A21259 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; - C1EA62A51680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA62A61680FE1300A21259 /* platform.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = platform.js; sourceTree = ""; }; - C1EA62A71680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62AA1680FE1300A21259 /* qunit-1.8.0.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "qunit-1.8.0.js"; sourceTree = ""; }; - C1EA62AB1680FE1300A21259 /* qunit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = qunit.js; sourceTree = ""; }; - C1EA62AC1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62AE1680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA62AF1680FE1300A21259 /* qunit-clib.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "qunit-clib.js"; sourceTree = ""; }; - C1EA62B01680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62B31680FE1300A21259 /* consolidator.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = consolidator.js; sourceTree = ""; }; - C1EA62B41680FE1300A21259 /* parse-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "parse-js.js"; sourceTree = ""; }; - C1EA62B51680FE1300A21259 /* process.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = process.js; sourceTree = ""; }; - C1EA62B61680FE1300A21259 /* squeeze-more.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "squeeze-more.js"; sourceTree = ""; }; - C1EA62B71680FE1300A21259 /* README.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.org; sourceTree = ""; }; - C1EA62B81680FE1300A21259 /* uglify-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "uglify-js.js"; sourceTree = ""; }; - C1EA62BA1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA62BB1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62BC1680FE1300A21259 /* underscore-min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "underscore-min.js"; sourceTree = ""; }; - C1EA62BD1680FE1300A21259 /* underscore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = underscore.js; sourceTree = ""; }; - C1EA62C01680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62C11680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA62C21680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA62C31680FE1300A21259 /* platform.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = platform.js; sourceTree = ""; }; - C1EA62C41680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA62C61680FE1300A21259 /* run-test.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "run-test.sh"; sourceTree = ""; }; - C1EA62C71680FE1300A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA62C91680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA62CA1680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA62CC1680FE1300A21259 /* http-server-request-listener-proxy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-server-request-listener-proxy.js"; sourceTree = ""; }; - C1EA62CD1680FE1300A21259 /* prison-init.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "prison-init.js"; sourceTree = ""; }; - C1EA62CE1680FE1300A21259 /* prison-session-initializer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "prison-session-initializer.js"; sourceTree = ""; }; - C1EA62CF1680FE1300A21259 /* prison-util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "prison-util.js"; sourceTree = ""; }; - C1EA62D01680FE1300A21259 /* prison.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = prison.js; sourceTree = ""; }; - C1EA62D11680FE1300A21259 /* pubsub-client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pubsub-client.js"; sourceTree = ""; }; - C1EA62D21680FE1300A21259 /* pubsub-server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pubsub-server.js"; sourceTree = ""; }; - C1EA62D31680FE1300A21259 /* ramp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ramp.js; sourceTree = ""; }; - C1EA62D41680FE1300A21259 /* server-client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "server-client.js"; sourceTree = ""; }; - C1EA62D51680FE1300A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA62D61680FE1300A21259 /* session-client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "session-client.js"; sourceTree = ""; }; - C1EA62D71680FE1300A21259 /* session-queue.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "session-queue.js"; sourceTree = ""; }; - C1EA62D81680FE1300A21259 /* session.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = session.js; sourceTree = ""; }; - C1EA62D91680FE1300A21259 /* slave.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = slave.js; sourceTree = ""; }; - C1EA62DB1680FE1300A21259 /* slave_prison.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = slave_prison.html; sourceTree = ""; }; - C1EA62DC1680FE1300A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA62DF1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA62E01680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA62E11680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA62E21680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA62E41680FE1300A21259 /* bane.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bane.js; sourceTree = ""; }; - C1EA62E51680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA62E61680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA62E71680FE1300A21259 /* Readme.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.rst; sourceTree = ""; }; - C1EA62E91680FE1300A21259 /* bane-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bane-test.js"; sourceTree = ""; }; - C1EA62EA1680FE1300A21259 /* todo.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = todo.org; sourceTree = ""; }; - C1EA62ED1680FE1300A21259 /* faye-browser-min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "faye-browser-min.js"; sourceTree = ""; }; - C1EA62EE1680FE1300A21259 /* faye-browser-min.js.map */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "faye-browser-min.js.map"; sourceTree = ""; }; - C1EA62EF1680FE1300A21259 /* faye-browser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "faye-browser.js"; sourceTree = ""; }; - C1EA62F01680FE1300A21259 /* History.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.txt; sourceTree = ""; }; - C1EA62F21680FE1300A21259 /* faye-node.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "faye-node.js"; sourceTree = ""; }; - C1EA62F51680FE1300A21259 /* cookiejar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cookiejar.js; sourceTree = ""; }; - C1EA62F61680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA62F71680FE1300A21259 /* readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.md; sourceTree = ""; }; - C1EA62F91680FE1300A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA62FB1680FE1300A21259 /* CHANGELOG.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGELOG.txt; sourceTree = ""; }; - C1EA62FD1680FE1300A21259 /* autobahn_client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autobahn_client.js; sourceTree = ""; }; - C1EA62FE1680FE1300A21259 /* client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client.js; sourceTree = ""; }; - C1EA62FF1680FE1300A21259 /* haproxy.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = haproxy.conf; sourceTree = ""; }; - C1EA63001680FE1300A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA63011680FE1300A21259 /* sse.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = sse.html; sourceTree = ""; }; - C1EA63021680FE1300A21259 /* ws.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ws.html; sourceTree = ""; }; - C1EA63051680FE1300A21259 /* eventsource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = eventsource.js; sourceTree = ""; }; - C1EA63081680FE1300A21259 /* event.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event.js; sourceTree = ""; }; - C1EA63091680FE1300A21259 /* event_target.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event_target.js; sourceTree = ""; }; - C1EA630A1680FE1300A21259 /* api.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = api.js; sourceTree = ""; }; - C1EA630B1680FE1300A21259 /* client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client.js; sourceTree = ""; }; - C1EA630C1680FE1300A21259 /* draft75_parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = draft75_parser.js; sourceTree = ""; }; - C1EA630D1680FE1300A21259 /* draft76_parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = draft76_parser.js; sourceTree = ""; }; - C1EA630F1680FE1300A21259 /* handshake.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = handshake.js; sourceTree = ""; }; - C1EA63101680FE1300A21259 /* stream_reader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stream_reader.js; sourceTree = ""; }; - C1EA63111680FE1300A21259 /* hybi_parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hybi_parser.js; sourceTree = ""; }; - C1EA63121680FE1300A21259 /* websocket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = websocket.js; sourceTree = ""; }; - C1EA63131680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63141680FE1300A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA63181680FE1300A21259 /* client_spec.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = client_spec.js; sourceTree = ""; }; - C1EA63191680FE1300A21259 /* draft75parser_spec.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = draft75parser_spec.js; sourceTree = ""; }; - C1EA631A1680FE1300A21259 /* draft76parser_spec.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = draft76parser_spec.js; sourceTree = ""; }; - C1EA631B1680FE1300A21259 /* hybi_parser_spec.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hybi_parser_spec.js; sourceTree = ""; }; - C1EA631C1680FE1300A21259 /* runner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runner.js; sourceTree = ""; }; - C1EA631D1680FE1300A21259 /* server.crt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.crt; sourceTree = ""; }; - C1EA631E1680FE1300A21259 /* server.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.key; sourceTree = ""; }; - C1EA631F1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63201680FE1300A21259 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - C1EA63221680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA63241680FE1300A21259 /* bench.gnu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bench.gnu; sourceTree = ""; }; - C1EA63251680FE1300A21259 /* bench.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = bench.sh; sourceTree = ""; }; - C1EA63261680FE1300A21259 /* benchmark-native.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "benchmark-native.c"; sourceTree = ""; }; - C1EA63271680FE1300A21259 /* benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = benchmark.js; sourceTree = ""; }; - C1EA63281680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63291680FE1300A21259 /* LICENSE.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.md; sourceTree = ""; }; - C1EA632A1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA632B1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA632D1680FE1300A21259 /* compare_v1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compare_v1.js; sourceTree = ""; }; - C1EA632E1680FE1300A21259 /* test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = test.html; sourceTree = ""; }; - C1EA632F1680FE1300A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA63301680FE1300A21259 /* uuid.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = uuid.js; sourceTree = ""; }; - C1EA63321680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA63331680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA63341680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA63351680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA63361680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA63391680FE1300A21259 /* alternatives.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = alternatives.json; sourceTree = ""; }; - C1EA633B1680FE1300A21259 /* 1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = 1.png; sourceTree = ""; }; - C1EA633C1680FE1300A21259 /* 2.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = 2.html; sourceTree = ""; }; - C1EA633D1680FE1300A21259 /* 3.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = 3.txt; sourceTree = ""; }; - C1EA633E1680FE1300A21259 /* 4.tgz */ = {isa = PBXFileReference; lastKnownFileType = file; path = 4.tgz; sourceTree = ""; }; - C1EA633F1680FE1300A21259 /* medium.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = medium.json; sourceTree = ""; }; - C1EA63401680FE1300A21259 /* publish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = publish.js; sourceTree = ""; }; - C1EA63411680FE1300A21259 /* README.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.rst; sourceTree = ""; }; - C1EA63421680FE1300A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA63431680FE1300A21259 /* small.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = small.json; sourceTree = ""; }; - C1EA63451680FE1300A21259 /* file-etag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "file-etag.js"; sourceTree = ""; }; - C1EA63461680FE1300A21259 /* http-proxy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-proxy.js"; sourceTree = ""; }; - C1EA63471680FE1300A21259 /* invalid-error.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "invalid-error.js"; sourceTree = ""; }; - C1EA63481680FE1300A21259 /* load-path.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "load-path.js"; sourceTree = ""; }; - C1EA634A1680FE1300A21259 /* iife.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = iife.js; sourceTree = ""; }; - C1EA634B1680FE1300A21259 /* ramp-resources.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ramp-resources.js"; sourceTree = ""; }; - C1EA634C1680FE1300A21259 /* resource-combiner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-combiner.js"; sourceTree = ""; }; - C1EA634D1680FE1300A21259 /* resource-file-resolver.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-file-resolver.js"; sourceTree = ""; }; - C1EA634E1680FE1300A21259 /* resource-middleware.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-middleware.js"; sourceTree = ""; }; - C1EA634F1680FE1300A21259 /* resource-set-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-cache.js"; sourceTree = ""; }; - C1EA63501680FE1300A21259 /* resource-set.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set.js"; sourceTree = ""; }; - C1EA63511680FE1300A21259 /* resource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resource.js; sourceTree = ""; }; - C1EA63521680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA63551680FE1300A21259 /* lodash */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = lodash; sourceTree = ""; }; - C1EA63581680FE1300A21259 /* minify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minify.js; sourceTree = ""; }; - C1EA63591680FE1300A21259 /* post-compile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "post-compile.js"; sourceTree = ""; }; - C1EA635A1680FE1300A21259 /* pre-compile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pre-compile.js"; sourceTree = ""; }; - C1EA635B1680FE1300A21259 /* build.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = build.js; sourceTree = ""; }; - C1EA635D1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA635E1680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA635F1680FE1300A21259 /* lodash.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lodash.js; sourceTree = ""; }; - C1EA63601680FE1300A21259 /* lodash.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lodash.min.js; sourceTree = ""; }; - C1EA63611680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63631680FE1300A21259 /* perf.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = perf.js; sourceTree = ""; }; - C1EA63641680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63661680FE1300A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA63691680FE1300A21259 /* benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = benchmark.js; sourceTree = ""; }; - C1EA636A1680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA636B1680FE1300A21259 /* nano.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = nano.jar; sourceTree = ""; }; - C1EA636C1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA636E1680FE1300A21259 /* compiler.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = compiler.jar; sourceTree = ""; }; - C1EA636F1680FE1300A21259 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; - C1EA63701680FE1300A21259 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; - C1EA63721680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA63731680FE1300A21259 /* platform.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = platform.js; sourceTree = ""; }; - C1EA63741680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63771680FE1300A21259 /* qunit-1.8.0.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "qunit-1.8.0.js"; sourceTree = ""; }; - C1EA63781680FE1300A21259 /* qunit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = qunit.js; sourceTree = ""; }; - C1EA63791680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA637B1680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA637C1680FE1300A21259 /* qunit-clib.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "qunit-clib.js"; sourceTree = ""; }; - C1EA637D1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63801680FE1300A21259 /* consolidator.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = consolidator.js; sourceTree = ""; }; - C1EA63811680FE1300A21259 /* parse-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "parse-js.js"; sourceTree = ""; }; - C1EA63821680FE1300A21259 /* process.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = process.js; sourceTree = ""; }; - C1EA63831680FE1300A21259 /* squeeze-more.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "squeeze-more.js"; sourceTree = ""; }; - C1EA63841680FE1300A21259 /* README.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.org; sourceTree = ""; }; - C1EA63851680FE1300A21259 /* uglify-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "uglify-js.js"; sourceTree = ""; }; - C1EA63871680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA63881680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63891680FE1300A21259 /* underscore-min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "underscore-min.js"; sourceTree = ""; }; - C1EA638A1680FE1300A21259 /* underscore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = underscore.js; sourceTree = ""; }; - C1EA638C1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA638D1680FE1300A21259 /* mime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mime.js; sourceTree = ""; }; - C1EA638E1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA638F1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63901680FE1300A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA63921680FE1300A21259 /* mime.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mime.types; sourceTree = ""; }; - C1EA63931680FE1300A21259 /* node.types */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = node.types; sourceTree = ""; }; - C1EA63951680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA63961680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA63971680FE1300A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA639A1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA639C1680FE1300A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA639D1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA639E1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA639F1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63A11680FE1300A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA63A21680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63A31680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63A51680FE1300A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA63A61680FE1300A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA63A71680FE1300A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA63A91680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA63AA1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA63AB1680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA63AC1680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA63AD1680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA63AF1680FE1300A21259 /* multi-glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "multi-glob.js"; sourceTree = ""; }; - C1EA63B01680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA63B31680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA63B41680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA63B61680FE1300A21259 /* g.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = g.js; sourceTree = ""; }; - C1EA63B71680FE1300A21259 /* usr-local.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "usr-local.js"; sourceTree = ""; }; - C1EA63B81680FE1300A21259 /* glob.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = glob.js; sourceTree = ""; }; - C1EA63B91680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA63BC1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA63BD1680FE1300A21259 /* graceful-fs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "graceful-fs.js"; sourceTree = ""; }; - C1EA63BE1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA63BF1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63C01680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63C21680FE1300A21259 /* open.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = open.js; sourceTree = ""; }; - C1EA63C41680FE1300A21259 /* inherits.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inherits.js; sourceTree = ""; }; - C1EA63C51680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63C61680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63C81680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA63C91680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA63CA1680FE1300A21259 /* minimatch.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = minimatch.js; sourceTree = ""; }; - C1EA63CD1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA63CE1680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA63D01680FE1300A21259 /* lru-cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lru-cache.js"; sourceTree = ""; }; - C1EA63D11680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA63D21680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63D31680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63D51680FE1300A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA63D71680FE1300A21259 /* bench.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bench.js; sourceTree = ""; }; - C1EA63D81680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA63D91680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63DA1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63DB1680FE1300A21259 /* sigmund.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sigmund.js; sourceTree = ""; }; - C1EA63DD1680FE1300A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA63DE1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63DF1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63E11680FE1300A21259 /* basic.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = basic.js; sourceTree = ""; }; - C1EA63E21680FE1300A21259 /* brace-expand.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "brace-expand.js"; sourceTree = ""; }; - C1EA63E31680FE1300A21259 /* caching.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = caching.js; sourceTree = ""; }; - C1EA63E41680FE1300A21259 /* defaults.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = defaults.js; sourceTree = ""; }; - C1EA63E51680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63E61680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA63E81680FE1300A21259 /* 00-setup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "00-setup.js"; sourceTree = ""; }; - C1EA63E91680FE1300A21259 /* bash-comparison.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "bash-comparison.js"; sourceTree = ""; }; - C1EA63EA1680FE1300A21259 /* cwd-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "cwd-test.js"; sourceTree = ""; }; - C1EA63EB1680FE1300A21259 /* mark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mark.js; sourceTree = ""; }; - C1EA63EC1680FE1300A21259 /* pause-resume.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "pause-resume.js"; sourceTree = ""; }; - C1EA63ED1680FE1300A21259 /* root-nomount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "root-nomount.js"; sourceTree = ""; }; - C1EA63EE1680FE1300A21259 /* root.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = root.js; sourceTree = ""; }; - C1EA63EF1680FE1300A21259 /* zz-cleanup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "zz-cleanup.js"; sourceTree = ""; }; - C1EA63F01680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63F11680FE1300A21259 /* Readme.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.rst; sourceTree = ""; }; - C1EA63F31680FE1300A21259 /* multi-glob-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "multi-glob-test.js"; sourceTree = ""; }; - C1EA63F41680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA63F51680FE1300A21259 /* Readme.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.rst; sourceTree = ""; }; - C1EA63F81680FE1300A21259 /* bar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bar.js; sourceTree = ""; }; - C1EA63F91680FE1300A21259 /* foo.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = foo.js; sourceTree = ""; }; - C1EA63FB1680FE1300A21259 /* other.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = other.js; sourceTree = ""; }; - C1EA63FC1680FE1300A21259 /* some-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "some-test.js"; sourceTree = ""; }; - C1EA63FE1680FE1300A21259 /* my-testish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "my-testish.js"; sourceTree = ""; }; - C1EA63FF1680FE1300A21259 /* http-proxy-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "http-proxy-test.js"; sourceTree = ""; }; - C1EA64001680FE1300A21259 /* load-path-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "load-path-test.js"; sourceTree = ""; }; - C1EA64021680FE1300A21259 /* iife-processor-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "iife-processor-test.js"; sourceTree = ""; }; - C1EA64031680FE1300A21259 /* resource-middleware-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-middleware-test.js"; sourceTree = ""; }; - C1EA64041680FE1300A21259 /* resource-set-cache-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-cache-test.js"; sourceTree = ""; }; - C1EA64051680FE1300A21259 /* resource-set-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-set-test.js"; sourceTree = ""; }; - C1EA64061680FE1300A21259 /* resource-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "resource-test.js"; sourceTree = ""; }; - C1EA64071680FE1300A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA64081680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA64091680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA640A1680FE1300A21259 /* run-tests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "run-tests.js"; sourceTree = ""; }; - C1EA640C1680FE1300A21259 /* cache-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "cache-test.js"; sourceTree = ""; }; - C1EA640D1680FE1300A21259 /* events-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "events-test.js"; sourceTree = ""; }; - C1EA640F1680FE1300A21259 /* phantom-factory.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "phantom-factory.js"; sourceTree = ""; }; - C1EA64101680FE1300A21259 /* phantom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = phantom.js; sourceTree = ""; }; - C1EA64111680FE1300A21259 /* server-loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "server-loader.js"; sourceTree = ""; }; - C1EA64121680FE1300A21259 /* test-helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper.js"; sourceTree = ""; }; - C1EA64131680FE1300A21259 /* joinable-and-unjoinable-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "joinable-and-unjoinable-test.js"; sourceTree = ""; }; - C1EA64141680FE1300A21259 /* main-test-session-client.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "main-test-session-client.js"; sourceTree = ""; }; - C1EA64151680FE1300A21259 /* main-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "main-test.js"; sourceTree = ""; }; - C1EA64161680FE1300A21259 /* session-lifecycle-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "session-lifecycle-test.js"; sourceTree = ""; }; - C1EA64171680FE1300A21259 /* slave-header-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "slave-header-test.js"; sourceTree = ""; }; - C1EA64181680FE1300A21259 /* test-helper-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-helper-test.js"; sourceTree = ""; }; - C1EA641B1680FE1300A21259 /* cycle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cycle.js; sourceTree = ""; }; - C1EA641C1680FE1300A21259 /* json.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json.js; sourceTree = ""; }; - C1EA641D1680FE1300A21259 /* json2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json2.js; sourceTree = ""; }; - C1EA641E1680FE1300A21259 /* json_parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json_parse.js; sourceTree = ""; }; - C1EA641F1680FE1300A21259 /* json_parse_state.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json_parse_state.js; sourceTree = ""; }; - C1EA64201680FE1300A21259 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; - C1EA64221680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA64231680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA64241680FE1300A21259 /* autolint.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autolint.js; sourceTree = ""; }; - C1EA64251680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA64271680FE1300A21259 /* stack-filter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "stack-filter.js"; sourceTree = ""; }; - C1EA64281680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA64291680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA642A1680FE1300A21259 /* Readme.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.rst; sourceTree = ""; }; - C1EA642C1680FE1300A21259 /* stack-filter-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "stack-filter-test.js"; sourceTree = ""; }; - C1EA642D1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA642E1680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA642F1680FE1300A21259 /* run-tests.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "run-tests.js"; sourceTree = ""; }; - C1EA64301680FE1300A21259 /* runners.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = runners.org; sourceTree = ""; }; - C1EA64321680FE1300A21259 /* progress-reporter-integration-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "progress-reporter-integration-test.js"; sourceTree = ""; }; - C1EA64331680FE1300A21259 /* run-analyzer-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "run-analyzer-test.js"; sourceTree = ""; }; - C1EA64361680FE1300A21259 /* progress-reporter-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "progress-reporter-test.js"; sourceTree = ""; }; - C1EA64371680FE1300A21259 /* remote-runner-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "remote-runner-test.js"; sourceTree = ""; }; - C1EA64381680FE1300A21259 /* browser-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "browser-test.js"; sourceTree = ""; }; - C1EA64391680FE1300A21259 /* node-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "node-test.js"; sourceTree = ""; }; - C1EA643A1680FE1300A21259 /* test-cli-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-cli-test.js"; sourceTree = ""; }; - C1EA643C1680FE1300A21259 /* help-reporters.ejs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "help-reporters.ejs"; sourceTree = ""; }; - C1EA643E1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA643F1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA64401680FE1300A21259 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - C1EA64411680FE1300A21259 /* build */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = build; sourceTree = ""; }; - C1EA64421680FE1300A21259 /* Changelog.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Changelog.txt; sourceTree = ""; }; - C1EA64431680FE1300A21259 /* GPATH */ = {isa = PBXFileReference; lastKnownFileType = file; path = GPATH; sourceTree = ""; }; - C1EA64441680FE1300A21259 /* GRTAGS */ = {isa = PBXFileReference; lastKnownFileType = file; path = GRTAGS; sourceTree = ""; }; - C1EA64451680FE1300A21259 /* GSYMS */ = {isa = PBXFileReference; lastKnownFileType = file; path = GSYMS; sourceTree = ""; }; - C1EA64461680FE1300A21259 /* GTAGS */ = {isa = PBXFileReference; lastKnownFileType = file; path = GTAGS; sourceTree = ""; }; - C1EA64471680FE1300A21259 /* jsl.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsl.conf; sourceTree = ""; }; - C1EA644A1680FE1300A21259 /* assert.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assert.js; sourceTree = ""; }; - C1EA644B1680FE1300A21259 /* collection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = collection.js; sourceTree = ""; }; - C1EA644C1680FE1300A21259 /* match.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = match.js; sourceTree = ""; }; - C1EA644D1680FE1300A21259 /* mock.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mock.js; sourceTree = ""; }; - C1EA644E1680FE1300A21259 /* sandbox.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sandbox.js; sourceTree = ""; }; - C1EA644F1680FE1300A21259 /* spy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = spy.js; sourceTree = ""; }; - C1EA64501680FE1300A21259 /* stub.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stub.js; sourceTree = ""; }; - C1EA64511680FE1300A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA64521680FE1300A21259 /* test_case.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test_case.js; sourceTree = ""; }; - C1EA64541680FE1300A21259 /* event.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event.js; sourceTree = ""; }; - C1EA64551680FE1300A21259 /* fake_server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_server.js; sourceTree = ""; }; - C1EA64561680FE1300A21259 /* fake_server_with_clock.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_server_with_clock.js; sourceTree = ""; }; - C1EA64571680FE1300A21259 /* fake_timers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_timers.js; sourceTree = ""; }; - C1EA64581680FE1300A21259 /* fake_xml_http_request.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_xml_http_request.js; sourceTree = ""; }; - C1EA64591680FE1300A21259 /* timers_ie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = timers_ie.js; sourceTree = ""; }; - C1EA645A1680FE1300A21259 /* xhr_ie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = xhr_ie.js; sourceTree = ""; }; - C1EA645B1680FE1300A21259 /* sinon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sinon.js; sourceTree = ""; }; - C1EA645C1680FE1300A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA645D1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA645E1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA645F1680FE1300A21259 /* release.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = release.sh; sourceTree = ""; }; - C1EA64621680FE1300A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA64641680FE1300A21259 /* xhr_target.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = xhr_target.txt; sourceTree = ""; }; - C1EA64661680FE1300A21259 /* env.rhino.1.2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = env.rhino.1.2.js; sourceTree = ""; }; - C1EA64671680FE1300A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA64681680FE1300A21259 /* runner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runner.js; sourceTree = ""; }; - C1EA646A1680FE1300A21259 /* assert_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assert_test.js; sourceTree = ""; }; - C1EA646B1680FE1300A21259 /* collection_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = collection_test.js; sourceTree = ""; }; - C1EA646C1680FE1300A21259 /* match_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = match_test.js; sourceTree = ""; }; - C1EA646D1680FE1300A21259 /* mock_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mock_test.js; sourceTree = ""; }; - C1EA646E1680FE1300A21259 /* sandbox_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sandbox_test.js; sourceTree = ""; }; - C1EA646F1680FE1300A21259 /* spy_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = spy_test.js; sourceTree = ""; }; - C1EA64701680FE1300A21259 /* stub_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = stub_test.js; sourceTree = ""; }; - C1EA64711680FE1300A21259 /* test_case_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test_case_test.js; sourceTree = ""; }; - C1EA64721680FE1300A21259 /* test_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test_test.js; sourceTree = ""; }; - C1EA64741680FE1300A21259 /* event_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event_test.js; sourceTree = ""; }; - C1EA64751680FE1300A21259 /* fake_server_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_server_test.js; sourceTree = ""; }; - C1EA64761680FE1300A21259 /* fake_server_with_clock_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_server_with_clock_test.js; sourceTree = ""; }; - C1EA64771680FE1300A21259 /* fake_timers_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_timers_test.js; sourceTree = ""; }; - C1EA64781680FE1300A21259 /* fake_xml_http_request_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fake_xml_http_request_test.js; sourceTree = ""; }; - C1EA64791680FE1300A21259 /* sinon-dist.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "sinon-dist.html"; sourceTree = ""; }; - C1EA647A1680FE1300A21259 /* sinon.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = sinon.html; sourceTree = ""; }; - C1EA647B1680FE1300A21259 /* sinon_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sinon_test.js; sourceTree = ""; }; - C1EA647D1680FE1300A21259 /* .gitmodules */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitmodules; sourceTree = ""; }; - C1EA647E1680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA647F1680FE1300A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA64801680FE1300A21259 /* apply.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = apply.js; sourceTree = ""; }; - C1EA64811680FE1300A21259 /* cancelable.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cancelable.js; sourceTree = ""; }; - C1EA64821680FE1300A21259 /* debug.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = debug.js; sourceTree = ""; }; - C1EA64831680FE1300A21259 /* delay.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = delay.js; sourceTree = ""; }; - C1EA64841680FE1300A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA64851680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA64861680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA64881680FE1300A21259 /* all.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = all.js; sourceTree = ""; }; - C1EA64891680FE1300A21259 /* any.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = any.js; sourceTree = ""; }; - C1EA648A1680FE1300A21259 /* apply.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = apply.js; sourceTree = ""; }; - C1EA648B1680FE1300A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA648C1680FE1300A21259 /* cancelable.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cancelable.js; sourceTree = ""; }; - C1EA648D1680FE1300A21259 /* chain.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = chain.js; sourceTree = ""; }; - C1EA648E1680FE1300A21259 /* defer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = defer.js; sourceTree = ""; }; - C1EA648F1680FE1300A21259 /* delay.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = delay.js; sourceTree = ""; }; - C1EA64901680FE1300A21259 /* isPromise.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = isPromise.js; sourceTree = ""; }; - C1EA64911680FE1300A21259 /* map.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = map.js; sourceTree = ""; }; - C1EA64921680FE1300A21259 /* promise.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = promise.js; sourceTree = ""; }; - C1EA64931680FE1300A21259 /* reduce.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = reduce.js; sourceTree = ""; }; - C1EA64941680FE1300A21259 /* reject.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = reject.js; sourceTree = ""; }; - C1EA64951680FE1300A21259 /* some.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = some.js; sourceTree = ""; }; - C1EA64961680FE1300A21259 /* timeout.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = timeout.js; sourceTree = ""; }; - C1EA64971680FE1300A21259 /* when.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = when.js; sourceTree = ""; }; - C1EA64981680FE1300A21259 /* timed.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = timed.js; sourceTree = ""; }; - C1EA64991680FE1300A21259 /* timeout.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = timeout.js; sourceTree = ""; }; - C1EA649A1680FE1300A21259 /* when.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = when.js; sourceTree = ""; }; - C1EA649B1680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA649C1680FE1300A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA649E1680FE1300A21259 /* buster-test.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "buster-test.css"; sourceTree = ""; }; - C1EA649F1680FE1300A21259 /* run-tests */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "run-tests"; sourceTree = ""; }; - C1EA64A11680FE1300A21259 /* phantom.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = phantom.js; sourceTree = ""; }; - C1EA64A41680FE1300A21259 /* browser-wiring-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "browser-wiring-test.js"; sourceTree = ""; }; - C1EA64A51680FE1300A21259 /* buster-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "buster-test.js"; sourceTree = ""; }; - C1EA64A71680FE1300A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA64A81680FE1300A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA64A91680FE1300A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA64AA1680FE1300A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA64AC1680FE1400A21259 /* .gitattributes */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitattributes; sourceTree = ""; }; - C1EA64AD1680FE1400A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA64AE1680FE1400A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA64B01680FE1400A21259 /* getPublicPrefix.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = getPublicPrefix.js; sourceTree = ""; }; - C1EA64B21680FE1400A21259 /* webpack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webpack.js; sourceTree = ""; }; - C1EA64B31680FE1400A21259 /* bm.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bm.js; sourceTree = ""; }; - C1EA64B51680FE1400A21259 /* __webpack_amd_define.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = __webpack_amd_define.js; sourceTree = ""; }; - C1EA64B61680FE1400A21259 /* __webpack_amd_require.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = __webpack_amd_require.js; sourceTree = ""; }; - C1EA64B71680FE1400A21259 /* __webpack_console.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = __webpack_console.js; sourceTree = ""; }; - C1EA64B81680FE1400A21259 /* __webpack_dirname.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = __webpack_dirname.js; sourceTree = ""; }; - C1EA64B91680FE1400A21259 /* __webpack_filename.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = __webpack_filename.js; sourceTree = ""; }; - C1EA64BA1680FE1400A21259 /* __webpack_global.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = __webpack_global.js; sourceTree = ""; }; - C1EA64BB1680FE1400A21259 /* __webpack_module.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = __webpack_module.js; sourceTree = ""; }; - C1EA64BC1680FE1400A21259 /* __webpack_options_amd.loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = __webpack_options_amd.loader.js; sourceTree = ""; }; - C1EA64BD1680FE1400A21259 /* __webpack_process.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = __webpack_process.js; sourceTree = ""; }; - C1EA64BF1680FE1400A21259 /* assert.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assert.js; sourceTree = ""; }; - C1EA64C01680FE1400A21259 /* buffer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buffer.js; sourceTree = ""; }; - C1EA64C11680FE1400A21259 /* child_process.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = child_process.js; sourceTree = ""; }; - C1EA64C21680FE1400A21259 /* events.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = events.js; sourceTree = ""; }; - C1EA64C31680FE1400A21259 /* path.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = path.js; sourceTree = ""; }; - C1EA64C41680FE1400A21259 /* punycode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = punycode.js; sourceTree = ""; }; - C1EA64C51680FE1400A21259 /* querystring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = querystring.js; sourceTree = ""; }; - C1EA64C61680FE1400A21259 /* url.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = url.js; sourceTree = ""; }; - C1EA64C71680FE1400A21259 /* util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.js; sourceTree = ""; }; - C1EA64C91680FE1400A21259 /* buildDeps.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buildDeps.js; sourceTree = ""; }; - C1EA64CA1680FE1400A21259 /* buildModule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buildModule.js; sourceTree = ""; }; - C1EA64CB1680FE1400A21259 /* Cache.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Cache.js; sourceTree = ""; }; - C1EA64CC1680FE1400A21259 /* createFilenameShortener.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = createFilenameShortener.js; sourceTree = ""; }; - C1EA64CD1680FE1400A21259 /* formatOutput.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = formatOutput.js; sourceTree = ""; }; - C1EA64CE1680FE1400A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA64CF1680FE1400A21259 /* webpack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = webpack.js; sourceTree = ""; }; - C1EA64D01680FE1400A21259 /* worker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = worker.js; sourceTree = ""; }; - C1EA64D11680FE1400A21259 /* Workers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Workers.js; sourceTree = ""; }; - C1EA64D21680FE1400A21259 /* writeChunk.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = writeChunk.js; sourceTree = ""; }; - C1EA64D31680FE1400A21259 /* writeSource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = writeSource.js; sourceTree = ""; }; - C1EA64D41680FE1400A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA64D71680FE1400A21259 /* esparse */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = esparse; sourceTree = ""; }; - C1EA64D81680FE1400A21259 /* uglifyjs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = uglifyjs; sourceTree = ""; }; - C1EA64DA1680FE1400A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA64DB1680FE1400A21259 /* lazy.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lazy.js; sourceTree = ""; }; - C1EA64DC1680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA64DD1680FE1400A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA64DF1680FE1400A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA64E01680FE1400A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA64E31680FE1400A21259 /* cake */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cake; sourceTree = ""; }; - C1EA64E41680FE1400A21259 /* coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = coffee; sourceTree = ""; }; - C1EA64E61680FE1400A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA64E81680FE1400A21259 /* cake */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cake; sourceTree = ""; }; - C1EA64E91680FE1400A21259 /* coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = coffee; sourceTree = ""; }; - C1EA64EA1680FE1400A21259 /* CNAME */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CNAME; sourceTree = ""; }; - C1EA64EB1680FE1400A21259 /* CONTRIBUTING.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CONTRIBUTING.md; sourceTree = ""; }; - C1EA64ED1680FE1400A21259 /* jsl.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsl.conf; sourceTree = ""; }; - C1EA64F01680FE1400A21259 /* browser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browser.js; sourceTree = ""; }; - C1EA64F11680FE1400A21259 /* cake.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cake.js; sourceTree = ""; }; - C1EA64F21680FE1400A21259 /* coffee-script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "coffee-script.js"; sourceTree = ""; }; - C1EA64F31680FE1400A21259 /* command.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = command.js; sourceTree = ""; }; - C1EA64F41680FE1400A21259 /* grammar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = grammar.js; sourceTree = ""; }; - C1EA64F51680FE1400A21259 /* helpers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = helpers.js; sourceTree = ""; }; - C1EA64F61680FE1400A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA64F71680FE1400A21259 /* lexer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lexer.js; sourceTree = ""; }; - C1EA64F81680FE1400A21259 /* nodes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nodes.js; sourceTree = ""; }; - C1EA64F91680FE1400A21259 /* optparse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = optparse.js; sourceTree = ""; }; - C1EA64FA1680FE1400A21259 /* parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.js; sourceTree = ""; }; - C1EA64FB1680FE1400A21259 /* repl.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = repl.js; sourceTree = ""; }; - C1EA64FC1680FE1400A21259 /* rewriter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rewriter.js; sourceTree = ""; }; - C1EA64FD1680FE1400A21259 /* scope.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = scope.js; sourceTree = ""; }; - C1EA64FE1680FE1400A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA64FF1680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA65001680FE1400A21259 /* Rakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Rakefile; sourceTree = ""; }; - C1EA65011680FE1400A21259 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; - C1EA65021680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA65031680FE1400A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA65051680FE1400A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA65061680FE1400A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA65091680FE1400A21259 /* csso */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = csso; sourceTree = ""; }; - C1EA650C1680FE1400A21259 /* csso */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = csso; sourceTree = ""; }; - C1EA650E1680FE1400A21259 /* compressflow.graphml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = compressflow.graphml; sourceTree = ""; }; - C1EA650F1680FE1400A21259 /* compressflow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = compressflow.png; sourceTree = ""; }; - C1EA65101680FE1400A21259 /* GNUmakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = GNUmakefile; sourceTree = ""; }; - C1EA65121680FE1400A21259 /* compressor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compressor.js; sourceTree = ""; }; - C1EA65131680FE1400A21259 /* csso.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = csso.js; sourceTree = ""; }; - C1EA65141680FE1400A21259 /* cssoapi.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cssoapi.js; sourceTree = ""; }; - C1EA65151680FE1400A21259 /* parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.js; sourceTree = ""; }; - C1EA65161680FE1400A21259 /* translator.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = translator.js; sourceTree = ""; }; - C1EA65171680FE1400A21259 /* util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.js; sourceTree = ""; }; - C1EA65181680FE1400A21259 /* MANUAL.en.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MANUAL.en.md; sourceTree = ""; }; - C1EA65191680FE1400A21259 /* MANUAL.ru.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MANUAL.ru.md; sourceTree = ""; }; - C1EA651A1680FE1400A21259 /* MIT-LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "MIT-LICENSE.txt"; sourceTree = ""; }; - C1EA651B1680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA651C1680FE1400A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA651D1680FE1400A21259 /* README.ru.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.ru.md; sourceTree = ""; }; - C1EA651F1680FE1400A21259 /* compressor.node.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compressor.node.js; sourceTree = ""; }; - C1EA65201680FE1400A21259 /* compressor.shared.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compressor.shared.js; sourceTree = ""; }; - C1EA65211680FE1400A21259 /* compressor.web.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compressor.web.js; sourceTree = ""; }; - C1EA65221680FE1400A21259 /* csso.other.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = csso.other.js; sourceTree = ""; }; - C1EA65231680FE1400A21259 /* csso.pecode */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = csso.pecode; sourceTree = ""; }; - C1EA65241680FE1400A21259 /* parser.node.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.node.js; sourceTree = ""; }; - C1EA65251680FE1400A21259 /* translator.node.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = translator.node.js; sourceTree = ""; }; - C1EA65261680FE1400A21259 /* translator.shared.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = translator.shared.js; sourceTree = ""; }; - C1EA65271680FE1400A21259 /* trbl.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = trbl.js; sourceTree = ""; }; - C1EA65281680FE1400A21259 /* util.node.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.node.js; sourceTree = ""; }; - C1EA65291680FE1400A21259 /* util.shared.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.shared.js; sourceTree = ""; }; - C1EA652D1680FE1400A21259 /* atkeyword.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atkeyword.0.css; sourceTree = ""; }; - C1EA652E1680FE1400A21259 /* atkeyword.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atkeyword.0.l; sourceTree = ""; }; - C1EA652F1680FE1400A21259 /* atkeyword.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atkeyword.0.p; sourceTree = ""; }; - C1EA65301680FE1400A21259 /* atkeyword.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atkeyword.1.css; sourceTree = ""; }; - C1EA65311680FE1400A21259 /* atkeyword.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atkeyword.1.l; sourceTree = ""; }; - C1EA65321680FE1400A21259 /* atkeyword.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atkeyword.1.p; sourceTree = ""; }; - C1EA65341680FE1400A21259 /* atruleb.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruleb.0.css; sourceTree = ""; }; - C1EA65351680FE1400A21259 /* atruleb.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruleb.0.l; sourceTree = ""; }; - C1EA65361680FE1400A21259 /* atruleb.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruleb.0.p; sourceTree = ""; }; - C1EA65371680FE1400A21259 /* atruleb.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruleb.1.css; sourceTree = ""; }; - C1EA65381680FE1400A21259 /* atruleb.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruleb.1.l; sourceTree = ""; }; - C1EA65391680FE1400A21259 /* atruleb.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruleb.1.p; sourceTree = ""; }; - C1EA653A1680FE1400A21259 /* atruleb.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruleb.2.css; sourceTree = ""; }; - C1EA653B1680FE1400A21259 /* atruleb.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruleb.2.l; sourceTree = ""; }; - C1EA653C1680FE1400A21259 /* atruleb.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruleb.2.p; sourceTree = ""; }; - C1EA653D1680FE1400A21259 /* atruleb.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruleb.c.0.css; sourceTree = ""; }; - C1EA653E1680FE1400A21259 /* atruleb.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruleb.c.0.l; sourceTree = ""; }; - C1EA653F1680FE1400A21259 /* atruleb.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruleb.c.0.p; sourceTree = ""; }; - C1EA65401680FE1400A21259 /* atruleb.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruleb.c.1.css; sourceTree = ""; }; - C1EA65411680FE1400A21259 /* atruleb.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruleb.c.1.l; sourceTree = ""; }; - C1EA65421680FE1400A21259 /* atruleb.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruleb.c.1.p; sourceTree = ""; }; - C1EA65431680FE1400A21259 /* atruleb.c.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruleb.c.2.css; sourceTree = ""; }; - C1EA65441680FE1400A21259 /* atruleb.c.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruleb.c.2.l; sourceTree = ""; }; - C1EA65451680FE1400A21259 /* atruleb.c.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruleb.c.2.p; sourceTree = ""; }; - C1EA65461680FE1400A21259 /* atruleb.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruleb.s.0.css; sourceTree = ""; }; - C1EA65471680FE1400A21259 /* atruleb.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruleb.s.0.l; sourceTree = ""; }; - C1EA65481680FE1400A21259 /* atruleb.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruleb.s.0.p; sourceTree = ""; }; - C1EA65491680FE1400A21259 /* atruleb.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruleb.s.1.css; sourceTree = ""; }; - C1EA654A1680FE1400A21259 /* atruleb.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruleb.s.1.l; sourceTree = ""; }; - C1EA654B1680FE1400A21259 /* atruleb.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruleb.s.1.p; sourceTree = ""; }; - C1EA654C1680FE1400A21259 /* atruleb.s.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruleb.s.2.css; sourceTree = ""; }; - C1EA654D1680FE1400A21259 /* atruleb.s.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruleb.s.2.l; sourceTree = ""; }; - C1EA654E1680FE1400A21259 /* atruleb.s.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruleb.s.2.p; sourceTree = ""; }; - C1EA65501680FE1400A21259 /* atruler.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruler.0.css; sourceTree = ""; }; - C1EA65511680FE1400A21259 /* atruler.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruler.0.l; sourceTree = ""; }; - C1EA65521680FE1400A21259 /* atruler.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruler.0.p; sourceTree = ""; }; - C1EA65531680FE1400A21259 /* atruler.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruler.1.css; sourceTree = ""; }; - C1EA65541680FE1400A21259 /* atruler.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruler.1.l; sourceTree = ""; }; - C1EA65551680FE1400A21259 /* atruler.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruler.1.p; sourceTree = ""; }; - C1EA65561680FE1400A21259 /* atruler.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruler.2.css; sourceTree = ""; }; - C1EA65571680FE1400A21259 /* atruler.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruler.2.l; sourceTree = ""; }; - C1EA65581680FE1400A21259 /* atruler.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruler.2.p; sourceTree = ""; }; - C1EA65591680FE1400A21259 /* atruler.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruler.c.0.css; sourceTree = ""; }; - C1EA655A1680FE1400A21259 /* atruler.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruler.c.0.l; sourceTree = ""; }; - C1EA655B1680FE1400A21259 /* atruler.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruler.c.0.p; sourceTree = ""; }; - C1EA655C1680FE1400A21259 /* atruler.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruler.c.1.css; sourceTree = ""; }; - C1EA655D1680FE1400A21259 /* atruler.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruler.c.1.l; sourceTree = ""; }; - C1EA655E1680FE1400A21259 /* atruler.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruler.c.1.p; sourceTree = ""; }; - C1EA655F1680FE1400A21259 /* atruler.c.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruler.c.2.css; sourceTree = ""; }; - C1EA65601680FE1400A21259 /* atruler.c.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruler.c.2.l; sourceTree = ""; }; - C1EA65611680FE1400A21259 /* atruler.c.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruler.c.2.p; sourceTree = ""; }; - C1EA65621680FE1400A21259 /* atruler.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruler.s.0.css; sourceTree = ""; }; - C1EA65631680FE1400A21259 /* atruler.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruler.s.0.l; sourceTree = ""; }; - C1EA65641680FE1400A21259 /* atruler.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruler.s.0.p; sourceTree = ""; }; - C1EA65651680FE1400A21259 /* atruler.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruler.s.1.css; sourceTree = ""; }; - C1EA65661680FE1400A21259 /* atruler.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruler.s.1.l; sourceTree = ""; }; - C1EA65671680FE1400A21259 /* atruler.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruler.s.1.p; sourceTree = ""; }; - C1EA65681680FE1400A21259 /* atruler.s.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atruler.s.2.css; sourceTree = ""; }; - C1EA65691680FE1400A21259 /* atruler.s.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atruler.s.2.l; sourceTree = ""; }; - C1EA656A1680FE1400A21259 /* atruler.s.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atruler.s.2.p; sourceTree = ""; }; - C1EA656B1680FE1400A21259 /* webkit.keyfraymes.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = webkit.keyfraymes.0.css; sourceTree = ""; }; - C1EA656C1680FE1400A21259 /* webkit.keyfraymes.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = webkit.keyfraymes.0.l; sourceTree = ""; }; - C1EA656D1680FE1400A21259 /* webkit.keyfraymes.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = webkit.keyfraymes.0.p; sourceTree = ""; }; - C1EA656F1680FE1400A21259 /* atrules.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atrules.0.css; sourceTree = ""; }; - C1EA65701680FE1400A21259 /* atrules.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atrules.0.l; sourceTree = ""; }; - C1EA65711680FE1400A21259 /* atrules.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atrules.0.p; sourceTree = ""; }; - C1EA65721680FE1400A21259 /* atrules.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atrules.1.css; sourceTree = ""; }; - C1EA65731680FE1400A21259 /* atrules.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atrules.1.l; sourceTree = ""; }; - C1EA65741680FE1400A21259 /* atrules.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atrules.1.p; sourceTree = ""; }; - C1EA65751680FE1400A21259 /* atrules.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atrules.2.css; sourceTree = ""; }; - C1EA65761680FE1400A21259 /* atrules.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atrules.2.l; sourceTree = ""; }; - C1EA65771680FE1400A21259 /* atrules.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atrules.2.p; sourceTree = ""; }; - C1EA65781680FE1400A21259 /* atrules.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atrules.c.0.css; sourceTree = ""; }; - C1EA65791680FE1400A21259 /* atrules.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atrules.c.0.l; sourceTree = ""; }; - C1EA657A1680FE1400A21259 /* atrules.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atrules.c.0.p; sourceTree = ""; }; - C1EA657B1680FE1400A21259 /* atrules.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atrules.c.1.css; sourceTree = ""; }; - C1EA657C1680FE1400A21259 /* atrules.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atrules.c.1.l; sourceTree = ""; }; - C1EA657D1680FE1400A21259 /* atrules.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atrules.c.1.p; sourceTree = ""; }; - C1EA657E1680FE1400A21259 /* atrules.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atrules.s.0.css; sourceTree = ""; }; - C1EA657F1680FE1400A21259 /* atrules.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atrules.s.0.l; sourceTree = ""; }; - C1EA65801680FE1400A21259 /* atrules.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atrules.s.0.p; sourceTree = ""; }; - C1EA65811680FE1400A21259 /* atrules.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = atrules.s.1.css; sourceTree = ""; }; - C1EA65821680FE1400A21259 /* atrules.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = atrules.s.1.l; sourceTree = ""; }; - C1EA65831680FE1400A21259 /* atrules.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = atrules.s.1.p; sourceTree = ""; }; - C1EA65851680FE1400A21259 /* attrib.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrib.0.css; sourceTree = ""; }; - C1EA65861680FE1400A21259 /* attrib.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrib.0.l; sourceTree = ""; }; - C1EA65871680FE1400A21259 /* attrib.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrib.0.p; sourceTree = ""; }; - C1EA65881680FE1400A21259 /* attrib.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrib.1.css; sourceTree = ""; }; - C1EA65891680FE1400A21259 /* attrib.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrib.1.l; sourceTree = ""; }; - C1EA658A1680FE1400A21259 /* attrib.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrib.1.p; sourceTree = ""; }; - C1EA658B1680FE1400A21259 /* attrib.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrib.2.css; sourceTree = ""; }; - C1EA658C1680FE1400A21259 /* attrib.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrib.2.l; sourceTree = ""; }; - C1EA658D1680FE1400A21259 /* attrib.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrib.c.0.css; sourceTree = ""; }; - C1EA658E1680FE1400A21259 /* attrib.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrib.c.0.l; sourceTree = ""; }; - C1EA658F1680FE1400A21259 /* attrib.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrib.c.0.p; sourceTree = ""; }; - C1EA65901680FE1400A21259 /* attrib.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrib.c.1.css; sourceTree = ""; }; - C1EA65911680FE1400A21259 /* attrib.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrib.c.1.l; sourceTree = ""; }; - C1EA65921680FE1400A21259 /* attrib.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrib.c.1.p; sourceTree = ""; }; - C1EA65931680FE1400A21259 /* attrib.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrib.s.0.css; sourceTree = ""; }; - C1EA65941680FE1400A21259 /* attrib.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrib.s.0.l; sourceTree = ""; }; - C1EA65951680FE1400A21259 /* attrib.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrib.s.0.p; sourceTree = ""; }; - C1EA65961680FE1400A21259 /* attrib.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrib.s.1.css; sourceTree = ""; }; - C1EA65971680FE1400A21259 /* attrib.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrib.s.1.l; sourceTree = ""; }; - C1EA65981680FE1400A21259 /* attrib.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrib.s.1.p; sourceTree = ""; }; - C1EA659A1680FE1400A21259 /* attrselector.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrselector.0.css; sourceTree = ""; }; - C1EA659B1680FE1400A21259 /* attrselector.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrselector.0.l; sourceTree = ""; }; - C1EA659C1680FE1400A21259 /* attrselector.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrselector.0.p; sourceTree = ""; }; - C1EA659D1680FE1400A21259 /* attrselector.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrselector.1.css; sourceTree = ""; }; - C1EA659E1680FE1400A21259 /* attrselector.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrselector.1.l; sourceTree = ""; }; - C1EA659F1680FE1400A21259 /* attrselector.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrselector.1.p; sourceTree = ""; }; - C1EA65A01680FE1400A21259 /* attrselector.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrselector.2.css; sourceTree = ""; }; - C1EA65A11680FE1400A21259 /* attrselector.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrselector.2.l; sourceTree = ""; }; - C1EA65A21680FE1400A21259 /* attrselector.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrselector.2.p; sourceTree = ""; }; - C1EA65A31680FE1400A21259 /* attrselector.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrselector.3.css; sourceTree = ""; }; - C1EA65A41680FE1400A21259 /* attrselector.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrselector.3.l; sourceTree = ""; }; - C1EA65A51680FE1400A21259 /* attrselector.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrselector.3.p; sourceTree = ""; }; - C1EA65A61680FE1400A21259 /* attrselector.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = attrselector.4.css; sourceTree = ""; }; - C1EA65A71680FE1400A21259 /* attrselector.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = attrselector.4.l; sourceTree = ""; }; - C1EA65A81680FE1400A21259 /* attrselector.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = attrselector.4.p; sourceTree = ""; }; - C1EA65AA1680FE1400A21259 /* block.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.0.css; sourceTree = ""; }; - C1EA65AB1680FE1400A21259 /* block.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.0.l; sourceTree = ""; }; - C1EA65AC1680FE1400A21259 /* block.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.0.p; sourceTree = ""; }; - C1EA65AD1680FE1400A21259 /* block.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.1.css; sourceTree = ""; }; - C1EA65AE1680FE1400A21259 /* block.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.1.l; sourceTree = ""; }; - C1EA65AF1680FE1400A21259 /* block.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.1.p; sourceTree = ""; }; - C1EA65B01680FE1400A21259 /* block.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.2.css; sourceTree = ""; }; - C1EA65B11680FE1400A21259 /* block.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.2.l; sourceTree = ""; }; - C1EA65B21680FE1400A21259 /* block.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.2.p; sourceTree = ""; }; - C1EA65B31680FE1400A21259 /* block.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.3.css; sourceTree = ""; }; - C1EA65B41680FE1400A21259 /* block.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.3.l; sourceTree = ""; }; - C1EA65B51680FE1400A21259 /* block.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.3.p; sourceTree = ""; }; - C1EA65B61680FE1400A21259 /* block.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.4.css; sourceTree = ""; }; - C1EA65B71680FE1400A21259 /* block.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.4.l; sourceTree = ""; }; - C1EA65B81680FE1400A21259 /* block.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.4.p; sourceTree = ""; }; - C1EA65B91680FE1400A21259 /* block.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.c.0.css; sourceTree = ""; }; - C1EA65BA1680FE1400A21259 /* block.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.c.0.l; sourceTree = ""; }; - C1EA65BB1680FE1400A21259 /* block.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.c.0.p; sourceTree = ""; }; - C1EA65BC1680FE1400A21259 /* block.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.c.1.css; sourceTree = ""; }; - C1EA65BD1680FE1400A21259 /* block.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.c.1.l; sourceTree = ""; }; - C1EA65BE1680FE1400A21259 /* block.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.c.1.p; sourceTree = ""; }; - C1EA65BF1680FE1400A21259 /* block.c.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.c.2.css; sourceTree = ""; }; - C1EA65C01680FE1400A21259 /* block.c.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.c.2.l; sourceTree = ""; }; - C1EA65C11680FE1400A21259 /* block.c.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.c.2.p; sourceTree = ""; }; - C1EA65C21680FE1400A21259 /* block.c.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.c.3.css; sourceTree = ""; }; - C1EA65C31680FE1400A21259 /* block.c.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.c.3.l; sourceTree = ""; }; - C1EA65C41680FE1400A21259 /* block.c.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.c.3.p; sourceTree = ""; }; - C1EA65C51680FE1400A21259 /* block.c.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.c.4.css; sourceTree = ""; }; - C1EA65C61680FE1400A21259 /* block.c.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.c.4.l; sourceTree = ""; }; - C1EA65C71680FE1400A21259 /* block.c.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.c.4.p; sourceTree = ""; }; - C1EA65C81680FE1400A21259 /* block.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.s.0.css; sourceTree = ""; }; - C1EA65C91680FE1400A21259 /* block.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.s.0.l; sourceTree = ""; }; - C1EA65CA1680FE1400A21259 /* block.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.s.0.p; sourceTree = ""; }; - C1EA65CB1680FE1400A21259 /* block.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.s.1.css; sourceTree = ""; }; - C1EA65CC1680FE1400A21259 /* block.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.s.1.l; sourceTree = ""; }; - C1EA65CD1680FE1400A21259 /* block.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.s.1.p; sourceTree = ""; }; - C1EA65CE1680FE1400A21259 /* block.s.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.s.2.css; sourceTree = ""; }; - C1EA65CF1680FE1400A21259 /* block.s.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.s.2.l; sourceTree = ""; }; - C1EA65D01680FE1400A21259 /* block.s.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.s.2.p; sourceTree = ""; }; - C1EA65D11680FE1400A21259 /* block.s.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.s.3.css; sourceTree = ""; }; - C1EA65D21680FE1400A21259 /* block.s.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.s.3.l; sourceTree = ""; }; - C1EA65D31680FE1400A21259 /* block.s.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.s.3.p; sourceTree = ""; }; - C1EA65D41680FE1400A21259 /* block.s.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = block.s.4.css; sourceTree = ""; }; - C1EA65D51680FE1400A21259 /* block.s.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = block.s.4.l; sourceTree = ""; }; - C1EA65D61680FE1400A21259 /* block.s.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = block.s.4.p; sourceTree = ""; }; - C1EA65D81680FE1400A21259 /* braces.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.0.css; sourceTree = ""; }; - C1EA65D91680FE1400A21259 /* braces.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.0.l; sourceTree = ""; }; - C1EA65DA1680FE1400A21259 /* braces.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.0.p; sourceTree = ""; }; - C1EA65DB1680FE1400A21259 /* braces.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.1.css; sourceTree = ""; }; - C1EA65DC1680FE1400A21259 /* braces.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.1.l; sourceTree = ""; }; - C1EA65DD1680FE1400A21259 /* braces.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.1.p; sourceTree = ""; }; - C1EA65DE1680FE1400A21259 /* braces.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.2.css; sourceTree = ""; }; - C1EA65DF1680FE1400A21259 /* braces.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.2.l; sourceTree = ""; }; - C1EA65E01680FE1400A21259 /* braces.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.2.p; sourceTree = ""; }; - C1EA65E11680FE1400A21259 /* braces.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.3.css; sourceTree = ""; }; - C1EA65E21680FE1400A21259 /* braces.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.3.l; sourceTree = ""; }; - C1EA65E31680FE1400A21259 /* braces.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.3.p; sourceTree = ""; }; - C1EA65E41680FE1400A21259 /* braces.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.4.css; sourceTree = ""; }; - C1EA65E51680FE1400A21259 /* braces.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.4.l; sourceTree = ""; }; - C1EA65E61680FE1400A21259 /* braces.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.4.p; sourceTree = ""; }; - C1EA65E71680FE1400A21259 /* braces.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.5.css; sourceTree = ""; }; - C1EA65E81680FE1400A21259 /* braces.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.5.l; sourceTree = ""; }; - C1EA65E91680FE1400A21259 /* braces.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.5.p; sourceTree = ""; }; - C1EA65EA1680FE1400A21259 /* braces.6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.6.css; sourceTree = ""; }; - C1EA65EB1680FE1400A21259 /* braces.6.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.6.l; sourceTree = ""; }; - C1EA65EC1680FE1400A21259 /* braces.6.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.6.p; sourceTree = ""; }; - C1EA65ED1680FE1400A21259 /* braces.7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.7.css; sourceTree = ""; }; - C1EA65EE1680FE1400A21259 /* braces.7.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.7.l; sourceTree = ""; }; - C1EA65EF1680FE1400A21259 /* braces.7.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.7.p; sourceTree = ""; }; - C1EA65F01680FE1400A21259 /* braces.8.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.8.css; sourceTree = ""; }; - C1EA65F11680FE1400A21259 /* braces.8.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.8.l; sourceTree = ""; }; - C1EA65F21680FE1400A21259 /* braces.8.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.8.p; sourceTree = ""; }; - C1EA65F31680FE1400A21259 /* braces.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.c.0.css; sourceTree = ""; }; - C1EA65F41680FE1400A21259 /* braces.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.c.0.l; sourceTree = ""; }; - C1EA65F51680FE1400A21259 /* braces.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.c.0.p; sourceTree = ""; }; - C1EA65F61680FE1400A21259 /* braces.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.c.1.css; sourceTree = ""; }; - C1EA65F71680FE1400A21259 /* braces.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.c.1.l; sourceTree = ""; }; - C1EA65F81680FE1400A21259 /* braces.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.c.1.p; sourceTree = ""; }; - C1EA65F91680FE1400A21259 /* braces.c.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.c.2.css; sourceTree = ""; }; - C1EA65FA1680FE1400A21259 /* braces.c.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.c.2.l; sourceTree = ""; }; - C1EA65FB1680FE1400A21259 /* braces.c.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.c.2.p; sourceTree = ""; }; - C1EA65FC1680FE1400A21259 /* braces.c.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.c.3.css; sourceTree = ""; }; - C1EA65FD1680FE1400A21259 /* braces.c.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.c.3.l; sourceTree = ""; }; - C1EA65FE1680FE1400A21259 /* braces.c.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.c.3.p; sourceTree = ""; }; - C1EA65FF1680FE1400A21259 /* braces.c.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.c.4.css; sourceTree = ""; }; - C1EA66001680FE1400A21259 /* braces.c.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.c.4.l; sourceTree = ""; }; - C1EA66011680FE1400A21259 /* braces.c.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.c.4.p; sourceTree = ""; }; - C1EA66021680FE1400A21259 /* braces.c.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.c.5.css; sourceTree = ""; }; - C1EA66031680FE1400A21259 /* braces.c.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.c.5.l; sourceTree = ""; }; - C1EA66041680FE1400A21259 /* braces.c.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.c.5.p; sourceTree = ""; }; - C1EA66051680FE1400A21259 /* braces.c.6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.c.6.css; sourceTree = ""; }; - C1EA66061680FE1400A21259 /* braces.c.6.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.c.6.l; sourceTree = ""; }; - C1EA66071680FE1400A21259 /* braces.c.6.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.c.6.p; sourceTree = ""; }; - C1EA66081680FE1400A21259 /* braces.c.7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.c.7.css; sourceTree = ""; }; - C1EA66091680FE1400A21259 /* braces.c.7.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.c.7.l; sourceTree = ""; }; - C1EA660A1680FE1400A21259 /* braces.c.7.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.c.7.p; sourceTree = ""; }; - C1EA660B1680FE1400A21259 /* braces.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.s.0.css; sourceTree = ""; }; - C1EA660C1680FE1400A21259 /* braces.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.s.0.l; sourceTree = ""; }; - C1EA660D1680FE1400A21259 /* braces.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.s.0.p; sourceTree = ""; }; - C1EA660E1680FE1400A21259 /* braces.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.s.1.css; sourceTree = ""; }; - C1EA660F1680FE1400A21259 /* braces.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.s.1.l; sourceTree = ""; }; - C1EA66101680FE1400A21259 /* braces.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.s.1.p; sourceTree = ""; }; - C1EA66111680FE1400A21259 /* braces.s.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.s.2.css; sourceTree = ""; }; - C1EA66121680FE1400A21259 /* braces.s.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.s.2.l; sourceTree = ""; }; - C1EA66131680FE1400A21259 /* braces.s.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.s.2.p; sourceTree = ""; }; - C1EA66141680FE1400A21259 /* braces.s.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.s.3.css; sourceTree = ""; }; - C1EA66151680FE1400A21259 /* braces.s.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.s.3.l; sourceTree = ""; }; - C1EA66161680FE1400A21259 /* braces.s.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.s.3.p; sourceTree = ""; }; - C1EA66171680FE1400A21259 /* braces.s.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.s.4.css; sourceTree = ""; }; - C1EA66181680FE1400A21259 /* braces.s.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.s.4.l; sourceTree = ""; }; - C1EA66191680FE1400A21259 /* braces.s.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.s.4.p; sourceTree = ""; }; - C1EA661A1680FE1400A21259 /* braces.s.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.s.5.css; sourceTree = ""; }; - C1EA661B1680FE1400A21259 /* braces.s.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.s.5.l; sourceTree = ""; }; - C1EA661C1680FE1400A21259 /* braces.s.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.s.5.p; sourceTree = ""; }; - C1EA661D1680FE1400A21259 /* braces.s.6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.s.6.css; sourceTree = ""; }; - C1EA661E1680FE1400A21259 /* braces.s.6.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.s.6.l; sourceTree = ""; }; - C1EA661F1680FE1400A21259 /* braces.s.6.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.s.6.p; sourceTree = ""; }; - C1EA66201680FE1400A21259 /* braces.s.7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = braces.s.7.css; sourceTree = ""; }; - C1EA66211680FE1400A21259 /* braces.s.7.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = braces.s.7.l; sourceTree = ""; }; - C1EA66221680FE1400A21259 /* braces.s.7.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = braces.s.7.p; sourceTree = ""; }; - C1EA66241680FE1400A21259 /* clazz.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = clazz.0.css; sourceTree = ""; }; - C1EA66251680FE1400A21259 /* clazz.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = clazz.0.l; sourceTree = ""; }; - C1EA66261680FE1400A21259 /* clazz.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = clazz.0.p; sourceTree = ""; }; - C1EA66281680FE1400A21259 /* combinator.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = combinator.0.css; sourceTree = ""; }; - C1EA66291680FE1400A21259 /* combinator.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = combinator.0.l; sourceTree = ""; }; - C1EA662A1680FE1400A21259 /* combinator.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = combinator.0.p; sourceTree = ""; }; - C1EA662B1680FE1400A21259 /* combinator.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = combinator.1.css; sourceTree = ""; }; - C1EA662C1680FE1400A21259 /* combinator.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = combinator.1.l; sourceTree = ""; }; - C1EA662D1680FE1400A21259 /* combinator.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = combinator.1.p; sourceTree = ""; }; - C1EA662E1680FE1400A21259 /* combinator.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = combinator.2.css; sourceTree = ""; }; - C1EA662F1680FE1400A21259 /* combinator.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = combinator.2.l; sourceTree = ""; }; - C1EA66301680FE1400A21259 /* combinator.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = combinator.2.p; sourceTree = ""; }; - C1EA66321680FE1400A21259 /* comment.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = comment.0.css; sourceTree = ""; }; - C1EA66331680FE1400A21259 /* comment.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = comment.0.l; sourceTree = ""; }; - C1EA66341680FE1400A21259 /* comment.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = comment.0.p; sourceTree = ""; }; - C1EA66361680FE1400A21259 /* declaration.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = declaration.0.css; sourceTree = ""; }; - C1EA66371680FE1400A21259 /* declaration.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = declaration.0.l; sourceTree = ""; }; - C1EA66381680FE1400A21259 /* declaration.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = declaration.0.p; sourceTree = ""; }; - C1EA66391680FE1400A21259 /* declaration.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = declaration.1.css; sourceTree = ""; }; - C1EA663A1680FE1400A21259 /* declaration.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = declaration.1.l; sourceTree = ""; }; - C1EA663B1680FE1400A21259 /* declaration.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = declaration.1.p; sourceTree = ""; }; - C1EA663C1680FE1400A21259 /* declaration.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = declaration.c.0.css; sourceTree = ""; }; - C1EA663D1680FE1400A21259 /* declaration.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = declaration.c.0.l; sourceTree = ""; }; - C1EA663E1680FE1400A21259 /* declaration.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = declaration.c.0.p; sourceTree = ""; }; - C1EA663F1680FE1400A21259 /* declaration.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = declaration.c.1.css; sourceTree = ""; }; - C1EA66401680FE1400A21259 /* declaration.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = declaration.c.1.l; sourceTree = ""; }; - C1EA66411680FE1400A21259 /* declaration.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = declaration.c.1.p; sourceTree = ""; }; - C1EA66421680FE1400A21259 /* declaration.c.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = declaration.c.2.css; sourceTree = ""; }; - C1EA66431680FE1400A21259 /* declaration.c.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = declaration.c.2.l; sourceTree = ""; }; - C1EA66441680FE1400A21259 /* declaration.c.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = declaration.c.2.p; sourceTree = ""; }; - C1EA66451680FE1400A21259 /* declaration.c.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = declaration.c.3.css; sourceTree = ""; }; - C1EA66461680FE1400A21259 /* declaration.c.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = declaration.c.3.l; sourceTree = ""; }; - C1EA66471680FE1400A21259 /* declaration.c.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = declaration.c.3.p; sourceTree = ""; }; - C1EA66481680FE1400A21259 /* declaration.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = declaration.s.0.css; sourceTree = ""; }; - C1EA66491680FE1400A21259 /* declaration.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = declaration.s.0.l; sourceTree = ""; }; - C1EA664A1680FE1400A21259 /* declaration.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = declaration.s.0.p; sourceTree = ""; }; - C1EA664B1680FE1400A21259 /* declaration.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = declaration.s.1.css; sourceTree = ""; }; - C1EA664C1680FE1400A21259 /* declaration.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = declaration.s.1.l; sourceTree = ""; }; - C1EA664D1680FE1400A21259 /* declaration.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = declaration.s.1.p; sourceTree = ""; }; - C1EA664E1680FE1400A21259 /* declaration.s.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = declaration.s.2.css; sourceTree = ""; }; - C1EA664F1680FE1400A21259 /* declaration.s.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = declaration.s.2.l; sourceTree = ""; }; - C1EA66501680FE1400A21259 /* declaration.s.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = declaration.s.2.p; sourceTree = ""; }; - C1EA66511680FE1400A21259 /* declaration.s.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = declaration.s.3.css; sourceTree = ""; }; - C1EA66521680FE1400A21259 /* declaration.s.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = declaration.s.3.l; sourceTree = ""; }; - C1EA66531680FE1400A21259 /* declaration.s.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = declaration.s.3.p; sourceTree = ""; }; - C1EA66551680FE1400A21259 /* decldelim.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = decldelim.0.css; sourceTree = ""; }; - C1EA66561680FE1400A21259 /* decldelim.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = decldelim.0.l; sourceTree = ""; }; - C1EA66571680FE1400A21259 /* decldelim.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = decldelim.0.p; sourceTree = ""; }; - C1EA66591680FE1400A21259 /* delim.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = delim.0.css; sourceTree = ""; }; - C1EA665A1680FE1400A21259 /* delim.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = delim.0.l; sourceTree = ""; }; - C1EA665B1680FE1400A21259 /* delim.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = delim.0.p; sourceTree = ""; }; - C1EA665D1680FE1400A21259 /* dimension.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = dimension.0.css; sourceTree = ""; }; - C1EA665E1680FE1400A21259 /* dimension.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = dimension.0.l; sourceTree = ""; }; - C1EA665F1680FE1400A21259 /* dimension.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = dimension.0.p; sourceTree = ""; }; - C1EA66601680FE1400A21259 /* dimension.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = dimension.1.css; sourceTree = ""; }; - C1EA66611680FE1400A21259 /* dimension.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = dimension.1.l; sourceTree = ""; }; - C1EA66621680FE1400A21259 /* dimension.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = dimension.1.p; sourceTree = ""; }; - C1EA66631680FE1400A21259 /* dimension.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = dimension.2.css; sourceTree = ""; }; - C1EA66641680FE1400A21259 /* dimension.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = dimension.2.l; sourceTree = ""; }; - C1EA66651680FE1400A21259 /* dimension.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = dimension.2.p; sourceTree = ""; }; - C1EA66671680FE1400A21259 /* filter.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = filter.0.css; sourceTree = ""; }; - C1EA66681680FE1400A21259 /* filter.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = filter.0.l; sourceTree = ""; }; - C1EA66691680FE1400A21259 /* filter.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = filter.0.p; sourceTree = ""; }; - C1EA666A1680FE1400A21259 /* filter.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = filter.1.css; sourceTree = ""; }; - C1EA666B1680FE1400A21259 /* filter.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = filter.1.l; sourceTree = ""; }; - C1EA666C1680FE1400A21259 /* filter.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = filter.1.p; sourceTree = ""; }; - C1EA666D1680FE1400A21259 /* filter.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = filter.2.css; sourceTree = ""; }; - C1EA666E1680FE1400A21259 /* filter.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = filter.2.l; sourceTree = ""; }; - C1EA666F1680FE1400A21259 /* filter.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = filter.2.p; sourceTree = ""; }; - C1EA66701680FE1400A21259 /* filter.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = filter.3.css; sourceTree = ""; }; - C1EA66711680FE1400A21259 /* filter.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = filter.3.l; sourceTree = ""; }; - C1EA66721680FE1400A21259 /* filter.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = filter.3.p; sourceTree = ""; }; - C1EA66731680FE1400A21259 /* filter.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = filter.4.css; sourceTree = ""; }; - C1EA66741680FE1400A21259 /* filter.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = filter.4.l; sourceTree = ""; }; - C1EA66751680FE1400A21259 /* filter.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = filter.4.p; sourceTree = ""; }; - C1EA66761680FE1400A21259 /* filter.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = filter.5.css; sourceTree = ""; }; - C1EA66771680FE1400A21259 /* filter.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = filter.5.l; sourceTree = ""; }; - C1EA66781680FE1400A21259 /* filter.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = filter.5.p; sourceTree = ""; }; - C1EA66791680FE1400A21259 /* filter.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = filter.c.0.css; sourceTree = ""; }; - C1EA667A1680FE1400A21259 /* filter.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = filter.c.0.l; sourceTree = ""; }; - C1EA667B1680FE1400A21259 /* filter.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = filter.c.0.p; sourceTree = ""; }; - C1EA667C1680FE1400A21259 /* filter.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = filter.c.1.css; sourceTree = ""; }; - C1EA667D1680FE1400A21259 /* filter.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = filter.c.1.l; sourceTree = ""; }; - C1EA667E1680FE1400A21259 /* filter.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = filter.c.1.p; sourceTree = ""; }; - C1EA667F1680FE1400A21259 /* filter.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = filter.s.0.css; sourceTree = ""; }; - C1EA66801680FE1400A21259 /* filter.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = filter.s.0.l; sourceTree = ""; }; - C1EA66811680FE1400A21259 /* filter.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = filter.s.0.p; sourceTree = ""; }; - C1EA66821680FE1400A21259 /* filter.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = filter.s.1.css; sourceTree = ""; }; - C1EA66831680FE1400A21259 /* filter.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = filter.s.1.l; sourceTree = ""; }; - C1EA66841680FE1400A21259 /* filter.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = filter.s.1.p; sourceTree = ""; }; - C1EA66861680FE1400A21259 /* functionExpression.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = functionExpression.0.css; sourceTree = ""; }; - C1EA66871680FE1400A21259 /* functionExpression.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = functionExpression.0.l; sourceTree = ""; }; - C1EA66881680FE1400A21259 /* functionExpression.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = functionExpression.0.p; sourceTree = ""; }; - C1EA66891680FE1400A21259 /* functionExpression.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = functionExpression.1.css; sourceTree = ""; }; - C1EA668A1680FE1400A21259 /* functionExpression.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = functionExpression.1.l; sourceTree = ""; }; - C1EA668B1680FE1400A21259 /* functionExpression.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = functionExpression.1.p; sourceTree = ""; }; - C1EA668C1680FE1400A21259 /* functionExpression.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = functionExpression.2.css; sourceTree = ""; }; - C1EA668D1680FE1400A21259 /* functionExpression.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = functionExpression.2.l; sourceTree = ""; }; - C1EA668E1680FE1400A21259 /* functionExpression.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = functionExpression.2.p; sourceTree = ""; }; - C1EA668F1680FE1400A21259 /* functionExpression.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = functionExpression.3.css; sourceTree = ""; }; - C1EA66901680FE1400A21259 /* functionExpression.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = functionExpression.3.l; sourceTree = ""; }; - C1EA66911680FE1400A21259 /* functionExpression.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = functionExpression.3.p; sourceTree = ""; }; - C1EA66921680FE1400A21259 /* functionExpression.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = functionExpression.4.css; sourceTree = ""; }; - C1EA66931680FE1400A21259 /* functionExpression.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = functionExpression.4.l; sourceTree = ""; }; - C1EA66941680FE1400A21259 /* functionExpression.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = functionExpression.4.p; sourceTree = ""; }; - C1EA66951680FE1400A21259 /* functionExpression.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = functionExpression.5.css; sourceTree = ""; }; - C1EA66961680FE1400A21259 /* functionExpression.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = functionExpression.5.l; sourceTree = ""; }; - C1EA66971680FE1400A21259 /* functionExpression.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = functionExpression.5.p; sourceTree = ""; }; - C1EA66981680FE1400A21259 /* functionExpression.6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = functionExpression.6.css; sourceTree = ""; }; - C1EA66991680FE1400A21259 /* functionExpression.6.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = functionExpression.6.l; sourceTree = ""; }; - C1EA669A1680FE1400A21259 /* functionExpression.6.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = functionExpression.6.p; sourceTree = ""; }; - C1EA669B1680FE1400A21259 /* functionExpression.7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = functionExpression.7.css; sourceTree = ""; }; - C1EA669C1680FE1400A21259 /* functionExpression.7.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = functionExpression.7.l; sourceTree = ""; }; - C1EA669D1680FE1400A21259 /* functionExpression.7.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = functionExpression.7.p; sourceTree = ""; }; - C1EA669F1680FE1400A21259 /* function.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.0.css; sourceTree = ""; }; - C1EA66A01680FE1400A21259 /* function.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.0.l; sourceTree = ""; }; - C1EA66A11680FE1400A21259 /* function.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.0.p; sourceTree = ""; }; - C1EA66A21680FE1400A21259 /* function.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.1.css; sourceTree = ""; }; - C1EA66A31680FE1400A21259 /* function.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.1.l; sourceTree = ""; }; - C1EA66A41680FE1400A21259 /* function.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.1.p; sourceTree = ""; }; - C1EA66A51680FE1400A21259 /* function.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.2.css; sourceTree = ""; }; - C1EA66A61680FE1400A21259 /* function.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.2.l; sourceTree = ""; }; - C1EA66A71680FE1400A21259 /* function.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.2.p; sourceTree = ""; }; - C1EA66A81680FE1400A21259 /* function.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.3.css; sourceTree = ""; }; - C1EA66A91680FE1400A21259 /* function.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.3.l; sourceTree = ""; }; - C1EA66AA1680FE1400A21259 /* function.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.3.p; sourceTree = ""; }; - C1EA66AB1680FE1400A21259 /* function.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.4.css; sourceTree = ""; }; - C1EA66AC1680FE1400A21259 /* function.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.4.l; sourceTree = ""; }; - C1EA66AD1680FE1400A21259 /* function.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.4.p; sourceTree = ""; }; - C1EA66AE1680FE1400A21259 /* function.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.5.css; sourceTree = ""; }; - C1EA66AF1680FE1400A21259 /* function.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.5.l; sourceTree = ""; }; - C1EA66B01680FE1400A21259 /* function.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.5.p; sourceTree = ""; }; - C1EA66B11680FE1400A21259 /* function.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.c.0.css; sourceTree = ""; }; - C1EA66B21680FE1400A21259 /* function.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.c.0.l; sourceTree = ""; }; - C1EA66B31680FE1400A21259 /* function.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.c.0.p; sourceTree = ""; }; - C1EA66B41680FE1400A21259 /* function.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.c.1.css; sourceTree = ""; }; - C1EA66B51680FE1400A21259 /* function.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.c.1.l; sourceTree = ""; }; - C1EA66B61680FE1400A21259 /* function.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.c.1.p; sourceTree = ""; }; - C1EA66B71680FE1400A21259 /* function.c.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.c.2.css; sourceTree = ""; }; - C1EA66B81680FE1400A21259 /* function.c.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.c.2.l; sourceTree = ""; }; - C1EA66B91680FE1400A21259 /* function.c.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.c.2.p; sourceTree = ""; }; - C1EA66BA1680FE1400A21259 /* function.c.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.c.3.css; sourceTree = ""; }; - C1EA66BB1680FE1400A21259 /* function.c.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.c.3.l; sourceTree = ""; }; - C1EA66BC1680FE1400A21259 /* function.c.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.c.3.p; sourceTree = ""; }; - C1EA66BD1680FE1400A21259 /* function.c.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.c.4.css; sourceTree = ""; }; - C1EA66BE1680FE1400A21259 /* function.c.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.c.4.l; sourceTree = ""; }; - C1EA66BF1680FE1400A21259 /* function.c.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.c.4.p; sourceTree = ""; }; - C1EA66C01680FE1400A21259 /* function.c.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.c.5.css; sourceTree = ""; }; - C1EA66C11680FE1400A21259 /* function.c.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.c.5.l; sourceTree = ""; }; - C1EA66C21680FE1400A21259 /* function.c.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.c.5.p; sourceTree = ""; }; - C1EA66C31680FE1400A21259 /* function.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.s.0.css; sourceTree = ""; }; - C1EA66C41680FE1400A21259 /* function.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.s.0.l; sourceTree = ""; }; - C1EA66C51680FE1400A21259 /* function.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.s.0.p; sourceTree = ""; }; - C1EA66C61680FE1400A21259 /* function.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.s.1.css; sourceTree = ""; }; - C1EA66C71680FE1400A21259 /* function.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.s.1.l; sourceTree = ""; }; - C1EA66C81680FE1400A21259 /* function.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.s.1.p; sourceTree = ""; }; - C1EA66C91680FE1400A21259 /* function.s.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.s.2.css; sourceTree = ""; }; - C1EA66CA1680FE1400A21259 /* function.s.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.s.2.l; sourceTree = ""; }; - C1EA66CB1680FE1400A21259 /* function.s.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.s.2.p; sourceTree = ""; }; - C1EA66CC1680FE1400A21259 /* function.s.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.s.3.css; sourceTree = ""; }; - C1EA66CD1680FE1400A21259 /* function.s.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.s.3.l; sourceTree = ""; }; - C1EA66CE1680FE1400A21259 /* function.s.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.s.3.p; sourceTree = ""; }; - C1EA66CF1680FE1400A21259 /* function.s.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.s.4.css; sourceTree = ""; }; - C1EA66D01680FE1400A21259 /* function.s.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.s.4.l; sourceTree = ""; }; - C1EA66D11680FE1400A21259 /* function.s.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.s.4.p; sourceTree = ""; }; - C1EA66D21680FE1400A21259 /* function.s.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = function.s.5.css; sourceTree = ""; }; - C1EA66D31680FE1400A21259 /* function.s.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = function.s.5.l; sourceTree = ""; }; - C1EA66D41680FE1400A21259 /* function.s.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = function.s.5.p; sourceTree = ""; }; - C1EA66D61680FE1400A21259 /* ident.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ident.0.css; sourceTree = ""; }; - C1EA66D71680FE1400A21259 /* ident.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ident.0.l; sourceTree = ""; }; - C1EA66D81680FE1400A21259 /* ident.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ident.0.p; sourceTree = ""; }; - C1EA66D91680FE1400A21259 /* ident.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ident.1.css; sourceTree = ""; }; - C1EA66DA1680FE1400A21259 /* ident.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ident.1.l; sourceTree = ""; }; - C1EA66DB1680FE1400A21259 /* ident.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ident.1.p; sourceTree = ""; }; - C1EA66DC1680FE1400A21259 /* ident.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ident.2.css; sourceTree = ""; }; - C1EA66DD1680FE1400A21259 /* ident.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ident.2.l; sourceTree = ""; }; - C1EA66DE1680FE1400A21259 /* ident.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ident.2.p; sourceTree = ""; }; - C1EA66DF1680FE1400A21259 /* ident.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ident.3.css; sourceTree = ""; }; - C1EA66E01680FE1400A21259 /* ident.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ident.3.l; sourceTree = ""; }; - C1EA66E11680FE1400A21259 /* ident.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ident.3.p; sourceTree = ""; }; - C1EA66E21680FE1400A21259 /* ident.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ident.4.css; sourceTree = ""; }; - C1EA66E31680FE1400A21259 /* ident.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ident.4.l; sourceTree = ""; }; - C1EA66E41680FE1400A21259 /* ident.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ident.4.p; sourceTree = ""; }; - C1EA66E51680FE1400A21259 /* ident.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ident.5.css; sourceTree = ""; }; - C1EA66E61680FE1400A21259 /* ident.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ident.5.l; sourceTree = ""; }; - C1EA66E71680FE1400A21259 /* ident.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ident.5.p; sourceTree = ""; }; - C1EA66E91680FE1400A21259 /* important.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = important.0.css; sourceTree = ""; }; - C1EA66EA1680FE1400A21259 /* important.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = important.0.l; sourceTree = ""; }; - C1EA66EB1680FE1400A21259 /* important.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = important.0.p; sourceTree = ""; }; - C1EA66EC1680FE1400A21259 /* important.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = important.c.0.css; sourceTree = ""; }; - C1EA66ED1680FE1400A21259 /* important.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = important.c.0.l; sourceTree = ""; }; - C1EA66EE1680FE1400A21259 /* important.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = important.c.0.p; sourceTree = ""; }; - C1EA66EF1680FE1400A21259 /* important.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = important.s.0.css; sourceTree = ""; }; - C1EA66F01680FE1400A21259 /* important.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = important.s.0.l; sourceTree = ""; }; - C1EA66F11680FE1400A21259 /* important.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = important.s.0.p; sourceTree = ""; }; - C1EA66F31680FE1400A21259 /* nth.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nth.0.css; sourceTree = ""; }; - C1EA66F41680FE1400A21259 /* nth.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nth.0.l; sourceTree = ""; }; - C1EA66F51680FE1400A21259 /* nth.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nth.0.p; sourceTree = ""; }; - C1EA66F61680FE1400A21259 /* nth.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nth.1.css; sourceTree = ""; }; - C1EA66F71680FE1400A21259 /* nth.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nth.1.l; sourceTree = ""; }; - C1EA66F81680FE1400A21259 /* nth.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nth.1.p; sourceTree = ""; }; - C1EA66F91680FE1400A21259 /* nth.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nth.2.css; sourceTree = ""; }; - C1EA66FA1680FE1400A21259 /* nth.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nth.2.l; sourceTree = ""; }; - C1EA66FB1680FE1400A21259 /* nth.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nth.2.p; sourceTree = ""; }; - C1EA66FC1680FE1400A21259 /* nth.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nth.3.css; sourceTree = ""; }; - C1EA66FD1680FE1400A21259 /* nth.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nth.3.l; sourceTree = ""; }; - C1EA66FE1680FE1400A21259 /* nth.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nth.3.p; sourceTree = ""; }; - C1EA66FF1680FE1400A21259 /* nth.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nth.4.css; sourceTree = ""; }; - C1EA67001680FE1400A21259 /* nth.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nth.4.l; sourceTree = ""; }; - C1EA67011680FE1400A21259 /* nth.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nth.4.p; sourceTree = ""; }; - C1EA67031680FE1400A21259 /* nthselector.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nthselector.0.css; sourceTree = ""; }; - C1EA67041680FE1400A21259 /* nthselector.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nthselector.0.l; sourceTree = ""; }; - C1EA67051680FE1400A21259 /* nthselector.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nthselector.0.p; sourceTree = ""; }; - C1EA67061680FE1400A21259 /* nthselector.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nthselector.1.css; sourceTree = ""; }; - C1EA67071680FE1400A21259 /* nthselector.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nthselector.1.l; sourceTree = ""; }; - C1EA67081680FE1400A21259 /* nthselector.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nthselector.1.p; sourceTree = ""; }; - C1EA67091680FE1400A21259 /* nthselector.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nthselector.c.0.css; sourceTree = ""; }; - C1EA670A1680FE1400A21259 /* nthselector.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nthselector.c.0.l; sourceTree = ""; }; - C1EA670B1680FE1400A21259 /* nthselector.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nthselector.c.0.p; sourceTree = ""; }; - C1EA670C1680FE1400A21259 /* nthselector.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nthselector.c.1.css; sourceTree = ""; }; - C1EA670D1680FE1400A21259 /* nthselector.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nthselector.c.1.l; sourceTree = ""; }; - C1EA670E1680FE1400A21259 /* nthselector.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nthselector.c.1.p; sourceTree = ""; }; - C1EA670F1680FE1400A21259 /* nthselector.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nthselector.s.0.css; sourceTree = ""; }; - C1EA67101680FE1400A21259 /* nthselector.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nthselector.s.0.l; sourceTree = ""; }; - C1EA67111680FE1400A21259 /* nthselector.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nthselector.s.0.p; sourceTree = ""; }; - C1EA67121680FE1400A21259 /* nthselector.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = nthselector.s.1.css; sourceTree = ""; }; - C1EA67131680FE1400A21259 /* nthselector.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = nthselector.s.1.l; sourceTree = ""; }; - C1EA67141680FE1400A21259 /* nthselector.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = nthselector.s.1.p; sourceTree = ""; }; - C1EA67161680FE1400A21259 /* number.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = number.0.css; sourceTree = ""; }; - C1EA67171680FE1400A21259 /* number.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = number.0.l; sourceTree = ""; }; - C1EA67181680FE1400A21259 /* number.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = number.0.p; sourceTree = ""; }; - C1EA67191680FE1400A21259 /* number.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = number.1.css; sourceTree = ""; }; - C1EA671A1680FE1400A21259 /* number.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = number.1.l; sourceTree = ""; }; - C1EA671B1680FE1400A21259 /* number.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = number.1.p; sourceTree = ""; }; - C1EA671C1680FE1400A21259 /* number.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = number.2.css; sourceTree = ""; }; - C1EA671D1680FE1400A21259 /* number.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = number.2.l; sourceTree = ""; }; - C1EA671E1680FE1400A21259 /* number.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = number.2.p; sourceTree = ""; }; - C1EA671F1680FE1400A21259 /* number.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = number.3.css; sourceTree = ""; }; - C1EA67201680FE1400A21259 /* number.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = number.3.l; sourceTree = ""; }; - C1EA67211680FE1400A21259 /* number.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = number.4.css; sourceTree = ""; }; - C1EA67221680FE1400A21259 /* number.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = number.4.l; sourceTree = ""; }; - C1EA67231680FE1400A21259 /* number.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = number.5.css; sourceTree = ""; }; - C1EA67241680FE1400A21259 /* number.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = number.5.l; sourceTree = ""; }; - C1EA67251680FE1400A21259 /* number.6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = number.6.css; sourceTree = ""; }; - C1EA67261680FE1400A21259 /* number.6.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = number.6.l; sourceTree = ""; }; - C1EA67271680FE1400A21259 /* number.7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = number.7.css; sourceTree = ""; }; - C1EA67281680FE1400A21259 /* number.7.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = number.7.l; sourceTree = ""; }; - C1EA672A1680FE1400A21259 /* operator.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = operator.0.css; sourceTree = ""; }; - C1EA672B1680FE1400A21259 /* operator.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = operator.0.l; sourceTree = ""; }; - C1EA672C1680FE1400A21259 /* operator.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = operator.0.p; sourceTree = ""; }; - C1EA672D1680FE1400A21259 /* operator.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = operator.1.css; sourceTree = ""; }; - C1EA672E1680FE1400A21259 /* operator.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = operator.1.l; sourceTree = ""; }; - C1EA672F1680FE1400A21259 /* operator.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = operator.1.p; sourceTree = ""; }; - C1EA67301680FE1400A21259 /* operator.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = operator.2.css; sourceTree = ""; }; - C1EA67311680FE1400A21259 /* operator.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = operator.2.l; sourceTree = ""; }; - C1EA67321680FE1400A21259 /* operator.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = operator.2.p; sourceTree = ""; }; - C1EA67331680FE1400A21259 /* operator.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = operator.3.css; sourceTree = ""; }; - C1EA67341680FE1400A21259 /* operator.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = operator.3.l; sourceTree = ""; }; - C1EA67351680FE1400A21259 /* operator.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = operator.3.p; sourceTree = ""; }; - C1EA67371680FE1400A21259 /* percentage.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = percentage.0.css; sourceTree = ""; }; - C1EA67381680FE1400A21259 /* percentage.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = percentage.0.l; sourceTree = ""; }; - C1EA67391680FE1400A21259 /* percentage.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = percentage.0.p; sourceTree = ""; }; - C1EA673A1680FE1400A21259 /* percentage.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = percentage.1.css; sourceTree = ""; }; - C1EA673B1680FE1400A21259 /* percentage.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = percentage.1.l; sourceTree = ""; }; - C1EA673C1680FE1400A21259 /* percentage.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = percentage.1.p; sourceTree = ""; }; - C1EA673D1680FE1400A21259 /* percentage.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = percentage.2.css; sourceTree = ""; }; - C1EA673E1680FE1400A21259 /* percentage.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = percentage.2.l; sourceTree = ""; }; - C1EA673F1680FE1400A21259 /* percentage.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = percentage.2.p; sourceTree = ""; }; - C1EA67411680FE1400A21259 /* property.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = property.0.css; sourceTree = ""; }; - C1EA67421680FE1400A21259 /* property.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = property.0.l; sourceTree = ""; }; - C1EA67431680FE1400A21259 /* property.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = property.0.p; sourceTree = ""; }; - C1EA67441680FE1400A21259 /* property.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = property.1.css; sourceTree = ""; }; - C1EA67451680FE1400A21259 /* property.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = property.1.l; sourceTree = ""; }; - C1EA67461680FE1400A21259 /* property.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = property.1.p; sourceTree = ""; }; - C1EA67481680FE1400A21259 /* pseudoc.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = pseudoc.0.css; sourceTree = ""; }; - C1EA67491680FE1400A21259 /* pseudoc.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = pseudoc.0.l; sourceTree = ""; }; - C1EA674A1680FE1400A21259 /* pseudoc.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = pseudoc.0.p; sourceTree = ""; }; - C1EA674B1680FE1400A21259 /* pseudoc.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = pseudoc.1.css; sourceTree = ""; }; - C1EA674C1680FE1400A21259 /* pseudoc.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = pseudoc.1.l; sourceTree = ""; }; - C1EA674D1680FE1400A21259 /* pseudoc.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = pseudoc.1.p; sourceTree = ""; }; - C1EA674F1680FE1400A21259 /* pseudoe.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = pseudoe.0.css; sourceTree = ""; }; - C1EA67501680FE1400A21259 /* pseudoe.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = pseudoe.0.l; sourceTree = ""; }; - C1EA67511680FE1400A21259 /* pseudoe.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = pseudoe.0.p; sourceTree = ""; }; - C1EA67521680FE1400A21259 /* pseudoe.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = pseudoe.1.css; sourceTree = ""; }; - C1EA67531680FE1400A21259 /* pseudoe.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = pseudoe.1.l; sourceTree = ""; }; - C1EA67541680FE1400A21259 /* pseudoe.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = pseudoe.1.p; sourceTree = ""; }; - C1EA67561680FE1400A21259 /* ruleset.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.0.css; sourceTree = ""; }; - C1EA67571680FE1400A21259 /* ruleset.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.0.l; sourceTree = ""; }; - C1EA67581680FE1400A21259 /* ruleset.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.0.p; sourceTree = ""; }; - C1EA67591680FE1400A21259 /* ruleset.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.1.css; sourceTree = ""; }; - C1EA675A1680FE1400A21259 /* ruleset.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.1.l; sourceTree = ""; }; - C1EA675B1680FE1400A21259 /* ruleset.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.1.p; sourceTree = ""; }; - C1EA675C1680FE1400A21259 /* ruleset.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.2.css; sourceTree = ""; }; - C1EA675D1680FE1400A21259 /* ruleset.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.2.l; sourceTree = ""; }; - C1EA675E1680FE1400A21259 /* ruleset.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.2.p; sourceTree = ""; }; - C1EA675F1680FE1400A21259 /* ruleset.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.3.css; sourceTree = ""; }; - C1EA67601680FE1400A21259 /* ruleset.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.3.l; sourceTree = ""; }; - C1EA67611680FE1400A21259 /* ruleset.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.3.p; sourceTree = ""; }; - C1EA67621680FE1400A21259 /* ruleset.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.4.css; sourceTree = ""; }; - C1EA67631680FE1400A21259 /* ruleset.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.4.l; sourceTree = ""; }; - C1EA67641680FE1400A21259 /* ruleset.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.4.p; sourceTree = ""; }; - C1EA67651680FE1400A21259 /* ruleset.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.5.css; sourceTree = ""; }; - C1EA67661680FE1400A21259 /* ruleset.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.5.l; sourceTree = ""; }; - C1EA67671680FE1400A21259 /* ruleset.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.5.p; sourceTree = ""; }; - C1EA67681680FE1400A21259 /* ruleset.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.c.0.css; sourceTree = ""; }; - C1EA67691680FE1400A21259 /* ruleset.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.c.0.l; sourceTree = ""; }; - C1EA676A1680FE1400A21259 /* ruleset.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.c.0.p; sourceTree = ""; }; - C1EA676B1680FE1400A21259 /* ruleset.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.c.1.css; sourceTree = ""; }; - C1EA676C1680FE1400A21259 /* ruleset.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.c.1.l; sourceTree = ""; }; - C1EA676D1680FE1400A21259 /* ruleset.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.c.1.p; sourceTree = ""; }; - C1EA676E1680FE1400A21259 /* ruleset.c.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.c.2.css; sourceTree = ""; }; - C1EA676F1680FE1400A21259 /* ruleset.c.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.c.2.l; sourceTree = ""; }; - C1EA67701680FE1400A21259 /* ruleset.c.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.c.2.p; sourceTree = ""; }; - C1EA67711680FE1400A21259 /* ruleset.c.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.c.3.css; sourceTree = ""; }; - C1EA67721680FE1400A21259 /* ruleset.c.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.c.3.l; sourceTree = ""; }; - C1EA67731680FE1400A21259 /* ruleset.c.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.c.3.p; sourceTree = ""; }; - C1EA67741680FE1400A21259 /* ruleset.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.s.0.css; sourceTree = ""; }; - C1EA67751680FE1400A21259 /* ruleset.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.s.0.l; sourceTree = ""; }; - C1EA67761680FE1400A21259 /* ruleset.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.s.0.p; sourceTree = ""; }; - C1EA67771680FE1400A21259 /* ruleset.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.s.1.css; sourceTree = ""; }; - C1EA67781680FE1400A21259 /* ruleset.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.s.1.l; sourceTree = ""; }; - C1EA67791680FE1400A21259 /* ruleset.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.s.1.p; sourceTree = ""; }; - C1EA677A1680FE1400A21259 /* ruleset.s.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.s.2.css; sourceTree = ""; }; - C1EA677B1680FE1400A21259 /* ruleset.s.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.s.2.l; sourceTree = ""; }; - C1EA677C1680FE1400A21259 /* ruleset.s.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.s.2.p; sourceTree = ""; }; - C1EA677D1680FE1400A21259 /* ruleset.s.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.s.3.css; sourceTree = ""; }; - C1EA677E1680FE1400A21259 /* ruleset.s.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.s.3.l; sourceTree = ""; }; - C1EA677F1680FE1400A21259 /* ruleset.s.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.s.3.p; sourceTree = ""; }; - C1EA67801680FE1400A21259 /* ruleset.s.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.s.4.css; sourceTree = ""; }; - C1EA67811680FE1400A21259 /* ruleset.s.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.s.4.l; sourceTree = ""; }; - C1EA67821680FE1400A21259 /* ruleset.s.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.s.4.p; sourceTree = ""; }; - C1EA67831680FE1400A21259 /* ruleset.s.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = ruleset.s.5.css; sourceTree = ""; }; - C1EA67841680FE1400A21259 /* ruleset.s.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = ruleset.s.5.l; sourceTree = ""; }; - C1EA67851680FE1400A21259 /* ruleset.s.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = ruleset.s.5.p; sourceTree = ""; }; - C1EA67861680FE1400A21259 /* value.color.ident.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.color.ident.0.css; sourceTree = ""; }; - C1EA67871680FE1400A21259 /* value.color.ident.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.color.ident.0.l; sourceTree = ""; }; - C1EA67881680FE1400A21259 /* value.color.ident.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.color.ident.1.css; sourceTree = ""; }; - C1EA67891680FE1400A21259 /* value.color.ident.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.color.ident.1.l; sourceTree = ""; }; - C1EA678B1680FE1400A21259 /* selector.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = selector.0.css; sourceTree = ""; }; - C1EA678C1680FE1400A21259 /* selector.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = selector.0.l; sourceTree = ""; }; - C1EA678D1680FE1400A21259 /* selector.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = selector.0.p; sourceTree = ""; }; - C1EA678E1680FE1400A21259 /* selector.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = selector.1.css; sourceTree = ""; }; - C1EA678F1680FE1400A21259 /* selector.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = selector.1.l; sourceTree = ""; }; - C1EA67901680FE1400A21259 /* selector.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = selector.1.p; sourceTree = ""; }; - C1EA67921680FE1400A21259 /* shash.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = shash.0.css; sourceTree = ""; }; - C1EA67931680FE1400A21259 /* shash.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = shash.0.l; sourceTree = ""; }; - C1EA67941680FE1400A21259 /* shash.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = shash.0.p; sourceTree = ""; }; - C1EA67951680FE1400A21259 /* shash.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = shash.1.css; sourceTree = ""; }; - C1EA67961680FE1400A21259 /* shash.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = shash.1.l; sourceTree = ""; }; - C1EA67971680FE1400A21259 /* shash.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = shash.1.p; sourceTree = ""; }; - C1EA67991680FE1400A21259 /* simpleselector.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.0.css; sourceTree = ""; }; - C1EA679A1680FE1400A21259 /* simpleselector.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.0.l; sourceTree = ""; }; - C1EA679B1680FE1400A21259 /* simpleselector.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.0.p; sourceTree = ""; }; - C1EA679C1680FE1400A21259 /* simpleselector.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.1.css; sourceTree = ""; }; - C1EA679D1680FE1400A21259 /* simpleselector.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.1.l; sourceTree = ""; }; - C1EA679E1680FE1400A21259 /* simpleselector.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.1.p; sourceTree = ""; }; - C1EA679F1680FE1400A21259 /* simpleselector.10.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.10.css; sourceTree = ""; }; - C1EA67A01680FE1400A21259 /* simpleselector.10.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.10.l; sourceTree = ""; }; - C1EA67A11680FE1400A21259 /* simpleselector.10.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.10.p; sourceTree = ""; }; - C1EA67A21680FE1400A21259 /* simpleselector.11.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.11.css; sourceTree = ""; }; - C1EA67A31680FE1400A21259 /* simpleselector.11.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.11.l; sourceTree = ""; }; - C1EA67A41680FE1400A21259 /* simpleselector.11.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.11.p; sourceTree = ""; }; - C1EA67A51680FE1400A21259 /* simpleselector.12.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.12.css; sourceTree = ""; }; - C1EA67A61680FE1400A21259 /* simpleselector.12.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.12.l; sourceTree = ""; }; - C1EA67A71680FE1400A21259 /* simpleselector.12.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.12.p; sourceTree = ""; }; - C1EA67A81680FE1400A21259 /* simpleselector.13.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.13.css; sourceTree = ""; }; - C1EA67A91680FE1400A21259 /* simpleselector.13.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.13.l; sourceTree = ""; }; - C1EA67AA1680FE1400A21259 /* simpleselector.13.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.13.p; sourceTree = ""; }; - C1EA67AB1680FE1400A21259 /* simpleselector.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.2.css; sourceTree = ""; }; - C1EA67AC1680FE1400A21259 /* simpleselector.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.2.l; sourceTree = ""; }; - C1EA67AD1680FE1400A21259 /* simpleselector.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.2.p; sourceTree = ""; }; - C1EA67AE1680FE1400A21259 /* simpleselector.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.3.css; sourceTree = ""; }; - C1EA67AF1680FE1400A21259 /* simpleselector.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.3.l; sourceTree = ""; }; - C1EA67B01680FE1400A21259 /* simpleselector.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.3.p; sourceTree = ""; }; - C1EA67B11680FE1400A21259 /* simpleselector.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.4.css; sourceTree = ""; }; - C1EA67B21680FE1400A21259 /* simpleselector.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.4.l; sourceTree = ""; }; - C1EA67B31680FE1400A21259 /* simpleselector.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.4.p; sourceTree = ""; }; - C1EA67B41680FE1400A21259 /* simpleselector.5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.5.css; sourceTree = ""; }; - C1EA67B51680FE1400A21259 /* simpleselector.5.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.5.l; sourceTree = ""; }; - C1EA67B61680FE1400A21259 /* simpleselector.5.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.5.p; sourceTree = ""; }; - C1EA67B71680FE1400A21259 /* simpleselector.6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.6.css; sourceTree = ""; }; - C1EA67B81680FE1400A21259 /* simpleselector.6.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.6.l; sourceTree = ""; }; - C1EA67B91680FE1400A21259 /* simpleselector.6.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.6.p; sourceTree = ""; }; - C1EA67BA1680FE1400A21259 /* simpleselector.7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.7.css; sourceTree = ""; }; - C1EA67BB1680FE1400A21259 /* simpleselector.7.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.7.l; sourceTree = ""; }; - C1EA67BC1680FE1400A21259 /* simpleselector.7.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.7.p; sourceTree = ""; }; - C1EA67BD1680FE1400A21259 /* simpleselector.8.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.8.css; sourceTree = ""; }; - C1EA67BE1680FE1400A21259 /* simpleselector.8.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.8.l; sourceTree = ""; }; - C1EA67BF1680FE1400A21259 /* simpleselector.8.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.8.p; sourceTree = ""; }; - C1EA67C01680FE1400A21259 /* simpleselector.9.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.9.css; sourceTree = ""; }; - C1EA67C11680FE1400A21259 /* simpleselector.9.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.9.l; sourceTree = ""; }; - C1EA67C21680FE1400A21259 /* simpleselector.9.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.9.p; sourceTree = ""; }; - C1EA67C31680FE1400A21259 /* simpleselector.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.c.0.css; sourceTree = ""; }; - C1EA67C41680FE1400A21259 /* simpleselector.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.c.0.l; sourceTree = ""; }; - C1EA67C51680FE1400A21259 /* simpleselector.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.c.0.p; sourceTree = ""; }; - C1EA67C61680FE1400A21259 /* simpleselector.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.c.1.css; sourceTree = ""; }; - C1EA67C71680FE1400A21259 /* simpleselector.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.c.1.l; sourceTree = ""; }; - C1EA67C81680FE1400A21259 /* simpleselector.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.c.1.p; sourceTree = ""; }; - C1EA67C91680FE1400A21259 /* simpleselector.c.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.c.2.css; sourceTree = ""; }; - C1EA67CA1680FE1400A21259 /* simpleselector.c.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.c.2.l; sourceTree = ""; }; - C1EA67CB1680FE1400A21259 /* simpleselector.c.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.c.2.p; sourceTree = ""; }; - C1EA67CC1680FE1400A21259 /* simpleselector.c.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.c.3.css; sourceTree = ""; }; - C1EA67CD1680FE1400A21259 /* simpleselector.c.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.c.3.l; sourceTree = ""; }; - C1EA67CE1680FE1400A21259 /* simpleselector.c.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.c.3.p; sourceTree = ""; }; - C1EA67CF1680FE1400A21259 /* simpleselector.c.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.c.4.css; sourceTree = ""; }; - C1EA67D01680FE1400A21259 /* simpleselector.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.s.0.css; sourceTree = ""; }; - C1EA67D11680FE1400A21259 /* simpleselector.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.s.0.l; sourceTree = ""; }; - C1EA67D21680FE1400A21259 /* simpleselector.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.s.0.p; sourceTree = ""; }; - C1EA67D31680FE1400A21259 /* simpleselector.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.s.1.css; sourceTree = ""; }; - C1EA67D41680FE1400A21259 /* simpleselector.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.s.1.l; sourceTree = ""; }; - C1EA67D51680FE1400A21259 /* simpleselector.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.s.1.p; sourceTree = ""; }; - C1EA67D61680FE1400A21259 /* simpleselector.s.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.s.2.css; sourceTree = ""; }; - C1EA67D71680FE1400A21259 /* simpleselector.s.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.s.2.l; sourceTree = ""; }; - C1EA67D81680FE1400A21259 /* simpleselector.s.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.s.2.p; sourceTree = ""; }; - C1EA67D91680FE1400A21259 /* simpleselector.s.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.s.3.css; sourceTree = ""; }; - C1EA67DA1680FE1400A21259 /* simpleselector.s.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.s.3.l; sourceTree = ""; }; - C1EA67DB1680FE1400A21259 /* simpleselector.s.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.s.3.p; sourceTree = ""; }; - C1EA67DC1680FE1400A21259 /* simpleselector.s.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = simpleselector.s.4.css; sourceTree = ""; }; - C1EA67DD1680FE1400A21259 /* simpleselector.s.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = simpleselector.s.4.l; sourceTree = ""; }; - C1EA67DE1680FE1400A21259 /* simpleselector.s.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = simpleselector.s.4.p; sourceTree = ""; }; - C1EA67E01680FE1400A21259 /* string.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = string.0.css; sourceTree = ""; }; - C1EA67E11680FE1400A21259 /* string.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = string.0.l; sourceTree = ""; }; - C1EA67E21680FE1400A21259 /* string.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = string.0.p; sourceTree = ""; }; - C1EA67E31680FE1400A21259 /* string.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = string.1.css; sourceTree = ""; }; - C1EA67E41680FE1400A21259 /* string.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = string.1.l; sourceTree = ""; }; - C1EA67E51680FE1400A21259 /* string.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = string.1.p; sourceTree = ""; }; - C1EA67E61680FE1400A21259 /* string.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = string.2.css; sourceTree = ""; }; - C1EA67E71680FE1400A21259 /* string.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = string.2.l; sourceTree = ""; }; - C1EA67E81680FE1400A21259 /* string.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = string.2.p; sourceTree = ""; }; - C1EA67E91680FE1400A21259 /* string.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = string.3.css; sourceTree = ""; }; - C1EA67EA1680FE1400A21259 /* string.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = string.3.l; sourceTree = ""; }; - C1EA67EB1680FE1400A21259 /* string.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = string.3.p; sourceTree = ""; }; - C1EA67ED1680FE1400A21259 /* compress.attrib.string.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.attrib.string.test1.cl; sourceTree = ""; }; - C1EA67EE1680FE1400A21259 /* compress.attrib.string.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.attrib.string.test1.css; sourceTree = ""; }; - C1EA67EF1680FE1400A21259 /* compress.attrib.string.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.attrib.string.test2.cl; sourceTree = ""; }; - C1EA67F01680FE1400A21259 /* compress.attrib.string.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.attrib.string.test2.css; sourceTree = ""; }; - C1EA67F11680FE1400A21259 /* compress.colormark.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.colormark.test1.cl; sourceTree = ""; }; - C1EA67F21680FE1400A21259 /* compress.colormark.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.colormark.test1.css; sourceTree = ""; }; - C1EA67F31680FE1400A21259 /* compress.css21.part15.6.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part15.6.test1.cl; sourceTree = ""; }; - C1EA67F41680FE1400A21259 /* compress.css21.part15.6.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part15.6.test1.css; sourceTree = ""; }; - C1EA67F51680FE1400A21259 /* compress.css21.part4.3.2.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.2.test1.cl; sourceTree = ""; }; - C1EA67F61680FE1400A21259 /* compress.css21.part4.3.2.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.2.test1.css; sourceTree = ""; }; - C1EA67F71680FE1400A21259 /* compress.css21.part4.3.2.test10.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.2.test10.cl; sourceTree = ""; }; - C1EA67F81680FE1400A21259 /* compress.css21.part4.3.2.test10.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.2.test10.css; sourceTree = ""; }; - C1EA67F91680FE1400A21259 /* compress.css21.part4.3.2.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.2.test2.cl; sourceTree = ""; }; - C1EA67FA1680FE1400A21259 /* compress.css21.part4.3.2.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.2.test2.css; sourceTree = ""; }; - C1EA67FB1680FE1400A21259 /* compress.css21.part4.3.2.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.2.test3.cl; sourceTree = ""; }; - C1EA67FC1680FE1400A21259 /* compress.css21.part4.3.2.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.2.test3.css; sourceTree = ""; }; - C1EA67FD1680FE1400A21259 /* compress.css21.part4.3.2.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.2.test4.cl; sourceTree = ""; }; - C1EA67FE1680FE1400A21259 /* compress.css21.part4.3.2.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.2.test4.css; sourceTree = ""; }; - C1EA67FF1680FE1400A21259 /* compress.css21.part4.3.2.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.2.test5.cl; sourceTree = ""; }; - C1EA68001680FE1400A21259 /* compress.css21.part4.3.2.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.2.test5.css; sourceTree = ""; }; - C1EA68011680FE1400A21259 /* compress.css21.part4.3.2.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.2.test6.cl; sourceTree = ""; }; - C1EA68021680FE1400A21259 /* compress.css21.part4.3.2.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.2.test6.css; sourceTree = ""; }; - C1EA68031680FE1400A21259 /* compress.css21.part4.3.2.test7.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.2.test7.cl; sourceTree = ""; }; - C1EA68041680FE1400A21259 /* compress.css21.part4.3.2.test7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.2.test7.css; sourceTree = ""; }; - C1EA68051680FE1400A21259 /* compress.css21.part4.3.2.test8.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.2.test8.cl; sourceTree = ""; }; - C1EA68061680FE1400A21259 /* compress.css21.part4.3.2.test8.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.2.test8.css; sourceTree = ""; }; - C1EA68071680FE1400A21259 /* compress.css21.part4.3.2.test9.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.2.test9.cl; sourceTree = ""; }; - C1EA68081680FE1400A21259 /* compress.css21.part4.3.2.test9.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.2.test9.css; sourceTree = ""; }; - C1EA68091680FE1400A21259 /* compress.css21.part4.3.4.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.4.test1.cl; sourceTree = ""; }; - C1EA680A1680FE1400A21259 /* compress.css21.part4.3.4.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.4.test1.css; sourceTree = ""; }; - C1EA680B1680FE1400A21259 /* compress.css21.part4.3.4.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.4.test2.cl; sourceTree = ""; }; - C1EA680C1680FE1400A21259 /* compress.css21.part4.3.4.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.4.test2.css; sourceTree = ""; }; - C1EA680D1680FE1400A21259 /* compress.css21.part4.3.4.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.4.test3.cl; sourceTree = ""; }; - C1EA680E1680FE1400A21259 /* compress.css21.part4.3.4.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.4.test3.css; sourceTree = ""; }; - C1EA680F1680FE1400A21259 /* compress.css21.part4.3.4.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.4.test4.cl; sourceTree = ""; }; - C1EA68101680FE1400A21259 /* compress.css21.part4.3.4.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.4.test4.css; sourceTree = ""; }; - C1EA68111680FE1400A21259 /* compress.css21.part4.3.4.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.4.test5.cl; sourceTree = ""; }; - C1EA68121680FE1400A21259 /* compress.css21.part4.3.4.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.4.test5.css; sourceTree = ""; }; - C1EA68131680FE1400A21259 /* compress.css21.part4.3.4.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.4.test6.cl; sourceTree = ""; }; - C1EA68141680FE1400A21259 /* compress.css21.part4.3.4.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.4.test6.css; sourceTree = ""; }; - C1EA68151680FE1400A21259 /* compress.css21.part4.3.4.test7.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.4.test7.cl; sourceTree = ""; }; - C1EA68161680FE1400A21259 /* compress.css21.part4.3.4.test7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.4.test7.css; sourceTree = ""; }; - C1EA68171680FE1400A21259 /* compress.css21.part4.3.4.test8.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.4.test8.cl; sourceTree = ""; }; - C1EA68181680FE1400A21259 /* compress.css21.part4.3.4.test8.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.4.test8.css; sourceTree = ""; }; - C1EA68191680FE1400A21259 /* compress.css21.part4.3.4.test9.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.4.test9.cl; sourceTree = ""; }; - C1EA681A1680FE1400A21259 /* compress.css21.part4.3.4.test9.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.4.test9.css; sourceTree = ""; }; - C1EA681B1680FE1400A21259 /* compress.css21.part4.3.6.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.6.test1.cl; sourceTree = ""; }; - C1EA681C1680FE1400A21259 /* compress.css21.part4.3.6.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.6.test1.css; sourceTree = ""; }; - C1EA681D1680FE1400A21259 /* compress.css21.part4.3.6.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.6.test2.cl; sourceTree = ""; }; - C1EA681E1680FE1400A21259 /* compress.css21.part4.3.6.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.6.test2.css; sourceTree = ""; }; - C1EA681F1680FE1400A21259 /* compress.css21.part4.3.6.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.6.test3.cl; sourceTree = ""; }; - C1EA68201680FE1400A21259 /* compress.css21.part4.3.6.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.6.test3.css; sourceTree = ""; }; - C1EA68211680FE1400A21259 /* compress.css21.part4.3.6.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.6.test4.cl; sourceTree = ""; }; - C1EA68221680FE1400A21259 /* compress.css21.part4.3.6.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.6.test4.css; sourceTree = ""; }; - C1EA68231680FE1400A21259 /* compress.css21.part4.3.6.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.6.test5.cl; sourceTree = ""; }; - C1EA68241680FE1400A21259 /* compress.css21.part4.3.6.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.6.test5.css; sourceTree = ""; }; - C1EA68251680FE1400A21259 /* compress.css21.part4.3.6.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.6.test6.cl; sourceTree = ""; }; - C1EA68261680FE1400A21259 /* compress.css21.part4.3.6.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.6.test6.css; sourceTree = ""; }; - C1EA68271680FE1400A21259 /* compress.css21.part4.3.6.test7.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.6.test7.cl; sourceTree = ""; }; - C1EA68281680FE1400A21259 /* compress.css21.part4.3.6.test7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.6.test7.css; sourceTree = ""; }; - C1EA68291680FE1400A21259 /* compress.css21.part4.3.6.test8.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.6.test8.cl; sourceTree = ""; }; - C1EA682A1680FE1400A21259 /* compress.css21.part4.3.6.test8.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.6.test8.css; sourceTree = ""; }; - C1EA682B1680FE1400A21259 /* compress.css21.part4.3.7.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.7.test1.cl; sourceTree = ""; }; - C1EA682C1680FE1400A21259 /* compress.css21.part4.3.7.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.7.test1.css; sourceTree = ""; }; - C1EA682D1680FE1400A21259 /* compress.css21.part4.3.7.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.7.test2.cl; sourceTree = ""; }; - C1EA682E1680FE1400A21259 /* compress.css21.part4.3.7.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.7.test2.css; sourceTree = ""; }; - C1EA682F1680FE1400A21259 /* compress.css21.part4.3.7.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.7.test3.cl; sourceTree = ""; }; - C1EA68301680FE1400A21259 /* compress.css21.part4.3.7.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.7.test3.css; sourceTree = ""; }; - C1EA68311680FE1400A21259 /* compress.css21.part4.3.7.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.7.test4.cl; sourceTree = ""; }; - C1EA68321680FE1400A21259 /* compress.css21.part4.3.7.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.7.test4.css; sourceTree = ""; }; - C1EA68331680FE1400A21259 /* compress.css21.part4.3.7.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.7.test5.cl; sourceTree = ""; }; - C1EA68341680FE1400A21259 /* compress.css21.part4.3.7.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.7.test5.css; sourceTree = ""; }; - C1EA68351680FE1400A21259 /* compress.css21.part4.3.7.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.3.7.test6.cl; sourceTree = ""; }; - C1EA68361680FE1400A21259 /* compress.css21.part4.3.7.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.3.7.test6.css; sourceTree = ""; }; - C1EA68371680FE1400A21259 /* compress.css21.part4.4.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.4.test1.cl; sourceTree = ""; }; - C1EA68381680FE1400A21259 /* compress.css21.part4.4.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.4.test1.css; sourceTree = ""; }; - C1EA68391680FE1400A21259 /* compress.css21.part4.4.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.4.test2.cl; sourceTree = ""; }; - C1EA683A1680FE1400A21259 /* compress.css21.part4.4.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.4.test2.css; sourceTree = ""; }; - C1EA683B1680FE1400A21259 /* compress.css21.part4.4.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part4.4.test3.cl; sourceTree = ""; }; - C1EA683C1680FE1400A21259 /* compress.css21.part4.4.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part4.4.test3.css; sourceTree = ""; }; - C1EA683D1680FE1400A21259 /* compress.css21.part6.3.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part6.3.test1.cl; sourceTree = ""; }; - C1EA683E1680FE1400A21259 /* compress.css21.part6.3.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part6.3.test1.css; sourceTree = ""; }; - C1EA683F1680FE1400A21259 /* compress.css21.part6.3.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part6.3.test2.cl; sourceTree = ""; }; - C1EA68401680FE1400A21259 /* compress.css21.part6.3.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part6.3.test2.css; sourceTree = ""; }; - C1EA68411680FE1400A21259 /* compress.css21.part6.3.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part6.3.test3.cl; sourceTree = ""; }; - C1EA68421680FE1400A21259 /* compress.css21.part6.3.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part6.3.test3.css; sourceTree = ""; }; - C1EA68431680FE1400A21259 /* compress.css21.part6.3.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part6.3.test4.cl; sourceTree = ""; }; - C1EA68441680FE1400A21259 /* compress.css21.part6.3.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part6.3.test4.css; sourceTree = ""; }; - C1EA68451680FE1400A21259 /* compress.css21.part6.3.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part6.3.test5.cl; sourceTree = ""; }; - C1EA68461680FE1400A21259 /* compress.css21.part6.3.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part6.3.test5.css; sourceTree = ""; }; - C1EA68471680FE1400A21259 /* compress.css21.part6.3.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part6.3.test6.cl; sourceTree = ""; }; - C1EA68481680FE1400A21259 /* compress.css21.part6.3.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part6.3.test6.css; sourceTree = ""; }; - C1EA68491680FE1400A21259 /* compress.css21.part6.4.2.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part6.4.2.test1.cl; sourceTree = ""; }; - C1EA684A1680FE1400A21259 /* compress.css21.part6.4.2.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part6.4.2.test1.css; sourceTree = ""; }; - C1EA684B1680FE1400A21259 /* compress.css21.part6.4.2.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part6.4.2.test2.cl; sourceTree = ""; }; - C1EA684C1680FE1400A21259 /* compress.css21.part6.4.2.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part6.4.2.test2.css; sourceTree = ""; }; - C1EA684D1680FE1400A21259 /* compress.css21.part6.4.2.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part6.4.2.test3.cl; sourceTree = ""; }; - C1EA684E1680FE1400A21259 /* compress.css21.part6.4.2.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part6.4.2.test3.css; sourceTree = ""; }; - C1EA684F1680FE1400A21259 /* compress.css21.part7.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part7.test1.cl; sourceTree = ""; }; - C1EA68501680FE1400A21259 /* compress.css21.part7.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part7.test1.css; sourceTree = ""; }; - C1EA68511680FE1400A21259 /* compress.css21.part7.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css21.part7.test2.cl; sourceTree = ""; }; - C1EA68521680FE1400A21259 /* compress.css21.part7.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css21.part7.test2.css; sourceTree = ""; }; - C1EA68531680FE1400A21259 /* compress.css3.selectors.part2.test1.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test1.c.cl; sourceTree = ""; }; - C1EA68541680FE1400A21259 /* compress.css3.selectors.part2.test1.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test1.c.css; sourceTree = ""; }; - C1EA68551680FE1400A21259 /* compress.css3.selectors.part2.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test1.cl; sourceTree = ""; }; - C1EA68561680FE1400A21259 /* compress.css3.selectors.part2.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test1.css; sourceTree = ""; }; - C1EA68571680FE1400A21259 /* compress.css3.selectors.part2.test10.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test10.c.cl; sourceTree = ""; }; - C1EA68581680FE1400A21259 /* compress.css3.selectors.part2.test10.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test10.c.css; sourceTree = ""; }; - C1EA68591680FE1400A21259 /* compress.css3.selectors.part2.test10.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test10.cl; sourceTree = ""; }; - C1EA685A1680FE1400A21259 /* compress.css3.selectors.part2.test10.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test10.css; sourceTree = ""; }; - C1EA685B1680FE1400A21259 /* compress.css3.selectors.part2.test11.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test11.c.cl; sourceTree = ""; }; - C1EA685C1680FE1400A21259 /* compress.css3.selectors.part2.test11.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test11.c.css; sourceTree = ""; }; - C1EA685D1680FE1400A21259 /* compress.css3.selectors.part2.test11.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test11.cl; sourceTree = ""; }; - C1EA685E1680FE1400A21259 /* compress.css3.selectors.part2.test11.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test11.css; sourceTree = ""; }; - C1EA685F1680FE1400A21259 /* compress.css3.selectors.part2.test12.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test12.c.cl; sourceTree = ""; }; - C1EA68601680FE1400A21259 /* compress.css3.selectors.part2.test12.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test12.c.css; sourceTree = ""; }; - C1EA68611680FE1400A21259 /* compress.css3.selectors.part2.test12.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test12.cl; sourceTree = ""; }; - C1EA68621680FE1400A21259 /* compress.css3.selectors.part2.test12.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test12.css; sourceTree = ""; }; - C1EA68631680FE1400A21259 /* compress.css3.selectors.part2.test13.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test13.c.cl; sourceTree = ""; }; - C1EA68641680FE1400A21259 /* compress.css3.selectors.part2.test13.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test13.c.css; sourceTree = ""; }; - C1EA68651680FE1400A21259 /* compress.css3.selectors.part2.test13.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test13.cl; sourceTree = ""; }; - C1EA68661680FE1400A21259 /* compress.css3.selectors.part2.test13.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test13.css; sourceTree = ""; }; - C1EA68671680FE1400A21259 /* compress.css3.selectors.part2.test14.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test14.c.cl; sourceTree = ""; }; - C1EA68681680FE1400A21259 /* compress.css3.selectors.part2.test14.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test14.c.css; sourceTree = ""; }; - C1EA68691680FE1400A21259 /* compress.css3.selectors.part2.test14.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test14.cl; sourceTree = ""; }; - C1EA686A1680FE1400A21259 /* compress.css3.selectors.part2.test14.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test14.css; sourceTree = ""; }; - C1EA686B1680FE1400A21259 /* compress.css3.selectors.part2.test15.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test15.c.cl; sourceTree = ""; }; - C1EA686C1680FE1400A21259 /* compress.css3.selectors.part2.test15.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test15.c.css; sourceTree = ""; }; - C1EA686D1680FE1400A21259 /* compress.css3.selectors.part2.test15.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test15.cl; sourceTree = ""; }; - C1EA686E1680FE1400A21259 /* compress.css3.selectors.part2.test15.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test15.css; sourceTree = ""; }; - C1EA686F1680FE1400A21259 /* compress.css3.selectors.part2.test16.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test16.c.cl; sourceTree = ""; }; - C1EA68701680FE1400A21259 /* compress.css3.selectors.part2.test16.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test16.c.css; sourceTree = ""; }; - C1EA68711680FE1400A21259 /* compress.css3.selectors.part2.test16.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test16.cl; sourceTree = ""; }; - C1EA68721680FE1400A21259 /* compress.css3.selectors.part2.test16.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test16.css; sourceTree = ""; }; - C1EA68731680FE1400A21259 /* compress.css3.selectors.part2.test17.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test17.c.cl; sourceTree = ""; }; - C1EA68741680FE1400A21259 /* compress.css3.selectors.part2.test17.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test17.c.css; sourceTree = ""; }; - C1EA68751680FE1400A21259 /* compress.css3.selectors.part2.test17.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test17.cl; sourceTree = ""; }; - C1EA68761680FE1400A21259 /* compress.css3.selectors.part2.test17.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test17.css; sourceTree = ""; }; - C1EA68771680FE1400A21259 /* compress.css3.selectors.part2.test18.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test18.c.cl; sourceTree = ""; }; - C1EA68781680FE1400A21259 /* compress.css3.selectors.part2.test18.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test18.c.css; sourceTree = ""; }; - C1EA68791680FE1400A21259 /* compress.css3.selectors.part2.test18.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test18.cl; sourceTree = ""; }; - C1EA687A1680FE1400A21259 /* compress.css3.selectors.part2.test18.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test18.css; sourceTree = ""; }; - C1EA687B1680FE1400A21259 /* compress.css3.selectors.part2.test19.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test19.c.cl; sourceTree = ""; }; - C1EA687C1680FE1400A21259 /* compress.css3.selectors.part2.test19.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test19.c.css; sourceTree = ""; }; - C1EA687D1680FE1400A21259 /* compress.css3.selectors.part2.test19.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test19.cl; sourceTree = ""; }; - C1EA687E1680FE1400A21259 /* compress.css3.selectors.part2.test19.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test19.css; sourceTree = ""; }; - C1EA687F1680FE1400A21259 /* compress.css3.selectors.part2.test2.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test2.c.cl; sourceTree = ""; }; - C1EA68801680FE1400A21259 /* compress.css3.selectors.part2.test2.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test2.c.css; sourceTree = ""; }; - C1EA68811680FE1400A21259 /* compress.css3.selectors.part2.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test2.cl; sourceTree = ""; }; - C1EA68821680FE1400A21259 /* compress.css3.selectors.part2.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test2.css; sourceTree = ""; }; - C1EA68831680FE1400A21259 /* compress.css3.selectors.part2.test20.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test20.c.cl; sourceTree = ""; }; - C1EA68841680FE1400A21259 /* compress.css3.selectors.part2.test20.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test20.c.css; sourceTree = ""; }; - C1EA68851680FE1400A21259 /* compress.css3.selectors.part2.test20.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test20.cl; sourceTree = ""; }; - C1EA68861680FE1400A21259 /* compress.css3.selectors.part2.test20.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test20.css; sourceTree = ""; }; - C1EA68871680FE1400A21259 /* compress.css3.selectors.part2.test21.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test21.c.cl; sourceTree = ""; }; - C1EA68881680FE1400A21259 /* compress.css3.selectors.part2.test21.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test21.c.css; sourceTree = ""; }; - C1EA68891680FE1400A21259 /* compress.css3.selectors.part2.test21.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test21.cl; sourceTree = ""; }; - C1EA688A1680FE1400A21259 /* compress.css3.selectors.part2.test21.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test21.css; sourceTree = ""; }; - C1EA688B1680FE1400A21259 /* compress.css3.selectors.part2.test22.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test22.c.cl; sourceTree = ""; }; - C1EA688C1680FE1400A21259 /* compress.css3.selectors.part2.test22.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test22.c.css; sourceTree = ""; }; - C1EA688D1680FE1400A21259 /* compress.css3.selectors.part2.test22.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test22.cl; sourceTree = ""; }; - C1EA688E1680FE1400A21259 /* compress.css3.selectors.part2.test22.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test22.css; sourceTree = ""; }; - C1EA688F1680FE1400A21259 /* compress.css3.selectors.part2.test23.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test23.c.cl; sourceTree = ""; }; - C1EA68901680FE1400A21259 /* compress.css3.selectors.part2.test23.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test23.c.css; sourceTree = ""; }; - C1EA68911680FE1400A21259 /* compress.css3.selectors.part2.test23.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test23.cl; sourceTree = ""; }; - C1EA68921680FE1400A21259 /* compress.css3.selectors.part2.test23.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test23.css; sourceTree = ""; }; - C1EA68931680FE1400A21259 /* compress.css3.selectors.part2.test24.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test24.c.cl; sourceTree = ""; }; - C1EA68941680FE1400A21259 /* compress.css3.selectors.part2.test24.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test24.c.css; sourceTree = ""; }; - C1EA68951680FE1400A21259 /* compress.css3.selectors.part2.test24.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test24.cl; sourceTree = ""; }; - C1EA68961680FE1400A21259 /* compress.css3.selectors.part2.test24.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test24.css; sourceTree = ""; }; - C1EA68971680FE1400A21259 /* compress.css3.selectors.part2.test25.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test25.c.cl; sourceTree = ""; }; - C1EA68981680FE1400A21259 /* compress.css3.selectors.part2.test25.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test25.c.css; sourceTree = ""; }; - C1EA68991680FE1400A21259 /* compress.css3.selectors.part2.test25.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test25.cl; sourceTree = ""; }; - C1EA689A1680FE1400A21259 /* compress.css3.selectors.part2.test25.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test25.css; sourceTree = ""; }; - C1EA689B1680FE1400A21259 /* compress.css3.selectors.part2.test26.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test26.c.cl; sourceTree = ""; }; - C1EA689C1680FE1400A21259 /* compress.css3.selectors.part2.test26.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test26.c.css; sourceTree = ""; }; - C1EA689D1680FE1400A21259 /* compress.css3.selectors.part2.test26.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test26.cl; sourceTree = ""; }; - C1EA689E1680FE1400A21259 /* compress.css3.selectors.part2.test26.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test26.css; sourceTree = ""; }; - C1EA689F1680FE1400A21259 /* compress.css3.selectors.part2.test27.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test27.c.cl; sourceTree = ""; }; - C1EA68A01680FE1400A21259 /* compress.css3.selectors.part2.test27.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test27.c.css; sourceTree = ""; }; - C1EA68A11680FE1400A21259 /* compress.css3.selectors.part2.test27.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test27.cl; sourceTree = ""; }; - C1EA68A21680FE1400A21259 /* compress.css3.selectors.part2.test27.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test27.css; sourceTree = ""; }; - C1EA68A31680FE1400A21259 /* compress.css3.selectors.part2.test28.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test28.c.cl; sourceTree = ""; }; - C1EA68A41680FE1400A21259 /* compress.css3.selectors.part2.test28.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test28.c.css; sourceTree = ""; }; - C1EA68A51680FE1400A21259 /* compress.css3.selectors.part2.test28.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test28.cl; sourceTree = ""; }; - C1EA68A61680FE1400A21259 /* compress.css3.selectors.part2.test28.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test28.css; sourceTree = ""; }; - C1EA68A71680FE1400A21259 /* compress.css3.selectors.part2.test29.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test29.c.cl; sourceTree = ""; }; - C1EA68A81680FE1400A21259 /* compress.css3.selectors.part2.test29.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test29.c.css; sourceTree = ""; }; - C1EA68A91680FE1400A21259 /* compress.css3.selectors.part2.test29.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test29.cl; sourceTree = ""; }; - C1EA68AA1680FE1400A21259 /* compress.css3.selectors.part2.test29.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test29.css; sourceTree = ""; }; - C1EA68AB1680FE1400A21259 /* compress.css3.selectors.part2.test3.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test3.c.cl; sourceTree = ""; }; - C1EA68AC1680FE1400A21259 /* compress.css3.selectors.part2.test3.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test3.c.css; sourceTree = ""; }; - C1EA68AD1680FE1400A21259 /* compress.css3.selectors.part2.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test3.cl; sourceTree = ""; }; - C1EA68AE1680FE1400A21259 /* compress.css3.selectors.part2.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test3.css; sourceTree = ""; }; - C1EA68AF1680FE1400A21259 /* compress.css3.selectors.part2.test30.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test30.c.cl; sourceTree = ""; }; - C1EA68B01680FE1400A21259 /* compress.css3.selectors.part2.test30.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test30.c.css; sourceTree = ""; }; - C1EA68B11680FE1400A21259 /* compress.css3.selectors.part2.test30.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test30.cl; sourceTree = ""; }; - C1EA68B21680FE1400A21259 /* compress.css3.selectors.part2.test30.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test30.css; sourceTree = ""; }; - C1EA68B31680FE1400A21259 /* compress.css3.selectors.part2.test31.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test31.c.cl; sourceTree = ""; }; - C1EA68B41680FE1400A21259 /* compress.css3.selectors.part2.test31.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test31.c.css; sourceTree = ""; }; - C1EA68B51680FE1400A21259 /* compress.css3.selectors.part2.test31.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test31.cl; sourceTree = ""; }; - C1EA68B61680FE1400A21259 /* compress.css3.selectors.part2.test31.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test31.css; sourceTree = ""; }; - C1EA68B71680FE1400A21259 /* compress.css3.selectors.part2.test32.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test32.c.cl; sourceTree = ""; }; - C1EA68B81680FE1400A21259 /* compress.css3.selectors.part2.test32.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test32.c.css; sourceTree = ""; }; - C1EA68B91680FE1400A21259 /* compress.css3.selectors.part2.test32.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test32.cl; sourceTree = ""; }; - C1EA68BA1680FE1400A21259 /* compress.css3.selectors.part2.test32.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test32.css; sourceTree = ""; }; - C1EA68BB1680FE1400A21259 /* compress.css3.selectors.part2.test33.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test33.c.cl; sourceTree = ""; }; - C1EA68BC1680FE1400A21259 /* compress.css3.selectors.part2.test33.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test33.c.css; sourceTree = ""; }; - C1EA68BD1680FE1400A21259 /* compress.css3.selectors.part2.test33.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test33.cl; sourceTree = ""; }; - C1EA68BE1680FE1400A21259 /* compress.css3.selectors.part2.test33.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test33.css; sourceTree = ""; }; - C1EA68BF1680FE1400A21259 /* compress.css3.selectors.part2.test34.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test34.c.cl; sourceTree = ""; }; - C1EA68C01680FE1400A21259 /* compress.css3.selectors.part2.test34.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test34.c.css; sourceTree = ""; }; - C1EA68C11680FE1400A21259 /* compress.css3.selectors.part2.test34.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test34.cl; sourceTree = ""; }; - C1EA68C21680FE1400A21259 /* compress.css3.selectors.part2.test34.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test34.css; sourceTree = ""; }; - C1EA68C31680FE1400A21259 /* compress.css3.selectors.part2.test35.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test35.c.cl; sourceTree = ""; }; - C1EA68C41680FE1400A21259 /* compress.css3.selectors.part2.test35.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test35.c.css; sourceTree = ""; }; - C1EA68C51680FE1400A21259 /* compress.css3.selectors.part2.test35.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test35.cl; sourceTree = ""; }; - C1EA68C61680FE1400A21259 /* compress.css3.selectors.part2.test35.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test35.css; sourceTree = ""; }; - C1EA68C71680FE1400A21259 /* compress.css3.selectors.part2.test36.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test36.c.cl; sourceTree = ""; }; - C1EA68C81680FE1400A21259 /* compress.css3.selectors.part2.test36.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test36.c.css; sourceTree = ""; }; - C1EA68C91680FE1400A21259 /* compress.css3.selectors.part2.test36.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test36.cl; sourceTree = ""; }; - C1EA68CA1680FE1400A21259 /* compress.css3.selectors.part2.test36.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test36.css; sourceTree = ""; }; - C1EA68CB1680FE1400A21259 /* compress.css3.selectors.part2.test37.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test37.c.cl; sourceTree = ""; }; - C1EA68CC1680FE1400A21259 /* compress.css3.selectors.part2.test37.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test37.c.css; sourceTree = ""; }; - C1EA68CD1680FE1400A21259 /* compress.css3.selectors.part2.test37.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test37.cl; sourceTree = ""; }; - C1EA68CE1680FE1400A21259 /* compress.css3.selectors.part2.test37.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test37.css; sourceTree = ""; }; - C1EA68CF1680FE1400A21259 /* compress.css3.selectors.part2.test38.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test38.c.cl; sourceTree = ""; }; - C1EA68D01680FE1400A21259 /* compress.css3.selectors.part2.test38.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test38.c.css; sourceTree = ""; }; - C1EA68D11680FE1400A21259 /* compress.css3.selectors.part2.test38.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test38.cl; sourceTree = ""; }; - C1EA68D21680FE1400A21259 /* compress.css3.selectors.part2.test38.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test38.css; sourceTree = ""; }; - C1EA68D31680FE1400A21259 /* compress.css3.selectors.part2.test39.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test39.c.cl; sourceTree = ""; }; - C1EA68D41680FE1400A21259 /* compress.css3.selectors.part2.test39.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test39.c.css; sourceTree = ""; }; - C1EA68D51680FE1400A21259 /* compress.css3.selectors.part2.test39.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test39.cl; sourceTree = ""; }; - C1EA68D61680FE1400A21259 /* compress.css3.selectors.part2.test39.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test39.css; sourceTree = ""; }; - C1EA68D71680FE1400A21259 /* compress.css3.selectors.part2.test4.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test4.c.cl; sourceTree = ""; }; - C1EA68D81680FE1400A21259 /* compress.css3.selectors.part2.test4.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test4.c.css; sourceTree = ""; }; - C1EA68D91680FE1400A21259 /* compress.css3.selectors.part2.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test4.cl; sourceTree = ""; }; - C1EA68DA1680FE1400A21259 /* compress.css3.selectors.part2.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test4.css; sourceTree = ""; }; - C1EA68DB1680FE1400A21259 /* compress.css3.selectors.part2.test40.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test40.c.cl; sourceTree = ""; }; - C1EA68DC1680FE1400A21259 /* compress.css3.selectors.part2.test40.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test40.c.css; sourceTree = ""; }; - C1EA68DD1680FE1400A21259 /* compress.css3.selectors.part2.test40.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test40.cl; sourceTree = ""; }; - C1EA68DE1680FE1400A21259 /* compress.css3.selectors.part2.test40.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test40.css; sourceTree = ""; }; - C1EA68DF1680FE1400A21259 /* compress.css3.selectors.part2.test41.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test41.c.cl; sourceTree = ""; }; - C1EA68E01680FE1400A21259 /* compress.css3.selectors.part2.test41.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test41.c.css; sourceTree = ""; }; - C1EA68E11680FE1400A21259 /* compress.css3.selectors.part2.test41.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test41.cl; sourceTree = ""; }; - C1EA68E21680FE1400A21259 /* compress.css3.selectors.part2.test41.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test41.css; sourceTree = ""; }; - C1EA68E31680FE1400A21259 /* compress.css3.selectors.part2.test42.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test42.c.cl; sourceTree = ""; }; - C1EA68E41680FE1400A21259 /* compress.css3.selectors.part2.test42.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test42.c.css; sourceTree = ""; }; - C1EA68E51680FE1400A21259 /* compress.css3.selectors.part2.test42.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test42.cl; sourceTree = ""; }; - C1EA68E61680FE1400A21259 /* compress.css3.selectors.part2.test42.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test42.css; sourceTree = ""; }; - C1EA68E71680FE1400A21259 /* compress.css3.selectors.part2.test5.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test5.c.cl; sourceTree = ""; }; - C1EA68E81680FE1400A21259 /* compress.css3.selectors.part2.test5.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test5.c.css; sourceTree = ""; }; - C1EA68E91680FE1400A21259 /* compress.css3.selectors.part2.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test5.cl; sourceTree = ""; }; - C1EA68EA1680FE1400A21259 /* compress.css3.selectors.part2.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test5.css; sourceTree = ""; }; - C1EA68EB1680FE1400A21259 /* compress.css3.selectors.part2.test6.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test6.c.cl; sourceTree = ""; }; - C1EA68EC1680FE1400A21259 /* compress.css3.selectors.part2.test6.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test6.c.css; sourceTree = ""; }; - C1EA68ED1680FE1400A21259 /* compress.css3.selectors.part2.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test6.cl; sourceTree = ""; }; - C1EA68EE1680FE1400A21259 /* compress.css3.selectors.part2.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test6.css; sourceTree = ""; }; - C1EA68EF1680FE1400A21259 /* compress.css3.selectors.part2.test7.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test7.c.cl; sourceTree = ""; }; - C1EA68F01680FE1400A21259 /* compress.css3.selectors.part2.test7.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test7.c.css; sourceTree = ""; }; - C1EA68F11680FE1400A21259 /* compress.css3.selectors.part2.test7.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test7.cl; sourceTree = ""; }; - C1EA68F21680FE1400A21259 /* compress.css3.selectors.part2.test7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test7.css; sourceTree = ""; }; - C1EA68F31680FE1400A21259 /* compress.css3.selectors.part2.test8.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test8.c.cl; sourceTree = ""; }; - C1EA68F41680FE1400A21259 /* compress.css3.selectors.part2.test8.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test8.c.css; sourceTree = ""; }; - C1EA68F51680FE1400A21259 /* compress.css3.selectors.part2.test8.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test8.cl; sourceTree = ""; }; - C1EA68F61680FE1400A21259 /* compress.css3.selectors.part2.test8.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test8.css; sourceTree = ""; }; - C1EA68F71680FE1400A21259 /* compress.css3.selectors.part2.test9.c.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test9.c.cl; sourceTree = ""; }; - C1EA68F81680FE1400A21259 /* compress.css3.selectors.part2.test9.c.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test9.c.css; sourceTree = ""; }; - C1EA68F91680FE1400A21259 /* compress.css3.selectors.part2.test9.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.css3.selectors.part2.test9.cl; sourceTree = ""; }; - C1EA68FA1680FE1400A21259 /* compress.css3.selectors.part2.test9.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.css3.selectors.part2.test9.css; sourceTree = ""; }; - C1EA68FB1680FE1400A21259 /* compress.dont.background.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.dont.background.test1.cl; sourceTree = ""; }; - C1EA68FC1680FE1400A21259 /* compress.dont.background.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.dont.background.test1.css; sourceTree = ""; }; - C1EA68FD1680FE1400A21259 /* compress.dont.background.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.dont.background.test2.cl; sourceTree = ""; }; - C1EA68FE1680FE1400A21259 /* compress.dont.background.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.dont.background.test2.css; sourceTree = ""; }; - C1EA68FF1680FE1400A21259 /* compress.dont.background.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.dont.background.test3.cl; sourceTree = ""; }; - C1EA69001680FE1400A21259 /* compress.dont.background.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.dont.background.test3.css; sourceTree = ""; }; - C1EA69011680FE1400A21259 /* compress.dont.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.dont.test1.cl; sourceTree = ""; }; - C1EA69021680FE1400A21259 /* compress.dont.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.dont.test1.css; sourceTree = ""; }; - C1EA69031680FE1400A21259 /* compress.initial.background.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.initial.background.test1.cl; sourceTree = ""; }; - C1EA69041680FE1400A21259 /* compress.initial.background.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.initial.background.test1.css; sourceTree = ""; }; - C1EA69051680FE1400A21259 /* compress.initial.font.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.initial.font.test1.cl; sourceTree = ""; }; - C1EA69061680FE1400A21259 /* compress.initial.font.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.initial.font.test1.css; sourceTree = ""; }; - C1EA69071680FE1400A21259 /* compress.initial.font.test1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = compress.initial.font.test1.l; sourceTree = ""; }; - C1EA69081680FE1400A21259 /* compress.mess.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.mess.test1.cl; sourceTree = ""; }; - C1EA69091680FE1400A21259 /* compress.mess.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.mess.test1.css; sourceTree = ""; }; - C1EA690A1680FE1400A21259 /* compress.mess.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.mess.test2.cl; sourceTree = ""; }; - C1EA690B1680FE1400A21259 /* compress.mess.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.mess.test2.css; sourceTree = ""; }; - C1EA690C1680FE1400A21259 /* compress.mess.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.mess.test3.cl; sourceTree = ""; }; - C1EA690D1680FE1400A21259 /* compress.mess.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.mess.test3.css; sourceTree = ""; }; - C1EA690E1680FE1400A21259 /* compress.mess.test3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = compress.mess.test3.l; sourceTree = ""; }; - C1EA690F1680FE1400A21259 /* compress.restructure.background.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.background.test3.cl; sourceTree = ""; }; - C1EA69101680FE1400A21259 /* compress.restructure.background.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.background.test3.css; sourceTree = ""; }; - C1EA69111680FE1400A21259 /* compress.restructure.empty.atrule.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.empty.atrule.test1.cl; sourceTree = ""; }; - C1EA69121680FE1400A21259 /* compress.restructure.empty.atrule.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.empty.atrule.test1.css; sourceTree = ""; }; - C1EA69131680FE1400A21259 /* compress.restructure.empty.atrule.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.empty.atrule.test2.cl; sourceTree = ""; }; - C1EA69141680FE1400A21259 /* compress.restructure.empty.atrule.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.empty.atrule.test2.css; sourceTree = ""; }; - C1EA69151680FE1400A21259 /* compress.restructure.equal.selectors.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.equal.selectors.test1.cl; sourceTree = ""; }; - C1EA69161680FE1400A21259 /* compress.restructure.equal.selectors.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.equal.selectors.test1.css; sourceTree = ""; }; - C1EA69171680FE1400A21259 /* compress.restructure.equal.selectors.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.equal.selectors.test2.cl; sourceTree = ""; }; - C1EA69181680FE1400A21259 /* compress.restructure.equal.selectors.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.equal.selectors.test2.css; sourceTree = ""; }; - C1EA69191680FE1400A21259 /* compress.restructure.equal.selectors.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.equal.selectors.test3.cl; sourceTree = ""; }; - C1EA691A1680FE1400A21259 /* compress.restructure.equal.selectors.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.equal.selectors.test3.css; sourceTree = ""; }; - C1EA691B1680FE1400A21259 /* compress.restructure.equal.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.equal.test1.cl; sourceTree = ""; }; - C1EA691C1680FE1400A21259 /* compress.restructure.equal.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.equal.test1.css; sourceTree = ""; }; - C1EA691D1680FE1400A21259 /* compress.restructure.equal.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.equal.test2.cl; sourceTree = ""; }; - C1EA691E1680FE1400A21259 /* compress.restructure.equal.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.equal.test2.css; sourceTree = ""; }; - C1EA691F1680FE1400A21259 /* compress.restructure.equal.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.equal.test3.cl; sourceTree = ""; }; - C1EA69201680FE1400A21259 /* compress.restructure.equal.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.equal.test3.css; sourceTree = ""; }; - C1EA69211680FE1400A21259 /* compress.restructure.equal.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.equal.test4.cl; sourceTree = ""; }; - C1EA69221680FE1400A21259 /* compress.restructure.equal.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.equal.test4.css; sourceTree = ""; }; - C1EA69231680FE1400A21259 /* compress.restructure.equal.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.equal.test5.cl; sourceTree = ""; }; - C1EA69241680FE1400A21259 /* compress.restructure.equal.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.equal.test5.css; sourceTree = ""; }; - C1EA69251680FE1400A21259 /* compress.restructure.equal.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.equal.test6.cl; sourceTree = ""; }; - C1EA69261680FE1400A21259 /* compress.restructure.equal.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.equal.test6.css; sourceTree = ""; }; - C1EA69271680FE1400A21259 /* compress.restructure.equal.test7.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.equal.test7.cl; sourceTree = ""; }; - C1EA69281680FE1400A21259 /* compress.restructure.equal.test7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.equal.test7.css; sourceTree = ""; }; - C1EA69291680FE1400A21259 /* compress.restructure.filter.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.filter.test1.cl; sourceTree = ""; }; - C1EA692A1680FE1400A21259 /* compress.restructure.filter.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.filter.test1.css; sourceTree = ""; }; - C1EA692B1680FE1400A21259 /* compress.restructure.margin.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.margin.test1.cl; sourceTree = ""; }; - C1EA692C1680FE1400A21259 /* compress.restructure.margin.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.margin.test1.css; sourceTree = ""; }; - C1EA692D1680FE1400A21259 /* compress.restructure.margin.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.margin.test2.cl; sourceTree = ""; }; - C1EA692E1680FE1400A21259 /* compress.restructure.margin.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.margin.test2.css; sourceTree = ""; }; - C1EA692F1680FE1400A21259 /* compress.restructure.margin.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.margin.test3.cl; sourceTree = ""; }; - C1EA69301680FE1400A21259 /* compress.restructure.margin.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.margin.test3.css; sourceTree = ""; }; - C1EA69311680FE1400A21259 /* compress.restructure.merge.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.merge.test1.cl; sourceTree = ""; }; - C1EA69321680FE1400A21259 /* compress.restructure.merge.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.merge.test1.css; sourceTree = ""; }; - C1EA69331680FE1400A21259 /* compress.restructure.merge.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.merge.test2.cl; sourceTree = ""; }; - C1EA69341680FE1400A21259 /* compress.restructure.merge.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.merge.test2.css; sourceTree = ""; }; - C1EA69351680FE1400A21259 /* compress.restructure.merge.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.merge.test3.cl; sourceTree = ""; }; - C1EA69361680FE1400A21259 /* compress.restructure.merge.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.merge.test3.css; sourceTree = ""; }; - C1EA69371680FE1400A21259 /* compress.restructure.merge.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.merge.test4.cl; sourceTree = ""; }; - C1EA69381680FE1400A21259 /* compress.restructure.merge.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.merge.test4.css; sourceTree = ""; }; - C1EA69391680FE1400A21259 /* compress.restructure.padding.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.padding.test1.cl; sourceTree = ""; }; - C1EA693A1680FE1400A21259 /* compress.restructure.padding.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.padding.test1.css; sourceTree = ""; }; - C1EA693B1680FE1400A21259 /* compress.restructure.padding.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.restructure.padding.test2.cl; sourceTree = ""; }; - C1EA693C1680FE1400A21259 /* compress.restructure.padding.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.restructure.padding.test2.css; sourceTree = ""; }; - C1EA693D1680FE1400A21259 /* compress.shorthand.margin.padding.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.padding.test1.cl; sourceTree = ""; }; - C1EA693E1680FE1400A21259 /* compress.shorthand.margin.padding.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.padding.test1.css; sourceTree = ""; }; - C1EA693F1680FE1400A21259 /* compress.shorthand.margin.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.test1.cl; sourceTree = ""; }; - C1EA69401680FE1400A21259 /* compress.shorthand.margin.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.test1.css; sourceTree = ""; }; - C1EA69411680FE1400A21259 /* compress.shorthand.margin.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.test2.cl; sourceTree = ""; }; - C1EA69421680FE1400A21259 /* compress.shorthand.margin.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.test2.css; sourceTree = ""; }; - C1EA69431680FE1400A21259 /* compress.shorthand.margin.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.test3.cl; sourceTree = ""; }; - C1EA69441680FE1400A21259 /* compress.shorthand.margin.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.test3.css; sourceTree = ""; }; - C1EA69451680FE1400A21259 /* compress.shorthand.margin.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.test4.cl; sourceTree = ""; }; - C1EA69461680FE1400A21259 /* compress.shorthand.margin.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.test4.css; sourceTree = ""; }; - C1EA69471680FE1400A21259 /* compress.shorthand.margin.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.test5.cl; sourceTree = ""; }; - C1EA69481680FE1400A21259 /* compress.shorthand.margin.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.test5.css; sourceTree = ""; }; - C1EA69491680FE1400A21259 /* compress.shorthand.margin.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.test6.cl; sourceTree = ""; }; - C1EA694A1680FE1400A21259 /* compress.shorthand.margin.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.test6.css; sourceTree = ""; }; - C1EA694B1680FE1400A21259 /* compress.shorthand.margin.test7.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.test7.cl; sourceTree = ""; }; - C1EA694C1680FE1400A21259 /* compress.shorthand.margin.test7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.test7.css; sourceTree = ""; }; - C1EA694D1680FE1400A21259 /* compress.shorthand.margin.unary.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.unary.test1.cl; sourceTree = ""; }; - C1EA694E1680FE1400A21259 /* compress.shorthand.margin.unary.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.unary.test1.css; sourceTree = ""; }; - C1EA694F1680FE1400A21259 /* compress.shorthand.margin.unary.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.unary.test2.cl; sourceTree = ""; }; - C1EA69501680FE1400A21259 /* compress.shorthand.margin.unary.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.unary.test2.css; sourceTree = ""; }; - C1EA69511680FE1400A21259 /* compress.shorthand.margin.unary.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.unary.test3.cl; sourceTree = ""; }; - C1EA69521680FE1400A21259 /* compress.shorthand.margin.unary.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.unary.test3.css; sourceTree = ""; }; - C1EA69531680FE1400A21259 /* compress.shorthand.margin.unary.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.unary.test4.cl; sourceTree = ""; }; - C1EA69541680FE1400A21259 /* compress.shorthand.margin.unary.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.unary.test4.css; sourceTree = ""; }; - C1EA69551680FE1400A21259 /* compress.shorthand.margin.unary.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.unary.test5.cl; sourceTree = ""; }; - C1EA69561680FE1400A21259 /* compress.shorthand.margin.unary.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.unary.test5.css; sourceTree = ""; }; - C1EA69571680FE1400A21259 /* compress.shorthand.margin.unary.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.unary.test6.cl; sourceTree = ""; }; - C1EA69581680FE1400A21259 /* compress.shorthand.margin.unary.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.unary.test6.css; sourceTree = ""; }; - C1EA69591680FE1400A21259 /* compress.shorthand.margin.unary.test7.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.margin.unary.test7.cl; sourceTree = ""; }; - C1EA695A1680FE1400A21259 /* compress.shorthand.margin.unary.test7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.margin.unary.test7.css; sourceTree = ""; }; - C1EA695B1680FE1400A21259 /* compress.shorthand.padding.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.padding.test1.cl; sourceTree = ""; }; - C1EA695C1680FE1400A21259 /* compress.shorthand.padding.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.padding.test1.css; sourceTree = ""; }; - C1EA695D1680FE1400A21259 /* compress.shorthand.padding.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.padding.test2.cl; sourceTree = ""; }; - C1EA695E1680FE1400A21259 /* compress.shorthand.padding.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.padding.test2.css; sourceTree = ""; }; - C1EA695F1680FE1400A21259 /* compress.shorthand.padding.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.padding.test3.cl; sourceTree = ""; }; - C1EA69601680FE1400A21259 /* compress.shorthand.padding.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.padding.test3.css; sourceTree = ""; }; - C1EA69611680FE1400A21259 /* compress.shorthand.padding.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.padding.test4.cl; sourceTree = ""; }; - C1EA69621680FE1400A21259 /* compress.shorthand.padding.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.padding.test4.css; sourceTree = ""; }; - C1EA69631680FE1400A21259 /* compress.shorthand.padding.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.padding.test5.cl; sourceTree = ""; }; - C1EA69641680FE1400A21259 /* compress.shorthand.padding.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.padding.test5.css; sourceTree = ""; }; - C1EA69651680FE1400A21259 /* compress.shorthand.padding.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.padding.test6.cl; sourceTree = ""; }; - C1EA69661680FE1400A21259 /* compress.shorthand.padding.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.padding.test6.css; sourceTree = ""; }; - C1EA69671680FE1400A21259 /* compress.shorthand.padding.test7.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = compress.shorthand.padding.test7.cl; sourceTree = ""; }; - C1EA69681680FE1400A21259 /* compress.shorthand.padding.test7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = compress.shorthand.padding.test7.css; sourceTree = ""; }; - C1EA69691680FE1400A21259 /* issue16.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue16.test1.cl; sourceTree = ""; }; - C1EA696A1680FE1400A21259 /* issue16.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue16.test1.css; sourceTree = ""; }; - C1EA696B1680FE1400A21259 /* issue39.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test1.cl; sourceTree = ""; }; - C1EA696C1680FE1400A21259 /* issue39.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test1.css; sourceTree = ""; }; - C1EA696D1680FE1400A21259 /* issue39.test10.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test10.cl; sourceTree = ""; }; - C1EA696E1680FE1400A21259 /* issue39.test10.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test10.css; sourceTree = ""; }; - C1EA696F1680FE1400A21259 /* issue39.test11.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test11.cl; sourceTree = ""; }; - C1EA69701680FE1400A21259 /* issue39.test11.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test11.css; sourceTree = ""; }; - C1EA69711680FE1400A21259 /* issue39.test12.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test12.cl; sourceTree = ""; }; - C1EA69721680FE1400A21259 /* issue39.test12.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test12.css; sourceTree = ""; }; - C1EA69731680FE1400A21259 /* issue39.test13.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test13.cl; sourceTree = ""; }; - C1EA69741680FE1400A21259 /* issue39.test13.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test13.css; sourceTree = ""; }; - C1EA69751680FE1400A21259 /* issue39.test14.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test14.cl; sourceTree = ""; }; - C1EA69761680FE1400A21259 /* issue39.test14.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test14.css; sourceTree = ""; }; - C1EA69771680FE1400A21259 /* issue39.test15.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test15.cl; sourceTree = ""; }; - C1EA69781680FE1400A21259 /* issue39.test15.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test15.css; sourceTree = ""; }; - C1EA69791680FE1400A21259 /* issue39.test16.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test16.cl; sourceTree = ""; }; - C1EA697A1680FE1400A21259 /* issue39.test16.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test16.css; sourceTree = ""; }; - C1EA697B1680FE1400A21259 /* issue39.test17.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test17.cl; sourceTree = ""; }; - C1EA697C1680FE1400A21259 /* issue39.test17.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test17.css; sourceTree = ""; }; - C1EA697D1680FE1400A21259 /* issue39.test18.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test18.cl; sourceTree = ""; }; - C1EA697E1680FE1400A21259 /* issue39.test18.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test18.css; sourceTree = ""; }; - C1EA697F1680FE1400A21259 /* issue39.test19.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test19.cl; sourceTree = ""; }; - C1EA69801680FE1400A21259 /* issue39.test19.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test19.css; sourceTree = ""; }; - C1EA69811680FE1400A21259 /* issue39.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test2.cl; sourceTree = ""; }; - C1EA69821680FE1400A21259 /* issue39.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test2.css; sourceTree = ""; }; - C1EA69831680FE1400A21259 /* issue39.test20.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test20.cl; sourceTree = ""; }; - C1EA69841680FE1400A21259 /* issue39.test20.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test20.css; sourceTree = ""; }; - C1EA69851680FE1400A21259 /* issue39.test21.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test21.cl; sourceTree = ""; }; - C1EA69861680FE1400A21259 /* issue39.test21.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test21.css; sourceTree = ""; }; - C1EA69871680FE1400A21259 /* issue39.test22.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test22.cl; sourceTree = ""; }; - C1EA69881680FE1400A21259 /* issue39.test22.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test22.css; sourceTree = ""; }; - C1EA69891680FE1400A21259 /* issue39.test23.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test23.cl; sourceTree = ""; }; - C1EA698A1680FE1400A21259 /* issue39.test23.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test23.css; sourceTree = ""; }; - C1EA698B1680FE1400A21259 /* issue39.test24.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test24.cl; sourceTree = ""; }; - C1EA698C1680FE1400A21259 /* issue39.test24.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test24.css; sourceTree = ""; }; - C1EA698D1680FE1400A21259 /* issue39.test25.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test25.cl; sourceTree = ""; }; - C1EA698E1680FE1400A21259 /* issue39.test25.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test25.css; sourceTree = ""; }; - C1EA698F1680FE1400A21259 /* issue39.test26.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test26.cl; sourceTree = ""; }; - C1EA69901680FE1400A21259 /* issue39.test26.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test26.css; sourceTree = ""; }; - C1EA69911680FE1400A21259 /* issue39.test27.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test27.cl; sourceTree = ""; }; - C1EA69921680FE1400A21259 /* issue39.test27.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test27.css; sourceTree = ""; }; - C1EA69931680FE1400A21259 /* issue39.test28.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test28.cl; sourceTree = ""; }; - C1EA69941680FE1400A21259 /* issue39.test28.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test28.css; sourceTree = ""; }; - C1EA69951680FE1400A21259 /* issue39.test29.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test29.cl; sourceTree = ""; }; - C1EA69961680FE1400A21259 /* issue39.test29.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test29.css; sourceTree = ""; }; - C1EA69971680FE1400A21259 /* issue39.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test3.cl; sourceTree = ""; }; - C1EA69981680FE1400A21259 /* issue39.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test3.css; sourceTree = ""; }; - C1EA69991680FE1400A21259 /* issue39.test30.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test30.cl; sourceTree = ""; }; - C1EA699A1680FE1400A21259 /* issue39.test30.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test30.css; sourceTree = ""; }; - C1EA699B1680FE1400A21259 /* issue39.test31.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test31.cl; sourceTree = ""; }; - C1EA699C1680FE1400A21259 /* issue39.test31.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test31.css; sourceTree = ""; }; - C1EA699D1680FE1400A21259 /* issue39.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test4.cl; sourceTree = ""; }; - C1EA699E1680FE1400A21259 /* issue39.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test4.css; sourceTree = ""; }; - C1EA699F1680FE1400A21259 /* issue39.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test5.cl; sourceTree = ""; }; - C1EA69A01680FE1400A21259 /* issue39.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test5.css; sourceTree = ""; }; - C1EA69A11680FE1400A21259 /* issue39.test6.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test6.cl; sourceTree = ""; }; - C1EA69A21680FE1400A21259 /* issue39.test6.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test6.css; sourceTree = ""; }; - C1EA69A31680FE1400A21259 /* issue39.test7.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test7.cl; sourceTree = ""; }; - C1EA69A41680FE1400A21259 /* issue39.test7.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test7.css; sourceTree = ""; }; - C1EA69A51680FE1400A21259 /* issue39.test8.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test8.cl; sourceTree = ""; }; - C1EA69A61680FE1400A21259 /* issue39.test8.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test8.css; sourceTree = ""; }; - C1EA69A71680FE1400A21259 /* issue39.test9.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue39.test9.cl; sourceTree = ""; }; - C1EA69A81680FE1400A21259 /* issue39.test9.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue39.test9.css; sourceTree = ""; }; - C1EA69A91680FE1400A21259 /* issue45.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue45.test1.cl; sourceTree = ""; }; - C1EA69AA1680FE1400A21259 /* issue45.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue45.test1.css; sourceTree = ""; }; - C1EA69AB1680FE1400A21259 /* issue48.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue48.test1.cl; sourceTree = ""; }; - C1EA69AC1680FE1400A21259 /* issue48.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue48.test1.css; sourceTree = ""; }; - C1EA69AD1680FE1400A21259 /* issue50.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue50.test1.cl; sourceTree = ""; }; - C1EA69AE1680FE1400A21259 /* issue50.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue50.test1.css; sourceTree = ""; }; - C1EA69AF1680FE1400A21259 /* issue50.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue50.test2.cl; sourceTree = ""; }; - C1EA69B01680FE1400A21259 /* issue50.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue50.test2.css; sourceTree = ""; }; - C1EA69B11680FE1400A21259 /* issue52.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue52.test1.cl; sourceTree = ""; }; - C1EA69B21680FE1400A21259 /* issue52.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue52.test1.css; sourceTree = ""; }; - C1EA69B31680FE1400A21259 /* issue52.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue52.test2.cl; sourceTree = ""; }; - C1EA69B41680FE1400A21259 /* issue52.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue52.test2.css; sourceTree = ""; }; - C1EA69B51680FE1400A21259 /* issue53.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue53.test1.cl; sourceTree = ""; }; - C1EA69B61680FE1400A21259 /* issue53.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue53.test1.css; sourceTree = ""; }; - C1EA69B71680FE1400A21259 /* issue53.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue53.test2.cl; sourceTree = ""; }; - C1EA69B81680FE1400A21259 /* issue53.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue53.test2.css; sourceTree = ""; }; - C1EA69B91680FE1400A21259 /* issue54.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue54.test1.cl; sourceTree = ""; }; - C1EA69BA1680FE1400A21259 /* issue54.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue54.test1.css; sourceTree = ""; }; - C1EA69BB1680FE1400A21259 /* issue57.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue57.test1.cl; sourceTree = ""; }; - C1EA69BC1680FE1400A21259 /* issue57.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue57.test1.css; sourceTree = ""; }; - C1EA69BD1680FE1400A21259 /* issue57.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue57.test2.cl; sourceTree = ""; }; - C1EA69BE1680FE1400A21259 /* issue57.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue57.test2.css; sourceTree = ""; }; - C1EA69BF1680FE1400A21259 /* issue71.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue71.test1.cl; sourceTree = ""; }; - C1EA69C01680FE1400A21259 /* issue71.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue71.test1.css; sourceTree = ""; }; - C1EA69C11680FE1400A21259 /* issue76.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue76.test1.cl; sourceTree = ""; }; - C1EA69C21680FE1400A21259 /* issue76.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue76.test1.css; sourceTree = ""; }; - C1EA69C31680FE1400A21259 /* issue76.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue76.test2.cl; sourceTree = ""; }; - C1EA69C41680FE1400A21259 /* issue76.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue76.test2.css; sourceTree = ""; }; - C1EA69C51680FE1400A21259 /* issue76.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue76.test3.cl; sourceTree = ""; }; - C1EA69C61680FE1400A21259 /* issue76.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue76.test3.css; sourceTree = ""; }; - C1EA69C71680FE1400A21259 /* issue76.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue76.test4.cl; sourceTree = ""; }; - C1EA69C81680FE1400A21259 /* issue76.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue76.test4.css; sourceTree = ""; }; - C1EA69C91680FE1400A21259 /* issue76.test5.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue76.test5.cl; sourceTree = ""; }; - C1EA69CA1680FE1400A21259 /* issue76.test5.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue76.test5.css; sourceTree = ""; }; - C1EA69CB1680FE1400A21259 /* issue78.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue78.test1.cl; sourceTree = ""; }; - C1EA69CC1680FE1400A21259 /* issue78.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue78.test1.css; sourceTree = ""; }; - C1EA69CD1680FE1400A21259 /* issue78.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue78.test2.cl; sourceTree = ""; }; - C1EA69CE1680FE1400A21259 /* issue78.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue78.test2.css; sourceTree = ""; }; - C1EA69CF1680FE1400A21259 /* issue78.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue78.test3.cl; sourceTree = ""; }; - C1EA69D01680FE1400A21259 /* issue78.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue78.test3.css; sourceTree = ""; }; - C1EA69D11680FE1400A21259 /* issue78.test4.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue78.test4.cl; sourceTree = ""; }; - C1EA69D21680FE1400A21259 /* issue78.test4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue78.test4.css; sourceTree = ""; }; - C1EA69D31680FE1400A21259 /* issue79.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue79.test1.cl; sourceTree = ""; }; - C1EA69D41680FE1400A21259 /* issue79.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue79.test1.css; sourceTree = ""; }; - C1EA69D51680FE1400A21259 /* issue79.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue79.test2.cl; sourceTree = ""; }; - C1EA69D61680FE1400A21259 /* issue79.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue79.test2.css; sourceTree = ""; }; - C1EA69D71680FE1400A21259 /* issue81.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue81.test1.cl; sourceTree = ""; }; - C1EA69D81680FE1400A21259 /* issue81.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue81.test1.css; sourceTree = ""; }; - C1EA69D91680FE1400A21259 /* issue81.test2.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue81.test2.cl; sourceTree = ""; }; - C1EA69DA1680FE1400A21259 /* issue81.test2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue81.test2.css; sourceTree = ""; }; - C1EA69DB1680FE1400A21259 /* issue81.test3.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue81.test3.cl; sourceTree = ""; }; - C1EA69DC1680FE1400A21259 /* issue81.test3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue81.test3.css; sourceTree = ""; }; - C1EA69DD1680FE1400A21259 /* issue82.test1.cl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.opencl; path = issue82.test1.cl; sourceTree = ""; }; - C1EA69DE1680FE1400A21259 /* issue82.test1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = issue82.test1.css; sourceTree = ""; }; - C1EA69DF1680FE1400A21259 /* stylesheet.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.0.css; sourceTree = ""; }; - C1EA69E01680FE1400A21259 /* stylesheet.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = stylesheet.0.l; sourceTree = ""; }; - C1EA69E11680FE1400A21259 /* stylesheet.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = stylesheet.0.p; sourceTree = ""; }; - C1EA69E21680FE1400A21259 /* stylesheet.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.1.css; sourceTree = ""; }; - C1EA69E31680FE1400A21259 /* stylesheet.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = stylesheet.1.l; sourceTree = ""; }; - C1EA69E41680FE1400A21259 /* stylesheet.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = stylesheet.1.p; sourceTree = ""; }; - C1EA69E51680FE1400A21259 /* stylesheet.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.2.css; sourceTree = ""; }; - C1EA69E61680FE1400A21259 /* stylesheet.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = stylesheet.2.l; sourceTree = ""; }; - C1EA69E71680FE1400A21259 /* stylesheet.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = stylesheet.2.p; sourceTree = ""; }; - C1EA69E81680FE1400A21259 /* stylesheet.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.3.css; sourceTree = ""; }; - C1EA69E91680FE1400A21259 /* stylesheet.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = stylesheet.3.l; sourceTree = ""; }; - C1EA69EA1680FE1400A21259 /* stylesheet.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = stylesheet.3.p; sourceTree = ""; }; - C1EA69EB1680FE1400A21259 /* stylesheet.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.4.css; sourceTree = ""; }; - C1EA69EC1680FE1400A21259 /* stylesheet.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = stylesheet.4.l; sourceTree = ""; }; - C1EA69ED1680FE1400A21259 /* stylesheet.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = stylesheet.4.p; sourceTree = ""; }; - C1EA69EE1680FE1400A21259 /* stylesheet.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.c.0.css; sourceTree = ""; }; - C1EA69EF1680FE1400A21259 /* stylesheet.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = stylesheet.c.0.l; sourceTree = ""; }; - C1EA69F01680FE1400A21259 /* stylesheet.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = stylesheet.c.0.p; sourceTree = ""; }; - C1EA69F11680FE1400A21259 /* stylesheet.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.s.0.css; sourceTree = ""; }; - C1EA69F21680FE1400A21259 /* stylesheet.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = stylesheet.s.0.l; sourceTree = ""; }; - C1EA69F31680FE1400A21259 /* stylesheet.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = stylesheet.s.0.p; sourceTree = ""; }; - C1EA69F41680FE1400A21259 /* stylesheet.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.s.1.css; sourceTree = ""; }; - C1EA69F51680FE1400A21259 /* stylesheet.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = stylesheet.s.1.l; sourceTree = ""; }; - C1EA69F61680FE1400A21259 /* stylesheet.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = stylesheet.s.1.p; sourceTree = ""; }; - C1EA69F71680FE1400A21259 /* stylesheet.s.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.s.2.css; sourceTree = ""; }; - C1EA69F81680FE1400A21259 /* stylesheet.s.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = stylesheet.s.2.l; sourceTree = ""; }; - C1EA69F91680FE1400A21259 /* stylesheet.s.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = stylesheet.s.2.p; sourceTree = ""; }; - C1EA69FA1680FE1400A21259 /* stylesheet.s.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.s.3.css; sourceTree = ""; }; - C1EA69FB1680FE1400A21259 /* stylesheet.s.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = stylesheet.s.3.l; sourceTree = ""; }; - C1EA69FC1680FE1400A21259 /* stylesheet.s.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = stylesheet.s.3.p; sourceTree = ""; }; - C1EA69FE1680FE1400A21259 /* unary.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = unary.0.css; sourceTree = ""; }; - C1EA69FF1680FE1400A21259 /* unary.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = unary.0.l; sourceTree = ""; }; - C1EA6A001680FE1400A21259 /* unary.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = unary.0.p; sourceTree = ""; }; - C1EA6A011680FE1400A21259 /* unary.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = unary.1.css; sourceTree = ""; }; - C1EA6A021680FE1400A21259 /* unary.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = unary.1.l; sourceTree = ""; }; - C1EA6A031680FE1400A21259 /* unary.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = unary.1.p; sourceTree = ""; }; - C1EA6A051680FE1400A21259 /* unknown.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = unknown.0.css; sourceTree = ""; }; - C1EA6A061680FE1400A21259 /* unknown.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = unknown.0.l; sourceTree = ""; }; - C1EA6A071680FE1400A21259 /* unknown.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = unknown.1.css; sourceTree = ""; }; - C1EA6A081680FE1400A21259 /* unknown.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = unknown.1.l; sourceTree = ""; }; - C1EA6A091680FE1400A21259 /* unknown.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = unknown.2.css; sourceTree = ""; }; - C1EA6A0A1680FE1400A21259 /* unknown.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = unknown.2.l; sourceTree = ""; }; - C1EA6A0C1680FE1400A21259 /* uri.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = uri.0.css; sourceTree = ""; }; - C1EA6A0D1680FE1400A21259 /* uri.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = uri.0.l; sourceTree = ""; }; - C1EA6A0E1680FE1400A21259 /* uri.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = uri.0.p; sourceTree = ""; }; - C1EA6A0F1680FE1400A21259 /* uri.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = uri.1.css; sourceTree = ""; }; - C1EA6A101680FE1400A21259 /* uri.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = uri.1.l; sourceTree = ""; }; - C1EA6A111680FE1400A21259 /* uri.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = uri.1.p; sourceTree = ""; }; - C1EA6A121680FE1400A21259 /* uri.c.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = uri.c.0.css; sourceTree = ""; }; - C1EA6A131680FE1400A21259 /* uri.c.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = uri.c.0.l; sourceTree = ""; }; - C1EA6A141680FE1400A21259 /* uri.c.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = uri.c.0.p; sourceTree = ""; }; - C1EA6A151680FE1400A21259 /* uri.c.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = uri.c.1.css; sourceTree = ""; }; - C1EA6A161680FE1400A21259 /* uri.c.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = uri.c.1.l; sourceTree = ""; }; - C1EA6A171680FE1400A21259 /* uri.c.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = uri.c.1.p; sourceTree = ""; }; - C1EA6A181680FE1400A21259 /* uri.s.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = uri.s.0.css; sourceTree = ""; }; - C1EA6A191680FE1400A21259 /* uri.s.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = uri.s.0.l; sourceTree = ""; }; - C1EA6A1A1680FE1400A21259 /* uri.s.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = uri.s.0.p; sourceTree = ""; }; - C1EA6A1B1680FE1400A21259 /* uri.s.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = uri.s.1.css; sourceTree = ""; }; - C1EA6A1C1680FE1400A21259 /* uri.s.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = uri.s.1.l; sourceTree = ""; }; - C1EA6A1D1680FE1400A21259 /* uri.s.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = uri.s.1.p; sourceTree = ""; }; - C1EA6A1F1680FE1400A21259 /* value.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.0.css; sourceTree = ""; }; - C1EA6A201680FE1400A21259 /* value.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.0.l; sourceTree = ""; }; - C1EA6A211680FE1400A21259 /* value.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = value.0.p; sourceTree = ""; }; - C1EA6A221680FE1400A21259 /* value.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.1.css; sourceTree = ""; }; - C1EA6A231680FE1400A21259 /* value.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.1.l; sourceTree = ""; }; - C1EA6A241680FE1400A21259 /* value.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = value.1.p; sourceTree = ""; }; - C1EA6A251680FE1400A21259 /* value.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.2.css; sourceTree = ""; }; - C1EA6A261680FE1400A21259 /* value.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.2.l; sourceTree = ""; }; - C1EA6A271680FE1400A21259 /* value.2.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = value.2.p; sourceTree = ""; }; - C1EA6A281680FE1400A21259 /* value.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.3.css; sourceTree = ""; }; - C1EA6A291680FE1400A21259 /* value.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.3.l; sourceTree = ""; }; - C1EA6A2A1680FE1400A21259 /* value.3.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = value.3.p; sourceTree = ""; }; - C1EA6A2B1680FE1400A21259 /* value.4.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.4.css; sourceTree = ""; }; - C1EA6A2C1680FE1400A21259 /* value.4.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.4.l; sourceTree = ""; }; - C1EA6A2D1680FE1400A21259 /* value.4.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = value.4.p; sourceTree = ""; }; - C1EA6A2E1680FE1400A21259 /* value.dimension.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.dimension.0.css; sourceTree = ""; }; - C1EA6A2F1680FE1400A21259 /* value.dimension.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.dimension.0.l; sourceTree = ""; }; - C1EA6A301680FE1400A21259 /* value.dimension.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.dimension.1.css; sourceTree = ""; }; - C1EA6A311680FE1400A21259 /* value.dimension.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.dimension.1.l; sourceTree = ""; }; - C1EA6A321680FE1400A21259 /* value.dimension.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.dimension.2.css; sourceTree = ""; }; - C1EA6A331680FE1400A21259 /* value.dimension.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.dimension.2.l; sourceTree = ""; }; - C1EA6A341680FE1400A21259 /* value.rgb.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.rgb.0.css; sourceTree = ""; }; - C1EA6A351680FE1400A21259 /* value.rgb.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.rgb.0.l; sourceTree = ""; }; - C1EA6A361680FE1400A21259 /* value.rgb.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.rgb.1.css; sourceTree = ""; }; - C1EA6A371680FE1400A21259 /* value.rgb.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.rgb.1.l; sourceTree = ""; }; - C1EA6A381680FE1400A21259 /* value.rgb.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.rgb.2.css; sourceTree = ""; }; - C1EA6A391680FE1400A21259 /* value.rgb.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.rgb.2.l; sourceTree = ""; }; - C1EA6A3A1680FE1400A21259 /* value.vhash.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.vhash.0.css; sourceTree = ""; }; - C1EA6A3B1680FE1400A21259 /* value.vhash.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.vhash.0.l; sourceTree = ""; }; - C1EA6A3C1680FE1400A21259 /* value.vhash.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.vhash.1.css; sourceTree = ""; }; - C1EA6A3D1680FE1400A21259 /* value.vhash.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.vhash.1.l; sourceTree = ""; }; - C1EA6A3E1680FE1400A21259 /* value.vhash.2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.vhash.2.css; sourceTree = ""; }; - C1EA6A3F1680FE1400A21259 /* value.vhash.2.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.vhash.2.l; sourceTree = ""; }; - C1EA6A401680FE1400A21259 /* value.vhash.3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = value.vhash.3.css; sourceTree = ""; }; - C1EA6A411680FE1400A21259 /* value.vhash.3.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = value.vhash.3.l; sourceTree = ""; }; - C1EA6A431680FE1400A21259 /* vhash.0.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = vhash.0.css; sourceTree = ""; }; - C1EA6A441680FE1400A21259 /* vhash.0.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = vhash.0.l; sourceTree = ""; }; - C1EA6A451680FE1400A21259 /* vhash.0.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = vhash.0.p; sourceTree = ""; }; - C1EA6A461680FE1400A21259 /* vhash.1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = vhash.1.css; sourceTree = ""; }; - C1EA6A471680FE1400A21259 /* vhash.1.l */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.lex; path = vhash.1.l; sourceTree = ""; }; - C1EA6A481680FE1400A21259 /* vhash.1.p */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = vhash.1.p; sourceTree = ""; }; - C1EA6A491680FE1400A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA6A4A1680FE1400A21259 /* USAGE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = USAGE; sourceTree = ""; }; - C1EA6A4B1680FE1400A21259 /* VERSION */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = VERSION; sourceTree = ""; }; - C1EA6A4D1680FE1400A21259 /* csso.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = csso.css; sourceTree = ""; }; - C1EA6A4E1680FE1400A21259 /* csso.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = csso.html; sourceTree = ""; }; - C1EA6A4F1680FE1400A21259 /* csso.web.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = csso.web.js; sourceTree = ""; }; - C1EA6A501680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6A511680FE1400A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6A531680FE1400A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6A541680FE1400A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA6A561680FE1400A21259 /* execLoaders.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = execLoaders.js; sourceTree = ""; }; - C1EA6A571680FE1400A21259 /* execModule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = execModule.js; sourceTree = ""; }; - C1EA6A581680FE1400A21259 /* require.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = require.js; sourceTree = ""; }; - C1EA6A591680FE1400A21259 /* require.webpack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = require.webpack.js; sourceTree = ""; }; - C1EA6A5C1680FE1400A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6A5D1680FE1400A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA6A5F1680FE1400A21259 /* createThrottledFunction.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = createThrottledFunction.js; sourceTree = ""; }; - C1EA6A601680FE1400A21259 /* resolve.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resolve.js; sourceTree = ""; }; - C1EA6A611680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6A621680FE1400A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6A651680FE1400A21259 /* a.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = a.js; sourceTree = ""; }; - C1EA6A661680FE1400A21259 /* abc.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = abc.txt; sourceTree = ""; }; - C1EA6A671680FE1400A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6A681680FE1400A21259 /* c.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = c.js; sourceTree = ""; }; - C1EA6A691680FE1400A21259 /* complex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = complex.js; sourceTree = ""; }; - C1EA6A6B1680FE1400A21259 /* complex1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = complex1.js; sourceTree = ""; }; - C1EA6A6C1680FE1400A21259 /* main1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main1.js; sourceTree = ""; }; - C1EA6A6D1680FE1400A21259 /* main2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main2.js; sourceTree = ""; }; - C1EA6A6E1680FE1400A21259 /* main3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main3.js; sourceTree = ""; }; - C1EA6A711680FE1400A21259 /* step1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = step1.js; sourceTree = ""; }; - C1EA6A721680FE1400A21259 /* step2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = step2.js; sourceTree = ""; }; - C1EA6A751680FE1400A21259 /* a.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = a.js; sourceTree = ""; }; - C1EA6A761680FE1400A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6A781680FE1400A21259 /* a.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = a.js; sourceTree = ""; }; - C1EA6A791680FE1400A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6A7B1680FE1400A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6A7D1680FE1400A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6A7E1680FE1400A21259 /* resolve.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resolve.js; sourceTree = ""; }; - C1EA6A7F1680FE1400A21259 /* simple.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = simple.js; sourceTree = ""; }; - C1EA6A801680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6A811680FE1400A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6A831680FE1400A21259 /* amd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = amd.js; sourceTree = ""; }; - C1EA6A841680FE1400A21259 /* commonjs-loaders.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "commonjs-loaders.js"; sourceTree = ""; }; - C1EA6A851680FE1400A21259 /* commonjs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = commonjs.js; sourceTree = ""; }; - C1EA6A881680FE1400A21259 /* file2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file2.js; sourceTree = ""; }; - C1EA6A891680FE1400A21259 /* file.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file.js; sourceTree = ""; }; - C1EA6A8A1680FE1400A21259 /* freeVars.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = freeVars.js; sourceTree = ""; }; - C1EA6A8B1680FE1400A21259 /* inner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inner.js; sourceTree = ""; }; - C1EA6A8C1680FE1400A21259 /* loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = loader.js; sourceTree = ""; }; - C1EA6A8D1680FE1400A21259 /* outer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = outer.js; sourceTree = ""; }; - C1EA6A8E1680FE1400A21259 /* modules-async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "modules-async.js"; sourceTree = ""; }; - C1EA6A8F1680FE1400A21259 /* require-context.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "require-context.js"; sourceTree = ""; }; - C1EA6A911680FE1400A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6A921680FE1400A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA6A941680FE1400A21259 /* createThrottledFunction.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = createThrottledFunction.js; sourceTree = ""; }; - C1EA6A951680FE1400A21259 /* resolve.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resolve.js; sourceTree = ""; }; - C1EA6A961680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6A971680FE1400A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6A991680FE1400A21259 /* errors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = errors.js; sourceTree = ""; }; - C1EA6A9B1680FE1400A21259 /* a.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = a.js; sourceTree = ""; }; - C1EA6A9C1680FE1400A21259 /* abc.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = abc.txt; sourceTree = ""; }; - C1EA6A9D1680FE1400A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6A9E1680FE1400A21259 /* c.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = c.js; sourceTree = ""; }; - C1EA6A9F1680FE1400A21259 /* complex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = complex.js; sourceTree = ""; }; - C1EA6AA11680FE1400A21259 /* complex1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = complex1.js; sourceTree = ""; }; - C1EA6AA21680FE1400A21259 /* main1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main1.js; sourceTree = ""; }; - C1EA6AA31680FE1400A21259 /* main2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main2.js; sourceTree = ""; }; - C1EA6AA41680FE1400A21259 /* main3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main3.js; sourceTree = ""; }; - C1EA6AA71680FE1400A21259 /* step1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = step1.js; sourceTree = ""; }; - C1EA6AA81680FE1400A21259 /* step2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = step2.js; sourceTree = ""; }; - C1EA6AAB1680FE1400A21259 /* a.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = a.js; sourceTree = ""; }; - C1EA6AAC1680FE1400A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6AAE1680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6AB01680FE1400A21259 /* a.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = a.js; sourceTree = ""; }; - C1EA6AB11680FE1400A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6AB31680FE1400A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6AB51680FE1400A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6AB61680FE1400A21259 /* resolve.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = resolve.js; sourceTree = ""; }; - C1EA6AB71680FE1400A21259 /* simple.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = simple.js; sourceTree = ""; }; - C1EA6AB91680FE1400A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA6ABC1680FE1400A21259 /* codemirror.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = codemirror.css; sourceTree = ""; }; - C1EA6ABD1680FE1400A21259 /* codemirror.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = codemirror.js; sourceTree = ""; }; - C1EA6ABE1680FE1400A21259 /* javascript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = javascript.js; sourceTree = ""; }; - C1EA6ABF1680FE1400A21259 /* json2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json2.js; sourceTree = ""; }; - C1EA6AC01680FE1400A21259 /* style.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = style.css; sourceTree = ""; }; - C1EA6AC21680FE1400A21259 /* treeview-min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "treeview-min.js"; sourceTree = ""; }; - C1EA6AC31680FE1400A21259 /* treeview-sprite.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "treeview-sprite.gif"; sourceTree = ""; }; - C1EA6AC41680FE1400A21259 /* treeview.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = treeview.css; sourceTree = ""; }; - C1EA6AC51680FE1400A21259 /* yahoo-dom-event.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "yahoo-dom-event.js"; sourceTree = ""; }; - C1EA6AC71680FE1400A21259 /* esparse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = esparse.js; sourceTree = ""; }; - C1EA6AC81680FE1400A21259 /* changes */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = changes; sourceTree = ""; }; - C1EA6AC91680FE1400A21259 /* cm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cm; sourceTree = ""; }; - C1EA6ACB1680FE1400A21259 /* checkenv.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = checkenv.js; sourceTree = ""; }; - C1EA6ACC1680FE1400A21259 /* collector.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = collector.html; sourceTree = ""; }; - C1EA6ACD1680FE1400A21259 /* collector.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = collector.js; sourceTree = ""; }; - C1EA6ACE1680FE1400A21259 /* functiontrace.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = functiontrace.html; sourceTree = ""; }; - C1EA6ACF1680FE1400A21259 /* functiontrace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = functiontrace.js; sourceTree = ""; }; - C1EA6AD01680FE1400A21259 /* parse.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = parse.css; sourceTree = ""; }; - C1EA6AD11680FE1400A21259 /* parse.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = parse.html; sourceTree = ""; }; - C1EA6AD21680FE1400A21259 /* precedence.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = precedence.html; sourceTree = ""; }; - C1EA6AD31680FE1400A21259 /* rewrite.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = rewrite.html; sourceTree = ""; }; - C1EA6AD41680FE1400A21259 /* rewrite.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rewrite.js; sourceTree = ""; }; - C1EA6AD51680FE1400A21259 /* esprima.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = esprima.js; sourceTree = ""; }; - C1EA6AD61680FE1400A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA6AD71680FE1400A21259 /* LICENSE.BSD */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.BSD; sourceTree = ""; }; - C1EA6AD81680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6AD91680FE1400A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6ADC1680FE1400A21259 /* backbone-0.5.3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "backbone-0.5.3.js"; sourceTree = ""; }; - C1EA6ADD1680FE1400A21259 /* benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = benchmark.js; sourceTree = ""; }; - C1EA6ADE1680FE1400A21259 /* escodegen.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = escodegen.js; sourceTree = ""; }; - C1EA6ADF1680FE1400A21259 /* esmorph.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = esmorph.js; sourceTree = ""; }; - C1EA6AE01680FE1400A21259 /* ext-core-3.0.0.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ext-core-3.0.0.js"; sourceTree = ""; }; - C1EA6AE11680FE1400A21259 /* ext-core-3.1.0.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ext-core-3.1.0.js"; sourceTree = ""; }; - C1EA6AE21680FE1400A21259 /* jquery-1.6.4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jquery-1.6.4.js"; sourceTree = ""; }; - C1EA6AE31680FE1400A21259 /* jquery-1.7.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jquery-1.7.1.js"; sourceTree = ""; }; - C1EA6AE41680FE1400A21259 /* jquery.mobile-1.0.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jquery.mobile-1.0.js"; sourceTree = ""; }; - C1EA6AE51680FE1400A21259 /* jsdefs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jsdefs.js; sourceTree = ""; }; - C1EA6AE61680FE1400A21259 /* jslex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jslex.js; sourceTree = ""; }; - C1EA6AE71680FE1400A21259 /* jsparse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jsparse.js; sourceTree = ""; }; - C1EA6AE81680FE1400A21259 /* mootools-1.3.2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "mootools-1.3.2.js"; sourceTree = ""; }; - C1EA6AE91680FE1400A21259 /* mootools-1.4.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "mootools-1.4.1.js"; sourceTree = ""; }; - C1EA6AEA1680FE1400A21259 /* parse-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "parse-js.js"; sourceTree = ""; }; - C1EA6AEB1680FE1400A21259 /* platform.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = platform.js; sourceTree = ""; }; - C1EA6AEC1680FE1400A21259 /* prototype-1.6.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "prototype-1.6.1.js"; sourceTree = ""; }; - C1EA6AED1680FE1400A21259 /* prototype-1.7.0.0.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "prototype-1.7.0.0.js"; sourceTree = ""; }; - C1EA6AEE1680FE1400A21259 /* Tokenizer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Tokenizer.js; sourceTree = ""; }; - C1EA6AEF1680FE1400A21259 /* underscore-1.2.3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "underscore-1.2.3.js"; sourceTree = ""; }; - C1EA6AF01680FE1400A21259 /* XMLHttpRequest.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = XMLHttpRequest.js; sourceTree = ""; }; - C1EA6AF11680FE1400A21259 /* ZeParser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ZeParser.js; sourceTree = ""; }; - C1EA6AF21680FE1400A21259 /* benchmarks.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = benchmarks.html; sourceTree = ""; }; - C1EA6AF31680FE1400A21259 /* benchmarks.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = benchmarks.js; sourceTree = ""; }; - C1EA6AF41680FE1400A21259 /* compare.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = compare.html; sourceTree = ""; }; - C1EA6AF51680FE1400A21259 /* compare.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compare.js; sourceTree = ""; }; - C1EA6AF61680FE1400A21259 /* compat.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = compat.html; sourceTree = ""; }; - C1EA6AF71680FE1400A21259 /* compat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compat.js; sourceTree = ""; }; - C1EA6AF81680FE1400A21259 /* coverage.footer.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = coverage.footer.html; sourceTree = ""; }; - C1EA6AF91680FE1400A21259 /* coverage.header.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = coverage.header.html; sourceTree = ""; }; - C1EA6AFA1680FE1400A21259 /* coverage.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = coverage.html; sourceTree = ""; }; - C1EA6AFB1680FE1400A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA6AFC1680FE1400A21259 /* reflect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = reflect.js; sourceTree = ""; }; - C1EA6AFD1680FE1400A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA6AFE1680FE1400A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA6B001680FE1400A21259 /* generate-unicode-regex.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = "generate-unicode-regex.py"; sourceTree = ""; }; - C1EA6B011680FE1400A21259 /* update-coverage.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "update-coverage.sh"; sourceTree = ""; }; - C1EA6B031680FE1400A21259 /* auto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = auto.js; sourceTree = ""; }; - C1EA6B041680FE1400A21259 /* html.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = html.js; sourceTree = ""; }; - C1EA6B051680FE1400A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6B061680FE1400A21259 /* index.loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.loader.js; sourceTree = ""; }; - C1EA6B071680FE1400A21259 /* jpeg.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jpeg.js; sourceTree = ""; }; - C1EA6B081680FE1400A21259 /* jpg.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jpg.js; sourceTree = ""; }; - C1EA6B091680FE1400A21259 /* js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = js.js; sourceTree = ""; }; - C1EA6B0A1680FE1400A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6B0B1680FE1400A21259 /* png.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = png.js; sourceTree = ""; }; - C1EA6B0C1680FE1400A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6B0D1680FE1400A21259 /* swf.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = swf.js; sourceTree = ""; }; - C1EA6B0E1680FE1400A21259 /* txt.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = txt.js; sourceTree = ""; }; - C1EA6B101680FE1400A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6B111680FE1400A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6B141680FE1400A21259 /* jade */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jade; sourceTree = ""; }; - C1EA6B161680FE1400A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6B181680FE1500A21259 /* jade */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jade; sourceTree = ""; }; - C1EA6B191680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6B1A1680FE1500A21259 /* jade.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jade.js; sourceTree = ""; }; - C1EA6B1B1680FE1500A21259 /* jade.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jade.md; sourceTree = ""; }; - C1EA6B1C1680FE1500A21259 /* jade.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jade.min.js; sourceTree = ""; }; - C1EA6B1E1680FE1500A21259 /* compiler.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = compiler.js; sourceTree = ""; }; - C1EA6B1F1680FE1500A21259 /* doctypes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = doctypes.js; sourceTree = ""; }; - C1EA6B201680FE1500A21259 /* filters.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = filters.js; sourceTree = ""; }; - C1EA6B211680FE1500A21259 /* inline-tags.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "inline-tags.js"; sourceTree = ""; }; - C1EA6B221680FE1500A21259 /* jade.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jade.js; sourceTree = ""; }; - C1EA6B231680FE1500A21259 /* lexer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lexer.js; sourceTree = ""; }; - C1EA6B251680FE1500A21259 /* attrs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = attrs.js; sourceTree = ""; }; - C1EA6B261680FE1500A21259 /* block-comment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "block-comment.js"; sourceTree = ""; }; - C1EA6B271680FE1500A21259 /* block.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = block.js; sourceTree = ""; }; - C1EA6B281680FE1500A21259 /* case.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = case.js; sourceTree = ""; }; - C1EA6B291680FE1500A21259 /* code.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = code.js; sourceTree = ""; }; - C1EA6B2A1680FE1500A21259 /* comment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = comment.js; sourceTree = ""; }; - C1EA6B2B1680FE1500A21259 /* doctype.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = doctype.js; sourceTree = ""; }; - C1EA6B2C1680FE1500A21259 /* each.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = each.js; sourceTree = ""; }; - C1EA6B2D1680FE1500A21259 /* filter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = filter.js; sourceTree = ""; }; - C1EA6B2E1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6B2F1680FE1500A21259 /* literal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = literal.js; sourceTree = ""; }; - C1EA6B301680FE1500A21259 /* mixin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mixin.js; sourceTree = ""; }; - C1EA6B311680FE1500A21259 /* node.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = node.js; sourceTree = ""; }; - C1EA6B321680FE1500A21259 /* tag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tag.js; sourceTree = ""; }; - C1EA6B331680FE1500A21259 /* text.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = text.js; sourceTree = ""; }; - C1EA6B341680FE1500A21259 /* parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.js; sourceTree = ""; }; - C1EA6B351680FE1500A21259 /* runtime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtime.js; sourceTree = ""; }; - C1EA6B361680FE1500A21259 /* self-closing.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "self-closing.js"; sourceTree = ""; }; - C1EA6B371680FE1500A21259 /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; - C1EA6B381680FE1500A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA6B3B1680FE1500A21259 /* cake */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cake; sourceTree = ""; }; - C1EA6B3C1680FE1500A21259 /* coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = coffee; sourceTree = ""; }; - C1EA6B3E1680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6B401680FE1500A21259 /* cake */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = cake; sourceTree = ""; }; - C1EA6B411680FE1500A21259 /* coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = coffee; sourceTree = ""; }; - C1EA6B421680FE1500A21259 /* CNAME */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CNAME; sourceTree = ""; }; - C1EA6B431680FE1500A21259 /* CONTRIBUTING.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CONTRIBUTING.md; sourceTree = ""; }; - C1EA6B451680FE1500A21259 /* jsl.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = jsl.conf; sourceTree = ""; }; - C1EA6B481680FE1500A21259 /* browser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browser.js; sourceTree = ""; }; - C1EA6B491680FE1500A21259 /* cake.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cake.js; sourceTree = ""; }; - C1EA6B4A1680FE1500A21259 /* coffee-script.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "coffee-script.js"; sourceTree = ""; }; - C1EA6B4B1680FE1500A21259 /* command.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = command.js; sourceTree = ""; }; - C1EA6B4C1680FE1500A21259 /* grammar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = grammar.js; sourceTree = ""; }; - C1EA6B4D1680FE1500A21259 /* helpers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = helpers.js; sourceTree = ""; }; - C1EA6B4E1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6B4F1680FE1500A21259 /* lexer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lexer.js; sourceTree = ""; }; - C1EA6B501680FE1500A21259 /* nodes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nodes.js; sourceTree = ""; }; - C1EA6B511680FE1500A21259 /* optparse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = optparse.js; sourceTree = ""; }; - C1EA6B521680FE1500A21259 /* parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.js; sourceTree = ""; }; - C1EA6B531680FE1500A21259 /* repl.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = repl.js; sourceTree = ""; }; - C1EA6B541680FE1500A21259 /* rewriter.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rewriter.js; sourceTree = ""; }; - C1EA6B551680FE1500A21259 /* scope.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = scope.js; sourceTree = ""; }; - C1EA6B561680FE1500A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA6B571680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6B581680FE1500A21259 /* Rakefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Rakefile; sourceTree = ""; }; - C1EA6B591680FE1500A21259 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; - C1EA6B5B1680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6B5C1680FE1500A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA6B5D1680FE1500A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA6B5E1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6B601680FE1500A21259 /* commander.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = commander.js; sourceTree = ""; }; - C1EA6B611680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA6B621680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6B631680FE1500A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA6B651680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6B661680FE1500A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA6B681680FE1500A21259 /* pow.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pow.js; sourceTree = ""; }; - C1EA6B691680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6B6A1680FE1500A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA6B6B1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6B6C1680FE1500A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA6B6E1680FE1500A21259 /* chmod.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = chmod.js; sourceTree = ""; }; - C1EA6B6F1680FE1500A21259 /* clobber.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = clobber.js; sourceTree = ""; }; - C1EA6B701680FE1500A21259 /* mkdirp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mkdirp.js; sourceTree = ""; }; - C1EA6B711680FE1500A21259 /* perm.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = perm.js; sourceTree = ""; }; - C1EA6B721680FE1500A21259 /* perm_sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = perm_sync.js; sourceTree = ""; }; - C1EA6B731680FE1500A21259 /* race.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = race.js; sourceTree = ""; }; - C1EA6B741680FE1500A21259 /* rel.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rel.js; sourceTree = ""; }; - C1EA6B751680FE1500A21259 /* return.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = return.js; sourceTree = ""; }; - C1EA6B761680FE1500A21259 /* return_sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = return_sync.js; sourceTree = ""; }; - C1EA6B771680FE1500A21259 /* root.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = root.js; sourceTree = ""; }; - C1EA6B781680FE1500A21259 /* sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sync.js; sourceTree = ""; }; - C1EA6B791680FE1500A21259 /* umask.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = umask.js; sourceTree = ""; }; - C1EA6B7A1680FE1500A21259 /* umask_sync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = umask_sync.js; sourceTree = ""; }; - C1EA6B7B1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6B7C1680FE1500A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA6B7D1680FE1500A21259 /* runtime.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtime.js; sourceTree = ""; }; - C1EA6B7E1680FE1500A21259 /* runtime.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runtime.min.js; sourceTree = ""; }; - C1EA6B801680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6B811680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6B841680FE1500A21259 /* json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json5; sourceTree = ""; }; - C1EA6B861680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6B871680FE1500A21259 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGELOG.md; sourceTree = ""; }; - C1EA6B891680FE1500A21259 /* cli.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cli.js; sourceTree = ""; }; - C1EA6B8A1680FE1500A21259 /* json5.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json5.js; sourceTree = ""; }; - C1EA6B8B1680FE1500A21259 /* require.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = require.js; sourceTree = ""; }; - C1EA6B8C1680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA6B8D1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6B8E1680FE1500A21259 /* package.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = package.json5; sourceTree = ""; }; - C1EA6B8F1680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6B931680FE1500A21259 /* empty-array.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "empty-array.json"; sourceTree = ""; }; - C1EA6B941680FE1500A21259 /* leading-comma-array.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "leading-comma-array.js"; sourceTree = ""; }; - C1EA6B951680FE1500A21259 /* lone-trailing-comma-array.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lone-trailing-comma-array.js"; sourceTree = ""; }; - C1EA6B961680FE1500A21259 /* no-comma-array.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "no-comma-array.txt"; sourceTree = ""; }; - C1EA6B971680FE1500A21259 /* regular-array.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "regular-array.json"; sourceTree = ""; }; - C1EA6B981680FE1500A21259 /* trailing-comma-array.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "trailing-comma-array.json5"; sourceTree = ""; }; - C1EA6B9A1680FE1500A21259 /* block-comment-following-array-element.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "block-comment-following-array-element.json5"; sourceTree = ""; }; - C1EA6B9B1680FE1500A21259 /* block-comment-following-top-level-value.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "block-comment-following-top-level-value.json5"; sourceTree = ""; }; - C1EA6B9C1680FE1500A21259 /* block-comment-in-string.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "block-comment-in-string.json"; sourceTree = ""; }; - C1EA6B9D1680FE1500A21259 /* block-comment-preceding-top-level-value.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "block-comment-preceding-top-level-value.json5"; sourceTree = ""; }; - C1EA6B9E1680FE1500A21259 /* block-comment-with-asterisks.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "block-comment-with-asterisks.json5"; sourceTree = ""; }; - C1EA6B9F1680FE1500A21259 /* inline-comment-following-array-element.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "inline-comment-following-array-element.json5"; sourceTree = ""; }; - C1EA6BA01680FE1500A21259 /* inline-comment-following-top-level-value.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "inline-comment-following-top-level-value.json5"; sourceTree = ""; }; - C1EA6BA11680FE1500A21259 /* inline-comment-in-string.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "inline-comment-in-string.json"; sourceTree = ""; }; - C1EA6BA21680FE1500A21259 /* inline-comment-preceding-top-level-value.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "inline-comment-preceding-top-level-value.json5"; sourceTree = ""; }; - C1EA6BA31680FE1500A21259 /* top-level-block-comment.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "top-level-block-comment.txt"; sourceTree = ""; }; - C1EA6BA41680FE1500A21259 /* top-level-inline-comment.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "top-level-inline-comment.txt"; sourceTree = ""; }; - C1EA6BA51680FE1500A21259 /* unterminated-block-comment.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "unterminated-block-comment.txt"; sourceTree = ""; }; - C1EA6BA71680FE1500A21259 /* empty.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = empty.txt; sourceTree = ""; }; - C1EA6BA81680FE1500A21259 /* npm-package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "npm-package.json"; sourceTree = ""; }; - C1EA6BA91680FE1500A21259 /* npm-package.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "npm-package.json5"; sourceTree = ""; }; - C1EA6BAA1680FE1500A21259 /* readme-example.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "readme-example.json5"; sourceTree = ""; }; - C1EA6BAC1680FE1500A21259 /* decimal-literal-with-exponent.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "decimal-literal-with-exponent.json"; sourceTree = ""; }; - C1EA6BAD1680FE1500A21259 /* decimal-literal-with-negative-exponent.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "decimal-literal-with-negative-exponent.json"; sourceTree = ""; }; - C1EA6BAE1680FE1500A21259 /* decimal-literal.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "decimal-literal.json"; sourceTree = ""; }; - C1EA6BAF1680FE1500A21259 /* hexadecimal-literal-with-lowercase-letter.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "hexadecimal-literal-with-lowercase-letter.json5"; sourceTree = ""; }; - C1EA6BB01680FE1500A21259 /* hexadecimal-literal-with-no-digits.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "hexadecimal-literal-with-no-digits.txt"; sourceTree = ""; }; - C1EA6BB11680FE1500A21259 /* hexadecimal-literal-with-uppercase-x.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "hexadecimal-literal-with-uppercase-x.json5"; sourceTree = ""; }; - C1EA6BB21680FE1500A21259 /* hexadecimal-literal.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "hexadecimal-literal.json5"; sourceTree = ""; }; - C1EA6BB31680FE1500A21259 /* leading-decimal-point.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "leading-decimal-point.json5"; sourceTree = ""; }; - C1EA6BB41680FE1500A21259 /* negative-decimal-literal.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "negative-decimal-literal.json"; sourceTree = ""; }; - C1EA6BB51680FE1500A21259 /* negative-hexadecimal-literal.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "negative-hexadecimal-literal.json5"; sourceTree = ""; }; - C1EA6BB61680FE1500A21259 /* negative-leading-decimal-point.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "negative-leading-decimal-point.json5"; sourceTree = ""; }; - C1EA6BB71680FE1500A21259 /* noctal-literal-with-octal-digit-after-leading-zero.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "noctal-literal-with-octal-digit-after-leading-zero.js"; sourceTree = ""; }; - C1EA6BB81680FE1500A21259 /* noctal-literal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "noctal-literal.js"; sourceTree = ""; }; - C1EA6BB91680FE1500A21259 /* octal-literal.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "octal-literal.txt"; sourceTree = ""; }; - C1EA6BBA1680FE1500A21259 /* trailing-decimal-point-with-exponent.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "trailing-decimal-point-with-exponent.js"; sourceTree = ""; }; - C1EA6BBB1680FE1500A21259 /* trailing-decimal-point.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "trailing-decimal-point.js"; sourceTree = ""; }; - C1EA6BBC1680FE1500A21259 /* zero-literal.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "zero-literal.json"; sourceTree = ""; }; - C1EA6BBE1680FE1500A21259 /* empty-object.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "empty-object.json"; sourceTree = ""; }; - C1EA6BBF1680FE1500A21259 /* illegal-unquoted-key-number.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "illegal-unquoted-key-number.txt"; sourceTree = ""; }; - C1EA6BC01680FE1500A21259 /* illegal-unquoted-key-symbol.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "illegal-unquoted-key-symbol.txt"; sourceTree = ""; }; - C1EA6BC11680FE1500A21259 /* leading-comma-object.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "leading-comma-object.txt"; sourceTree = ""; }; - C1EA6BC21680FE1500A21259 /* lone-trailing-comma-object.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "lone-trailing-comma-object.txt"; sourceTree = ""; }; - C1EA6BC31680FE1500A21259 /* no-comma-object.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "no-comma-object.txt"; sourceTree = ""; }; - C1EA6BC41680FE1500A21259 /* reserved-unquoted-key.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "reserved-unquoted-key.json5"; sourceTree = ""; }; - C1EA6BC51680FE1500A21259 /* single-quoted-key.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "single-quoted-key.json5"; sourceTree = ""; }; - C1EA6BC61680FE1500A21259 /* trailing-comma-object.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "trailing-comma-object.json5"; sourceTree = ""; }; - C1EA6BC71680FE1500A21259 /* unquoted-keys.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "unquoted-keys.json5"; sourceTree = ""; }; - C1EA6BC91680FE1500A21259 /* escaped-single-quoted-string.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "escaped-single-quoted-string.json5"; sourceTree = ""; }; - C1EA6BCA1680FE1500A21259 /* multi-line-string.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "multi-line-string.json5"; sourceTree = ""; }; - C1EA6BCB1680FE1500A21259 /* single-quoted-string.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "single-quoted-string.json5"; sourceTree = ""; }; - C1EA6BCD1680FE1500A21259 /* unicode-escaped-unquoted-key.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "unicode-escaped-unquoted-key.json5"; sourceTree = ""; }; - C1EA6BCE1680FE1500A21259 /* unicode-unquoted-key.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "unicode-unquoted-key.json5"; sourceTree = ""; }; - C1EA6BCF1680FE1500A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA6BD01680FE1500A21259 /* readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.md; sourceTree = ""; }; - C1EA6BD11680FE1500A21259 /* require.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = require.js; sourceTree = ""; }; - C1EA6BD21680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6BD31680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6BD41680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6BD51680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6BD71680FE1500A21259 /* fs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = fs.js; sourceTree = ""; }; - C1EA6BD91680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6BDA1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6BDB1680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6BDD1680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6BDE1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6BE11680FE1500A21259 /* lessc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = lessc; sourceTree = ""; }; - C1EA6BE31680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6BE51680FE1500A21259 /* benchmark.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = benchmark.less; sourceTree = ""; }; - C1EA6BE61680FE1500A21259 /* less-benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-benchmark.js"; sourceTree = ""; }; - C1EA6BE81680FE1500A21259 /* lessc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = lessc; sourceTree = ""; }; - C1EA6BEA1680FE1500A21259 /* amd.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = amd.js; sourceTree = ""; }; - C1EA6BEB1680FE1500A21259 /* ecma-5.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "ecma-5.js"; sourceTree = ""; }; - C1EA6BEC1680FE1500A21259 /* header.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = header.js; sourceTree = ""; }; - C1EA6BED1680FE1500A21259 /* require-rhino.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "require-rhino.js"; sourceTree = ""; }; - C1EA6BEE1680FE1500A21259 /* require.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = require.js; sourceTree = ""; }; - C1EA6BEF1680FE1500A21259 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGELOG.md; sourceTree = ""; }; - C1EA6BF11680FE1500A21259 /* less-1.1.0.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.0.js"; sourceTree = ""; }; - C1EA6BF21680FE1500A21259 /* less-1.1.0.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.0.min.js"; sourceTree = ""; }; - C1EA6BF31680FE1500A21259 /* less-1.1.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.1.js"; sourceTree = ""; }; - C1EA6BF41680FE1500A21259 /* less-1.1.1.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.1.min.js"; sourceTree = ""; }; - C1EA6BF51680FE1500A21259 /* less-1.1.2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.2.js"; sourceTree = ""; }; - C1EA6BF61680FE1500A21259 /* less-1.1.2.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.2.min.js"; sourceTree = ""; }; - C1EA6BF71680FE1500A21259 /* less-1.1.3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.3.js"; sourceTree = ""; }; - C1EA6BF81680FE1500A21259 /* less-1.1.3.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.3.min.js"; sourceTree = ""; }; - C1EA6BF91680FE1500A21259 /* less-1.1.4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.4.js"; sourceTree = ""; }; - C1EA6BFA1680FE1500A21259 /* less-1.1.4.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.4.min.js"; sourceTree = ""; }; - C1EA6BFB1680FE1500A21259 /* less-1.1.5.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.5.js"; sourceTree = ""; }; - C1EA6BFC1680FE1500A21259 /* less-1.1.5.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.5.min.js"; sourceTree = ""; }; - C1EA6BFD1680FE1500A21259 /* less-1.1.6.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.6.js"; sourceTree = ""; }; - C1EA6BFE1680FE1500A21259 /* less-1.1.6.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.1.6.min.js"; sourceTree = ""; }; - C1EA6BFF1680FE1500A21259 /* less-1.2.0.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.2.0.js"; sourceTree = ""; }; - C1EA6C001680FE1500A21259 /* less-1.2.0.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.2.0.min.js"; sourceTree = ""; }; - C1EA6C011680FE1500A21259 /* less-1.2.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.2.1.js"; sourceTree = ""; }; - C1EA6C021680FE1500A21259 /* less-1.2.1.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.2.1.min.js"; sourceTree = ""; }; - C1EA6C031680FE1500A21259 /* less-1.2.2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.2.2.js"; sourceTree = ""; }; - C1EA6C041680FE1500A21259 /* less-1.2.2.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.2.2.min.js"; sourceTree = ""; }; - C1EA6C051680FE1500A21259 /* less-1.3.0.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.3.0.js"; sourceTree = ""; }; - C1EA6C061680FE1500A21259 /* less-1.3.0.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.3.0.min.js"; sourceTree = ""; }; - C1EA6C071680FE1500A21259 /* less-1.3.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.3.1.js"; sourceTree = ""; }; - C1EA6C081680FE1500A21259 /* less-1.3.1.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-1.3.1.min.js"; sourceTree = ""; }; - C1EA6C091680FE1500A21259 /* less-rhino-1.1.3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-rhino-1.1.3.js"; sourceTree = ""; }; - C1EA6C0A1680FE1500A21259 /* less-rhino-1.1.5.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-rhino-1.1.5.js"; sourceTree = ""; }; - C1EA6C0B1680FE1500A21259 /* less-rhino-1.3.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-rhino-1.3.1.js"; sourceTree = ""; }; - C1EA6C0E1680FE1500A21259 /* browser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browser.js; sourceTree = ""; }; - C1EA6C0F1680FE1500A21259 /* colors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = colors.js; sourceTree = ""; }; - C1EA6C101680FE1500A21259 /* cssmin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cssmin.js; sourceTree = ""; }; - C1EA6C111680FE1500A21259 /* functions.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = functions.js; sourceTree = ""; }; - C1EA6C121680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6C131680FE1500A21259 /* lessc_helper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lessc_helper.js; sourceTree = ""; }; - C1EA6C141680FE1500A21259 /* parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.js; sourceTree = ""; }; - C1EA6C151680FE1500A21259 /* rhino.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rhino.js; sourceTree = ""; }; - C1EA6C171680FE1500A21259 /* alpha.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = alpha.js; sourceTree = ""; }; - C1EA6C181680FE1500A21259 /* anonymous.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = anonymous.js; sourceTree = ""; }; - C1EA6C191680FE1500A21259 /* assignment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assignment.js; sourceTree = ""; }; - C1EA6C1A1680FE1500A21259 /* call.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = call.js; sourceTree = ""; }; - C1EA6C1B1680FE1500A21259 /* color.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = color.js; sourceTree = ""; }; - C1EA6C1C1680FE1500A21259 /* comment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = comment.js; sourceTree = ""; }; - C1EA6C1D1680FE1500A21259 /* condition.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = condition.js; sourceTree = ""; }; - C1EA6C1E1680FE1500A21259 /* dimension.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = dimension.js; sourceTree = ""; }; - C1EA6C1F1680FE1500A21259 /* directive.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = directive.js; sourceTree = ""; }; - C1EA6C201680FE1500A21259 /* element.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = element.js; sourceTree = ""; }; - C1EA6C211680FE1500A21259 /* expression.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = expression.js; sourceTree = ""; }; - C1EA6C221680FE1500A21259 /* import.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = import.js; sourceTree = ""; }; - C1EA6C231680FE1500A21259 /* javascript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = javascript.js; sourceTree = ""; }; - C1EA6C241680FE1500A21259 /* keyword.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = keyword.js; sourceTree = ""; }; - C1EA6C251680FE1500A21259 /* media.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = media.js; sourceTree = ""; }; - C1EA6C261680FE1500A21259 /* mixin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mixin.js; sourceTree = ""; }; - C1EA6C271680FE1500A21259 /* operation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = operation.js; sourceTree = ""; }; - C1EA6C281680FE1500A21259 /* paren.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = paren.js; sourceTree = ""; }; - C1EA6C291680FE1500A21259 /* quoted.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = quoted.js; sourceTree = ""; }; - C1EA6C2A1680FE1500A21259 /* ratio.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ratio.js; sourceTree = ""; }; - C1EA6C2B1680FE1500A21259 /* rule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rule.js; sourceTree = ""; }; - C1EA6C2C1680FE1500A21259 /* ruleset.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ruleset.js; sourceTree = ""; }; - C1EA6C2D1680FE1500A21259 /* selector.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = selector.js; sourceTree = ""; }; - C1EA6C2E1680FE1500A21259 /* url.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = url.js; sourceTree = ""; }; - C1EA6C2F1680FE1500A21259 /* value.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = value.js; sourceTree = ""; }; - C1EA6C301680FE1500A21259 /* variable.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = variable.js; sourceTree = ""; }; - C1EA6C311680FE1500A21259 /* tree.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tree.js; sourceTree = ""; }; - C1EA6C321680FE1500A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA6C331680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA6C341680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6C351680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6C381680FE1500A21259 /* colors.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = colors.css; sourceTree = ""; }; - C1EA6C391680FE1500A21259 /* comments.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = comments.css; sourceTree = ""; }; - C1EA6C3A1680FE1500A21259 /* css-3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "css-3.css"; sourceTree = ""; }; - C1EA6C3B1680FE1500A21259 /* css-escapes.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "css-escapes.css"; sourceTree = ""; }; - C1EA6C3C1680FE1500A21259 /* css.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = css.css; sourceTree = ""; }; - C1EA6C3E1680FE1500A21259 /* linenumbers-all.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "linenumbers-all.css"; sourceTree = ""; }; - C1EA6C3F1680FE1500A21259 /* linenumbers-comments.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "linenumbers-comments.css"; sourceTree = ""; }; - C1EA6C401680FE1500A21259 /* linenumbers-mediaquery.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "linenumbers-mediaquery.css"; sourceTree = ""; }; - C1EA6C411680FE1500A21259 /* functions.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = functions.css; sourceTree = ""; }; - C1EA6C421680FE1500A21259 /* ie-filters.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "ie-filters.css"; sourceTree = ""; }; - C1EA6C431680FE1500A21259 /* import-once.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "import-once.css"; sourceTree = ""; }; - C1EA6C441680FE1500A21259 /* import.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = import.css; sourceTree = ""; }; - C1EA6C451680FE1500A21259 /* javascript.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = javascript.css; sourceTree = ""; }; - C1EA6C461680FE1500A21259 /* lazy-eval.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "lazy-eval.css"; sourceTree = ""; }; - C1EA6C471680FE1500A21259 /* media.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = media.css; sourceTree = ""; }; - C1EA6C481680FE1500A21259 /* mixins-args.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "mixins-args.css"; sourceTree = ""; }; - C1EA6C491680FE1500A21259 /* mixins-closure.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "mixins-closure.css"; sourceTree = ""; }; - C1EA6C4A1680FE1500A21259 /* mixins-guards.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "mixins-guards.css"; sourceTree = ""; }; - C1EA6C4B1680FE1500A21259 /* mixins-important.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "mixins-important.css"; sourceTree = ""; }; - C1EA6C4C1680FE1500A21259 /* mixins-named-args.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "mixins-named-args.css"; sourceTree = ""; }; - C1EA6C4D1680FE1500A21259 /* mixins-nested.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "mixins-nested.css"; sourceTree = ""; }; - C1EA6C4E1680FE1500A21259 /* mixins-pattern.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "mixins-pattern.css"; sourceTree = ""; }; - C1EA6C4F1680FE1500A21259 /* mixins.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = mixins.css; sourceTree = ""; }; - C1EA6C501680FE1500A21259 /* operations.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = operations.css; sourceTree = ""; }; - C1EA6C511680FE1500A21259 /* parens.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = parens.css; sourceTree = ""; }; - C1EA6C521680FE1500A21259 /* rulesets.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = rulesets.css; sourceTree = ""; }; - C1EA6C531680FE1500A21259 /* scope.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = scope.css; sourceTree = ""; }; - C1EA6C541680FE1500A21259 /* selectors.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = selectors.css; sourceTree = ""; }; - C1EA6C551680FE1500A21259 /* strings.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = strings.css; sourceTree = ""; }; - C1EA6C561680FE1500A21259 /* variables.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = variables.css; sourceTree = ""; }; - C1EA6C571680FE1500A21259 /* whitespace.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = whitespace.css; sourceTree = ""; }; - C1EA6C591680FE1500A21259 /* colors.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = colors.less; sourceTree = ""; }; - C1EA6C5A1680FE1500A21259 /* comments.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = comments.less; sourceTree = ""; }; - C1EA6C5B1680FE1500A21259 /* css-3.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "css-3.less"; sourceTree = ""; }; - C1EA6C5C1680FE1500A21259 /* css-escapes.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "css-escapes.less"; sourceTree = ""; }; - C1EA6C5D1680FE1500A21259 /* css.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = css.less; sourceTree = ""; }; - C1EA6C601680FE1500A21259 /* test.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.less; sourceTree = ""; }; - C1EA6C611680FE1500A21259 /* linenumbers.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = linenumbers.less; sourceTree = ""; }; - C1EA6C631680FE1500A21259 /* comment-in-selector.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "comment-in-selector.less"; sourceTree = ""; }; - C1EA6C641680FE1500A21259 /* comment-in-selector.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "comment-in-selector.txt"; sourceTree = ""; }; - C1EA6C651680FE1500A21259 /* import-missing.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-missing.less"; sourceTree = ""; }; - C1EA6C661680FE1500A21259 /* import-missing.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-missing.txt"; sourceTree = ""; }; - C1EA6C671680FE1500A21259 /* import-no-semi.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-no-semi.less"; sourceTree = ""; }; - C1EA6C681680FE1500A21259 /* import-no-semi.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-no-semi.txt"; sourceTree = ""; }; - C1EA6C691680FE1500A21259 /* import-subfolder1.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-subfolder1.less"; sourceTree = ""; }; - C1EA6C6A1680FE1500A21259 /* import-subfolder1.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-subfolder1.txt"; sourceTree = ""; }; - C1EA6C6B1680FE1500A21259 /* import-subfolder2.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-subfolder2.less"; sourceTree = ""; }; - C1EA6C6C1680FE1500A21259 /* import-subfolder2.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-subfolder2.txt"; sourceTree = ""; }; - C1EA6C6E1680FE1500A21259 /* import-subfolder1.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-subfolder1.less"; sourceTree = ""; }; - C1EA6C6F1680FE1500A21259 /* import-subfolder2.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-subfolder2.less"; sourceTree = ""; }; - C1EA6C711680FE1500A21259 /* mixin-not-defined.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mixin-not-defined.less"; sourceTree = ""; }; - C1EA6C721680FE1500A21259 /* parse-error-curly-bracket.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "parse-error-curly-bracket.less"; sourceTree = ""; }; - C1EA6C731680FE1500A21259 /* javascript-error.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "javascript-error.less"; sourceTree = ""; }; - C1EA6C741680FE1500A21259 /* javascript-error.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "javascript-error.txt"; sourceTree = ""; }; - C1EA6C751680FE1500A21259 /* mixin-not-defined.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mixin-not-defined.less"; sourceTree = ""; }; - C1EA6C761680FE1500A21259 /* mixin-not-defined.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mixin-not-defined.txt"; sourceTree = ""; }; - C1EA6C771680FE1500A21259 /* parse-error-curly-bracket.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "parse-error-curly-bracket.less"; sourceTree = ""; }; - C1EA6C781680FE1500A21259 /* parse-error-curly-bracket.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "parse-error-curly-bracket.txt"; sourceTree = ""; }; - C1EA6C791680FE1500A21259 /* parse-error-missing-bracket.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "parse-error-missing-bracket.less"; sourceTree = ""; }; - C1EA6C7A1680FE1500A21259 /* parse-error-missing-bracket.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "parse-error-missing-bracket.txt"; sourceTree = ""; }; - C1EA6C7B1680FE1500A21259 /* property-ie5-hack.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "property-ie5-hack.less"; sourceTree = ""; }; - C1EA6C7C1680FE1500A21259 /* property-ie5-hack.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "property-ie5-hack.txt"; sourceTree = ""; }; - C1EA6C7D1680FE1500A21259 /* functions.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = functions.less; sourceTree = ""; }; - C1EA6C7E1680FE1500A21259 /* ie-filters.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "ie-filters.less"; sourceTree = ""; }; - C1EA6C811680FE1500A21259 /* import-once-test-a.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-once-test-a.less"; sourceTree = ""; }; - C1EA6C821680FE1500A21259 /* import-once-test-c.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-once-test-c.less"; sourceTree = ""; }; - C1EA6C831680FE1500A21259 /* import-test-a.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-test-a.less"; sourceTree = ""; }; - C1EA6C841680FE1500A21259 /* import-test-b.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-test-b.less"; sourceTree = ""; }; - C1EA6C851680FE1500A21259 /* import-test-c.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-test-c.less"; sourceTree = ""; }; - C1EA6C861680FE1500A21259 /* import-test-d.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "import-test-d.css"; sourceTree = ""; }; - C1EA6C871680FE1500A21259 /* import-test-e.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-test-e.less"; sourceTree = ""; }; - C1EA6C881680FE1500A21259 /* import-once.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "import-once.less"; sourceTree = ""; }; - C1EA6C891680FE1500A21259 /* import.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = import.less; sourceTree = ""; }; - C1EA6C8A1680FE1500A21259 /* javascript.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = javascript.less; sourceTree = ""; }; - C1EA6C8B1680FE1500A21259 /* lazy-eval.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "lazy-eval.less"; sourceTree = ""; }; - C1EA6C8C1680FE1500A21259 /* media.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = media.less; sourceTree = ""; }; - C1EA6C8D1680FE1500A21259 /* mixins-args.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mixins-args.less"; sourceTree = ""; }; - C1EA6C8E1680FE1500A21259 /* mixins-closure.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mixins-closure.less"; sourceTree = ""; }; - C1EA6C8F1680FE1500A21259 /* mixins-guards.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mixins-guards.less"; sourceTree = ""; }; - C1EA6C901680FE1500A21259 /* mixins-important.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mixins-important.less"; sourceTree = ""; }; - C1EA6C911680FE1500A21259 /* mixins-named-args.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mixins-named-args.less"; sourceTree = ""; }; - C1EA6C921680FE1500A21259 /* mixins-nested.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mixins-nested.less"; sourceTree = ""; }; - C1EA6C931680FE1500A21259 /* mixins-pattern.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "mixins-pattern.less"; sourceTree = ""; }; - C1EA6C941680FE1500A21259 /* mixins.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mixins.less; sourceTree = ""; }; - C1EA6C951680FE1500A21259 /* operations.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = operations.less; sourceTree = ""; }; - C1EA6C961680FE1500A21259 /* parens.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = parens.less; sourceTree = ""; }; - C1EA6C971680FE1500A21259 /* rulesets.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = rulesets.less; sourceTree = ""; }; - C1EA6C981680FE1500A21259 /* scope.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = scope.less; sourceTree = ""; }; - C1EA6C991680FE1500A21259 /* selectors.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = selectors.less; sourceTree = ""; }; - C1EA6C9A1680FE1500A21259 /* strings.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = strings.less; sourceTree = ""; }; - C1EA6C9B1680FE1500A21259 /* variables.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = variables.less; sourceTree = ""; }; - C1EA6C9C1680FE1500A21259 /* whitespace.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = whitespace.less; sourceTree = ""; }; - C1EA6C9D1680FE1500A21259 /* less-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "less-test.js"; sourceTree = ""; }; - C1EA6C9E1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6C9F1680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6CA11680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6CA31680FE1500A21259 /* bool.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bool.js; sourceTree = ""; }; - C1EA6CA41680FE1500A21259 /* boolean_double.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = boolean_double.js; sourceTree = ""; }; - C1EA6CA51680FE1500A21259 /* boolean_single.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = boolean_single.js; sourceTree = ""; }; - C1EA6CA61680FE1500A21259 /* default_hash.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = default_hash.js; sourceTree = ""; }; - C1EA6CA71680FE1500A21259 /* default_singles.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = default_singles.js; sourceTree = ""; }; - C1EA6CA81680FE1500A21259 /* divide.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = divide.js; sourceTree = ""; }; - C1EA6CA91680FE1500A21259 /* line_count.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = line_count.js; sourceTree = ""; }; - C1EA6CAA1680FE1500A21259 /* line_count_options.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = line_count_options.js; sourceTree = ""; }; - C1EA6CAB1680FE1500A21259 /* line_count_wrap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = line_count_wrap.js; sourceTree = ""; }; - C1EA6CAC1680FE1500A21259 /* nonopt.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nonopt.js; sourceTree = ""; }; - C1EA6CAD1680FE1500A21259 /* reflect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = reflect.js; sourceTree = ""; }; - C1EA6CAE1680FE1500A21259 /* short.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = short.js; sourceTree = ""; }; - C1EA6CAF1680FE1500A21259 /* string.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = string.js; sourceTree = ""; }; - C1EA6CB01680FE1500A21259 /* usage-options.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "usage-options.js"; sourceTree = ""; }; - C1EA6CB11680FE1500A21259 /* xup.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = xup.js; sourceTree = ""; }; - C1EA6CB21680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6CB31680FE1500A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA6CB61680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6CB81680FE1500A21259 /* center.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = center.js; sourceTree = ""; }; - C1EA6CB91680FE1500A21259 /* meat.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = meat.js; sourceTree = ""; }; - C1EA6CBA1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6CBB1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6CBC1680FE1500A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA6CBE1680FE1500A21259 /* break.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = break.js; sourceTree = ""; }; - C1EA6CBF1680FE1500A21259 /* idleness.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = idleness.txt; sourceTree = ""; }; - C1EA6CC01680FE1500A21259 /* wrap.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = wrap.js; sourceTree = ""; }; - C1EA6CC11680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6CC21680FE1500A21259 /* README.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.markdown; sourceTree = ""; }; - C1EA6CC51680FE1500A21259 /* argv.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = argv.js; sourceTree = ""; }; - C1EA6CC61680FE1500A21259 /* bin.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bin.js; sourceTree = ""; }; - C1EA6CC71680FE1500A21259 /* _.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = _.js; sourceTree = ""; }; - C1EA6CC81680FE1500A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA6CC91680FE1500A21259 /* usage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = usage.js; sourceTree = ""; }; - C1EA6CCB1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6CCC1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6CCD1680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6CCF1680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6CD01680FE1500A21259 /* addScript.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = addScript.js; sourceTree = ""; }; - C1EA6CD11680FE1500A21259 /* addScript.web.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = addScript.web.js; sourceTree = ""; }; - C1EA6CD21680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6CD51680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6CD61680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6CD91680FE1500A21259 /* json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json5; sourceTree = ""; }; - C1EA6CDB1680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6CDC1680FE1500A21259 /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CHANGELOG.md; sourceTree = ""; }; - C1EA6CDE1680FE1500A21259 /* cli.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cli.js; sourceTree = ""; }; - C1EA6CDF1680FE1500A21259 /* json5.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = json5.js; sourceTree = ""; }; - C1EA6CE01680FE1500A21259 /* require.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = require.js; sourceTree = ""; }; - C1EA6CE11680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA6CE21680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6CE31680FE1500A21259 /* package.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = package.json5; sourceTree = ""; }; - C1EA6CE41680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6CE81680FE1500A21259 /* empty-array.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "empty-array.json"; sourceTree = ""; }; - C1EA6CE91680FE1500A21259 /* leading-comma-array.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "leading-comma-array.js"; sourceTree = ""; }; - C1EA6CEA1680FE1500A21259 /* lone-trailing-comma-array.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "lone-trailing-comma-array.js"; sourceTree = ""; }; - C1EA6CEB1680FE1500A21259 /* no-comma-array.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "no-comma-array.txt"; sourceTree = ""; }; - C1EA6CEC1680FE1500A21259 /* regular-array.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "regular-array.json"; sourceTree = ""; }; - C1EA6CED1680FE1500A21259 /* trailing-comma-array.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "trailing-comma-array.json5"; sourceTree = ""; }; - C1EA6CEF1680FE1500A21259 /* block-comment-following-array-element.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "block-comment-following-array-element.json5"; sourceTree = ""; }; - C1EA6CF01680FE1500A21259 /* block-comment-following-top-level-value.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "block-comment-following-top-level-value.json5"; sourceTree = ""; }; - C1EA6CF11680FE1500A21259 /* block-comment-in-string.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "block-comment-in-string.json"; sourceTree = ""; }; - C1EA6CF21680FE1500A21259 /* block-comment-preceding-top-level-value.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "block-comment-preceding-top-level-value.json5"; sourceTree = ""; }; - C1EA6CF31680FE1500A21259 /* block-comment-with-asterisks.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "block-comment-with-asterisks.json5"; sourceTree = ""; }; - C1EA6CF41680FE1500A21259 /* inline-comment-following-array-element.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "inline-comment-following-array-element.json5"; sourceTree = ""; }; - C1EA6CF51680FE1500A21259 /* inline-comment-following-top-level-value.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "inline-comment-following-top-level-value.json5"; sourceTree = ""; }; - C1EA6CF61680FE1500A21259 /* inline-comment-in-string.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "inline-comment-in-string.json"; sourceTree = ""; }; - C1EA6CF71680FE1500A21259 /* inline-comment-preceding-top-level-value.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "inline-comment-preceding-top-level-value.json5"; sourceTree = ""; }; - C1EA6CF81680FE1500A21259 /* top-level-block-comment.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "top-level-block-comment.txt"; sourceTree = ""; }; - C1EA6CF91680FE1500A21259 /* top-level-inline-comment.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "top-level-inline-comment.txt"; sourceTree = ""; }; - C1EA6CFA1680FE1500A21259 /* unterminated-block-comment.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "unterminated-block-comment.txt"; sourceTree = ""; }; - C1EA6CFC1680FE1500A21259 /* empty.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = empty.txt; sourceTree = ""; }; - C1EA6CFD1680FE1500A21259 /* npm-package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "npm-package.json"; sourceTree = ""; }; - C1EA6CFE1680FE1500A21259 /* npm-package.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "npm-package.json5"; sourceTree = ""; }; - C1EA6CFF1680FE1500A21259 /* readme-example.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "readme-example.json5"; sourceTree = ""; }; - C1EA6D011680FE1500A21259 /* decimal-literal-with-exponent.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "decimal-literal-with-exponent.json"; sourceTree = ""; }; - C1EA6D021680FE1500A21259 /* decimal-literal-with-negative-exponent.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "decimal-literal-with-negative-exponent.json"; sourceTree = ""; }; - C1EA6D031680FE1500A21259 /* decimal-literal.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "decimal-literal.json"; sourceTree = ""; }; - C1EA6D041680FE1500A21259 /* hexadecimal-literal-with-lowercase-letter.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "hexadecimal-literal-with-lowercase-letter.json5"; sourceTree = ""; }; - C1EA6D051680FE1500A21259 /* hexadecimal-literal-with-no-digits.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "hexadecimal-literal-with-no-digits.txt"; sourceTree = ""; }; - C1EA6D061680FE1500A21259 /* hexadecimal-literal-with-uppercase-x.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "hexadecimal-literal-with-uppercase-x.json5"; sourceTree = ""; }; - C1EA6D071680FE1500A21259 /* hexadecimal-literal.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "hexadecimal-literal.json5"; sourceTree = ""; }; - C1EA6D081680FE1500A21259 /* leading-decimal-point.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "leading-decimal-point.json5"; sourceTree = ""; }; - C1EA6D091680FE1500A21259 /* negative-decimal-literal.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "negative-decimal-literal.json"; sourceTree = ""; }; - C1EA6D0A1680FE1500A21259 /* negative-hexadecimal-literal.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "negative-hexadecimal-literal.json5"; sourceTree = ""; }; - C1EA6D0B1680FE1500A21259 /* negative-leading-decimal-point.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "negative-leading-decimal-point.json5"; sourceTree = ""; }; - C1EA6D0C1680FE1500A21259 /* noctal-literal-with-octal-digit-after-leading-zero.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "noctal-literal-with-octal-digit-after-leading-zero.js"; sourceTree = ""; }; - C1EA6D0D1680FE1500A21259 /* noctal-literal.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "noctal-literal.js"; sourceTree = ""; }; - C1EA6D0E1680FE1500A21259 /* octal-literal.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "octal-literal.txt"; sourceTree = ""; }; - C1EA6D0F1680FE1500A21259 /* trailing-decimal-point-with-exponent.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "trailing-decimal-point-with-exponent.js"; sourceTree = ""; }; - C1EA6D101680FE1500A21259 /* trailing-decimal-point.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "trailing-decimal-point.js"; sourceTree = ""; }; - C1EA6D111680FE1500A21259 /* zero-literal.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "zero-literal.json"; sourceTree = ""; }; - C1EA6D131680FE1500A21259 /* empty-object.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "empty-object.json"; sourceTree = ""; }; - C1EA6D141680FE1500A21259 /* illegal-unquoted-key-number.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "illegal-unquoted-key-number.txt"; sourceTree = ""; }; - C1EA6D151680FE1500A21259 /* illegal-unquoted-key-symbol.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "illegal-unquoted-key-symbol.txt"; sourceTree = ""; }; - C1EA6D161680FE1500A21259 /* leading-comma-object.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "leading-comma-object.txt"; sourceTree = ""; }; - C1EA6D171680FE1500A21259 /* lone-trailing-comma-object.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "lone-trailing-comma-object.txt"; sourceTree = ""; }; - C1EA6D181680FE1500A21259 /* no-comma-object.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "no-comma-object.txt"; sourceTree = ""; }; - C1EA6D191680FE1500A21259 /* reserved-unquoted-key.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "reserved-unquoted-key.json5"; sourceTree = ""; }; - C1EA6D1A1680FE1500A21259 /* single-quoted-key.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "single-quoted-key.json5"; sourceTree = ""; }; - C1EA6D1B1680FE1500A21259 /* trailing-comma-object.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "trailing-comma-object.json5"; sourceTree = ""; }; - C1EA6D1C1680FE1500A21259 /* unquoted-keys.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "unquoted-keys.json5"; sourceTree = ""; }; - C1EA6D1E1680FE1500A21259 /* escaped-single-quoted-string.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "escaped-single-quoted-string.json5"; sourceTree = ""; }; - C1EA6D1F1680FE1500A21259 /* multi-line-string.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "multi-line-string.json5"; sourceTree = ""; }; - C1EA6D201680FE1500A21259 /* single-quoted-string.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "single-quoted-string.json5"; sourceTree = ""; }; - C1EA6D221680FE1500A21259 /* unicode-escaped-unquoted-key.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "unicode-escaped-unquoted-key.json5"; sourceTree = ""; }; - C1EA6D231680FE1500A21259 /* unicode-unquoted-key.json5 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "unicode-unquoted-key.json5"; sourceTree = ""; }; - C1EA6D241680FE1500A21259 /* parse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parse.js; sourceTree = ""; }; - C1EA6D251680FE1500A21259 /* readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.md; sourceTree = ""; }; - C1EA6D261680FE1500A21259 /* require.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = require.js; sourceTree = ""; }; - C1EA6D271680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6D281680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6D2A1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6D2B1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6D2C1680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6D2D1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6D2E1680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6D311680FE1500A21259 /* sprintf.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sprintf.js; sourceTree = ""; }; - C1EA6D321680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6D331680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6D351680FE1500A21259 /* addStyle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = addStyle.js; sourceTree = ""; }; - C1EA6D361680FE1500A21259 /* addStyle.web.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = addStyle.web.js; sourceTree = ""; }; - C1EA6D371680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6D381680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6D391680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6D3B1680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6D3D1680FE1500A21259 /* uglifyjs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = uglifyjs; sourceTree = ""; }; - C1EA6D3E1680FE1500A21259 /* docstyle.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = docstyle.css; sourceTree = ""; }; - C1EA6D401680FE1500A21259 /* consolidator.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = consolidator.js; sourceTree = ""; }; - C1EA6D411680FE1500A21259 /* object-ast.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "object-ast.js"; sourceTree = ""; }; - C1EA6D421680FE1500A21259 /* parse-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "parse-js.js"; sourceTree = ""; }; - C1EA6D431680FE1500A21259 /* process.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = process.js; sourceTree = ""; }; - C1EA6D441680FE1500A21259 /* squeeze-more.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "squeeze-more.js"; sourceTree = ""; }; - C1EA6D451680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6D461680FE1500A21259 /* README.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = README.html; sourceTree = ""; }; - C1EA6D471680FE1500A21259 /* README.org */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.org; sourceTree = ""; }; - C1EA6D491680FE1500A21259 /* beautify.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = beautify.js; sourceTree = ""; }; - C1EA6D4A1680FE1500A21259 /* testparser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = testparser.js; sourceTree = ""; }; - C1EA6D4E1680FE1500A21259 /* array1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array1.js; sourceTree = ""; }; - C1EA6D4F1680FE1500A21259 /* array2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array2.js; sourceTree = ""; }; - C1EA6D501680FE1500A21259 /* array3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array3.js; sourceTree = ""; }; - C1EA6D511680FE1500A21259 /* array4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array4.js; sourceTree = ""; }; - C1EA6D521680FE1500A21259 /* assignment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assignment.js; sourceTree = ""; }; - C1EA6D531680FE1500A21259 /* concatstring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = concatstring.js; sourceTree = ""; }; - C1EA6D541680FE1500A21259 /* const.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = const.js; sourceTree = ""; }; - C1EA6D551680FE1500A21259 /* empty-blocks.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "empty-blocks.js"; sourceTree = ""; }; - C1EA6D561680FE1500A21259 /* forstatement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = forstatement.js; sourceTree = ""; }; - C1EA6D571680FE1500A21259 /* if.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = if.js; sourceTree = ""; }; - C1EA6D581680FE1500A21259 /* ifreturn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn.js; sourceTree = ""; }; - C1EA6D591680FE1500A21259 /* ifreturn2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn2.js; sourceTree = ""; }; - C1EA6D5A1680FE1500A21259 /* issue10.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue10.js; sourceTree = ""; }; - C1EA6D5B1680FE1500A21259 /* issue11.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue11.js; sourceTree = ""; }; - C1EA6D5C1680FE1500A21259 /* issue13.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue13.js; sourceTree = ""; }; - C1EA6D5D1680FE1500A21259 /* issue14.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue14.js; sourceTree = ""; }; - C1EA6D5E1680FE1500A21259 /* issue16.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue16.js; sourceTree = ""; }; - C1EA6D5F1680FE1500A21259 /* issue17.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue17.js; sourceTree = ""; }; - C1EA6D601680FE1500A21259 /* issue20.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue20.js; sourceTree = ""; }; - C1EA6D611680FE1500A21259 /* issue21.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue21.js; sourceTree = ""; }; - C1EA6D621680FE1500A21259 /* issue25.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue25.js; sourceTree = ""; }; - C1EA6D631680FE1500A21259 /* issue27.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue27.js; sourceTree = ""; }; - C1EA6D641680FE1500A21259 /* issue278.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue278.js; sourceTree = ""; }; - C1EA6D651680FE1500A21259 /* issue28.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue28.js; sourceTree = ""; }; - C1EA6D661680FE1500A21259 /* issue29.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue29.js; sourceTree = ""; }; - C1EA6D671680FE1500A21259 /* issue30.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue30.js; sourceTree = ""; }; - C1EA6D681680FE1500A21259 /* issue34.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue34.js; sourceTree = ""; }; - C1EA6D691680FE1500A21259 /* issue4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue4.js; sourceTree = ""; }; - C1EA6D6A1680FE1500A21259 /* issue48.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue48.js; sourceTree = ""; }; - C1EA6D6B1680FE1500A21259 /* issue50.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue50.js; sourceTree = ""; }; - C1EA6D6C1680FE1500A21259 /* issue53.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue53.js; sourceTree = ""; }; - C1EA6D6D1680FE1500A21259 /* issue54.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue54.1.js; sourceTree = ""; }; - C1EA6D6E1680FE1500A21259 /* issue68.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue68.js; sourceTree = ""; }; - C1EA6D6F1680FE1500A21259 /* issue69.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue69.js; sourceTree = ""; }; - C1EA6D701680FE1500A21259 /* issue9.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue9.js; sourceTree = ""; }; - C1EA6D711680FE1500A21259 /* mangle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mangle.js; sourceTree = ""; }; - C1EA6D721680FE1500A21259 /* null_string.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = null_string.js; sourceTree = ""; }; - C1EA6D731680FE1500A21259 /* strict-equals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "strict-equals.js"; sourceTree = ""; }; - C1EA6D741680FE1500A21259 /* var.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = var.js; sourceTree = ""; }; - C1EA6D751680FE1500A21259 /* whitespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = whitespace.js; sourceTree = ""; }; - C1EA6D761680FE1500A21259 /* with.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = with.js; sourceTree = ""; }; - C1EA6D781680FE1500A21259 /* array1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array1.js; sourceTree = ""; }; - C1EA6D791680FE1500A21259 /* array2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array2.js; sourceTree = ""; }; - C1EA6D7A1680FE1500A21259 /* array3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array3.js; sourceTree = ""; }; - C1EA6D7B1680FE1500A21259 /* array4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = array4.js; sourceTree = ""; }; - C1EA6D7C1680FE1500A21259 /* assignment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = assignment.js; sourceTree = ""; }; - C1EA6D7D1680FE1500A21259 /* concatstring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = concatstring.js; sourceTree = ""; }; - C1EA6D7E1680FE1500A21259 /* const.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = const.js; sourceTree = ""; }; - C1EA6D7F1680FE1500A21259 /* empty-blocks.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "empty-blocks.js"; sourceTree = ""; }; - C1EA6D801680FE1500A21259 /* forstatement.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = forstatement.js; sourceTree = ""; }; - C1EA6D811680FE1500A21259 /* if.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = if.js; sourceTree = ""; }; - C1EA6D821680FE1500A21259 /* ifreturn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn.js; sourceTree = ""; }; - C1EA6D831680FE1500A21259 /* ifreturn2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ifreturn2.js; sourceTree = ""; }; - C1EA6D841680FE1500A21259 /* issue10.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue10.js; sourceTree = ""; }; - C1EA6D851680FE1500A21259 /* issue11.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue11.js; sourceTree = ""; }; - C1EA6D861680FE1500A21259 /* issue13.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue13.js; sourceTree = ""; }; - C1EA6D871680FE1500A21259 /* issue14.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue14.js; sourceTree = ""; }; - C1EA6D881680FE1500A21259 /* issue16.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue16.js; sourceTree = ""; }; - C1EA6D891680FE1500A21259 /* issue17.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue17.js; sourceTree = ""; }; - C1EA6D8A1680FE1500A21259 /* issue20.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue20.js; sourceTree = ""; }; - C1EA6D8B1680FE1500A21259 /* issue21.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue21.js; sourceTree = ""; }; - C1EA6D8C1680FE1500A21259 /* issue25.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue25.js; sourceTree = ""; }; - C1EA6D8D1680FE1500A21259 /* issue27.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue27.js; sourceTree = ""; }; - C1EA6D8E1680FE1500A21259 /* issue278.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue278.js; sourceTree = ""; }; - C1EA6D8F1680FE1500A21259 /* issue28.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue28.js; sourceTree = ""; }; - C1EA6D901680FE1500A21259 /* issue29.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue29.js; sourceTree = ""; }; - C1EA6D911680FE1500A21259 /* issue30.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue30.js; sourceTree = ""; }; - C1EA6D921680FE1500A21259 /* issue34.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue34.js; sourceTree = ""; }; - C1EA6D931680FE1500A21259 /* issue4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue4.js; sourceTree = ""; }; - C1EA6D941680FE1500A21259 /* issue48.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue48.js; sourceTree = ""; }; - C1EA6D951680FE1500A21259 /* issue50.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue50.js; sourceTree = ""; }; - C1EA6D961680FE1500A21259 /* issue53.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue53.js; sourceTree = ""; }; - C1EA6D971680FE1500A21259 /* issue54.1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue54.1.js; sourceTree = ""; }; - C1EA6D981680FE1500A21259 /* issue68.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue68.js; sourceTree = ""; }; - C1EA6D991680FE1500A21259 /* issue69.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue69.js; sourceTree = ""; }; - C1EA6D9A1680FE1500A21259 /* issue9.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = issue9.js; sourceTree = ""; }; - C1EA6D9B1680FE1500A21259 /* mangle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mangle.js; sourceTree = ""; }; - C1EA6D9C1680FE1500A21259 /* null_string.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = null_string.js; sourceTree = ""; }; - C1EA6D9D1680FE1500A21259 /* strict-equals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "strict-equals.js"; sourceTree = ""; }; - C1EA6D9E1680FE1500A21259 /* var.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = var.js; sourceTree = ""; }; - C1EA6D9F1680FE1500A21259 /* whitespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = whitespace.js; sourceTree = ""; }; - C1EA6DA01680FE1500A21259 /* with.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = with.js; sourceTree = ""; }; - C1EA6DA11680FE1500A21259 /* scripts.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = scripts.js; sourceTree = ""; }; - C1EA6DA31680FE1500A21259 /* 269.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = 269.js; sourceTree = ""; }; - C1EA6DA41680FE1500A21259 /* app.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = app.js; sourceTree = ""; }; - C1EA6DA51680FE1500A21259 /* embed-tokens.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "embed-tokens.js"; sourceTree = ""; }; - C1EA6DA61680FE1500A21259 /* goto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = goto.js; sourceTree = ""; }; - C1EA6DA71680FE1500A21259 /* goto2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = goto2.js; sourceTree = ""; }; - C1EA6DA81680FE1500A21259 /* hoist.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hoist.js; sourceTree = ""; }; - C1EA6DA91680FE1500A21259 /* instrument.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = instrument.js; sourceTree = ""; }; - C1EA6DAA1680FE1500A21259 /* instrument2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = instrument2.js; sourceTree = ""; }; - C1EA6DAB1680FE1500A21259 /* liftvars.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = liftvars.js; sourceTree = ""; }; - C1EA6DAC1680FE1500A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA6DAD1680FE1500A21259 /* uglify-hangs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "uglify-hangs.js"; sourceTree = ""; }; - C1EA6DAE1680FE1500A21259 /* uglify-hangs2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "uglify-hangs2.js"; sourceTree = ""; }; - C1EA6DAF1680FE1500A21259 /* uglify-js.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "uglify-js.js"; sourceTree = ""; }; - C1EA6DB11680FE1500A21259 /* cacheable.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cacheable.js; sourceTree = ""; }; - C1EA6DB21680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6DB31680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6DB41680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6DB61680FE1500A21259 /* cacheable.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cacheable.js; sourceTree = ""; }; - C1EA6DB71680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6DB81680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6DB91680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6DBB1680FE1500A21259 /* browser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browser.js; sourceTree = ""; }; - C1EA6DBC1680FE1500A21259 /* browserAsync.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browserAsync.js; sourceTree = ""; }; - C1EA6DBD1680FE1500A21259 /* browserSingle.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browserSingle.js; sourceTree = ""; }; - C1EA6DBE1680FE1500A21259 /* node.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = node.js; sourceTree = ""; }; - C1EA6DBF1680FE1500A21259 /* nodeTemplate.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nodeTemplate.js; sourceTree = ""; }; - C1EA6DC21680FE1500A21259 /* build.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = build.js; sourceTree = ""; }; - C1EA6DC31680FE1500A21259 /* chai.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = chai.js; sourceTree = ""; }; - C1EA6DC61680FE1500A21259 /* stylesheet-import1.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "stylesheet-import1.css"; sourceTree = ""; }; - C1EA6DC71680FE1500A21259 /* stylesheet-import3.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "stylesheet-import3.css"; sourceTree = ""; }; - C1EA6DC81680FE1500A21259 /* generateCss.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = generateCss.js; sourceTree = ""; }; - C1EA6DC91680FE1500A21259 /* stylesheet.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = stylesheet.css; sourceTree = ""; }; - C1EA6DCB1680FE1500A21259 /* errorfile.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = errorfile.js; sourceTree = ""; }; - C1EA6DCC1680FE1500A21259 /* file1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file1.js; sourceTree = ""; }; - C1EA6DCD1680FE1500A21259 /* file2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file2.js; sourceTree = ""; }; - C1EA6DCE1680FE1500A21259 /* file3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file3.js; sourceTree = ""; }; - C1EA6DCF1680FE1500A21259 /* typeof.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = typeof.js; sourceTree = ""; }; - C1EA6DD11680FE1500A21259 /* fail.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = fail.png; sourceTree = ""; }; - C1EA6DD21680FE1500A21259 /* image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = image.png; sourceTree = ""; }; - C1EA6DD51680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6DD81680FE1500A21259 /* import1.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = import1.less; sourceTree = ""; }; - C1EA6DD91680FE1500A21259 /* stylesheet.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = stylesheet.less; sourceTree = ""; }; - C1EA6DDB1680FE1500A21259 /* a.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = a.js; sourceTree = ""; }; - C1EA6DDC1680FE1500A21259 /* acircular.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = acircular.js; sourceTree = ""; }; - C1EA6DDD1680FE1500A21259 /* acircular2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = acircular2.js; sourceTree = ""; }; - C1EA6DDE1680FE1500A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6DDF1680FE1500A21259 /* c.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = c.js; sourceTree = ""; }; - C1EA6DE01680FE1500A21259 /* circular.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = circular.js; sourceTree = ""; }; - C1EA6DE11680FE1500A21259 /* circular2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = circular2.js; sourceTree = ""; }; - C1EA6DE21680FE1500A21259 /* constructor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = constructor.js; sourceTree = ""; }; - C1EA6DE31680FE1500A21259 /* d.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = d.js; sourceTree = ""; }; - C1EA6DE41680FE1500A21259 /* duplicate.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = duplicate.js; sourceTree = ""; }; - C1EA6DE51680FE1500A21259 /* duplicate2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = duplicate2.js; sourceTree = ""; }; - C1EA6DE61680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6DE71680FE1500A21259 /* index.web.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.web.js; sourceTree = ""; }; - C1EA6DE81680FE1500A21259 /* singluar.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = singluar.js; sourceTree = ""; }; - C1EA6DE91680FE1500A21259 /* singluar2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = singluar2.js; sourceTree = ""; }; - C1EA6DEA1680FE1500A21259 /* two.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = two.js; sourceTree = ""; }; - C1EA6DEB1680FE1500A21259 /* libary2config.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = libary2config.js; sourceTree = ""; }; - C1EA6DED1680FE1500A21259 /* reverseloader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = reverseloader.js; sourceTree = ""; }; - C1EA6DEE1680FE1500A21259 /* middlewareTest.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = middlewareTest.js; sourceTree = ""; }; - C1EA6DEF1680FE1500A21259 /* mocha.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = mocha.css; sourceTree = ""; }; - C1EA6DF01680FE1500A21259 /* mocha.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = mocha.js; sourceTree = ""; }; - C1EA6DF21680FE1500A21259 /* extra.loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = extra.loader.js; sourceTree = ""; }; - C1EA6DF41680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6DF61680FE1500A21259 /* comp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = comp.js; sourceTree = ""; }; - C1EA6DF71680FE1500A21259 /* component.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = component.js; sourceTree = ""; }; - C1EA6DFA1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6DFC1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6DFF1680FE1500A21259 /* extra.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = extra.js; sourceTree = ""; }; - C1EA6E001680FE1500A21259 /* extra2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = extra2.js; sourceTree = ""; }; - C1EA6E011680FE1500A21259 /* main.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main.js; sourceTree = ""; }; - C1EA6E021680FE1500A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA6E031680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6E051680FE1500A21259 /* import2.less */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = import2.less; sourceTree = ""; }; - C1EA6E061680FE1500A21259 /* stylesheet-import2.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "stylesheet-import2.css"; sourceTree = ""; }; - C1EA6E081680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6E0A1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6E0C1680FE1500A21259 /* file.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = file.js; sourceTree = ""; }; - C1EA6E0D1680FE1500A21259 /* subfilemodule.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = subfilemodule.js; sourceTree = ""; }; - C1EA6E0F1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6E121680FE1500A21259 /* loader-indirect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "loader-indirect.js"; sourceTree = ""; }; - C1EA6E131680FE1500A21259 /* loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = loader.js; sourceTree = ""; }; - C1EA6E141680FE1500A21259 /* loader.webpack-loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "loader.webpack-loader.js"; sourceTree = ""; }; - C1EA6E151680FE1500A21259 /* loader2.web-loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "loader2.web-loader.js"; sourceTree = ""; }; - C1EA6E161680FE1500A21259 /* loader3.loader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = loader3.loader.js; sourceTree = ""; }; - C1EA6E171680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6E191680FE1500A21259 /* common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = common.js; sourceTree = ""; }; - C1EA6E1C1680FE1500A21259 /* plain.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = plain.js; sourceTree = ""; }; - C1EA6E1D1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6E1F1680FE1500A21259 /* test-assert.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-assert.js"; sourceTree = ""; }; - C1EA6E201680FE1500A21259 /* test-event-emitter-add-listeners.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-event-emitter-add-listeners.js"; sourceTree = ""; }; - C1EA6E211680FE1500A21259 /* test-event-emitter-check-listener-leaks.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-event-emitter-check-listener-leaks.js"; sourceTree = ""; }; - C1EA6E221680FE1500A21259 /* test-event-emitter-max-listeners.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-event-emitter-max-listeners.js"; sourceTree = ""; }; - C1EA6E231680FE1500A21259 /* test-event-emitter-modify-in-emit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-event-emitter-modify-in-emit.js"; sourceTree = ""; }; - C1EA6E241680FE1500A21259 /* test-event-emitter-num-args.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-event-emitter-num-args.js"; sourceTree = ""; }; - C1EA6E251680FE1500A21259 /* test-event-emitter-once.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-event-emitter-once.js"; sourceTree = ""; }; - C1EA6E261680FE1500A21259 /* test-event-emitter-remove-all-listeners.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-event-emitter-remove-all-listeners.js"; sourceTree = ""; }; - C1EA6E271680FE1500A21259 /* test-event-emitter-remove-listeners.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-event-emitter-remove-listeners.js"; sourceTree = ""; }; - C1EA6E281680FE1500A21259 /* test-global.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-global.js"; sourceTree = ""; }; - C1EA6E291680FE1500A21259 /* test-next-tick-doesnt-hang.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-next-tick-doesnt-hang.js"; sourceTree = ""; }; - C1EA6E2A1680FE1500A21259 /* test-next-tick-ordering2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-next-tick-ordering2.js"; sourceTree = ""; }; - C1EA6E2B1680FE1500A21259 /* test-path.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-path.js"; sourceTree = ""; }; - C1EA6E2C1680FE1500A21259 /* test-punycode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-punycode.js"; sourceTree = ""; }; - C1EA6E2D1680FE1500A21259 /* test-querystring.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-querystring.js"; sourceTree = ""; }; - C1EA6E2E1680FE1500A21259 /* test-sys.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-sys.js"; sourceTree = ""; }; - C1EA6E2F1680FE1500A21259 /* test-timers-zero-timeout.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-timers-zero-timeout.js"; sourceTree = ""; }; - C1EA6E301680FE1500A21259 /* test-timers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-timers.js"; sourceTree = ""; }; - C1EA6E311680FE1500A21259 /* test-url.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-url.js"; sourceTree = ""; }; - C1EA6E321680FE1500A21259 /* test-util-format.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-util-format.js"; sourceTree = ""; }; - C1EA6E331680FE1500A21259 /* test-util-inspect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-util-inspect.js"; sourceTree = ""; }; - C1EA6E341680FE1500A21259 /* test-util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "test-util.js"; sourceTree = ""; }; - C1EA6E361680FE1500A21259 /* abc.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = abc.txt; sourceTree = ""; }; - C1EA6E371680FE1500A21259 /* script.coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = script.coffee; sourceTree = ""; }; - C1EA6E381680FE1500A21259 /* template.jade */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = template.jade; sourceTree = ""; }; - C1EA6E3A1680FE1500A21259 /* dump-file.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "dump-file.txt"; sourceTree = ""; }; - C1EA6E3C1680FE1500A21259 /* tmpl.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tmpl.js; sourceTree = ""; }; - C1EA6E3D1680FE1500A21259 /* templateLoader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = templateLoader.js; sourceTree = ""; }; - C1EA6E3E1680FE1500A21259 /* templateLoaderIndirect.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = templateLoaderIndirect.js; sourceTree = ""; }; - C1EA6E3F1680FE1500A21259 /* tmpl.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tmpl.js; sourceTree = ""; }; - C1EA6E401680FE1500A21259 /* tests.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = tests.html; sourceTree = ""; }; - C1EA6E431680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6E441680FE1500A21259 /* buildDeps.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buildDeps.js; sourceTree = ""; }; - C1EA6E461680FE1500A21259 /* a.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = a.js; sourceTree = ""; }; - C1EA6E471680FE1500A21259 /* abc.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = abc.txt; sourceTree = ""; }; - C1EA6E481680FE1500A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6E491680FE1500A21259 /* c.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = c.js; sourceTree = ""; }; - C1EA6E4A1680FE1500A21259 /* complex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = complex.js; sourceTree = ""; }; - C1EA6E4C1680FE1500A21259 /* item (0).js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "item (0).js"; sourceTree = ""; }; - C1EA6E4D1680FE1500A21259 /* item (1).js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "item (1).js"; sourceTree = ""; }; - C1EA6E4E1680FE1500A21259 /* item (2).js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "item (2).js"; sourceTree = ""; }; - C1EA6E4F1680FE1500A21259 /* item (3).js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "item (3).js"; sourceTree = ""; }; - C1EA6E501680FE1500A21259 /* item (4).js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "item (4).js"; sourceTree = ""; }; - C1EA6E511680FE1500A21259 /* item (5).js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "item (5).js"; sourceTree = ""; }; - C1EA6E521680FE1500A21259 /* item (6).js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "item (6).js"; sourceTree = ""; }; - C1EA6E531680FE1500A21259 /* item (7).js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "item (7).js"; sourceTree = ""; }; - C1EA6E541680FE1500A21259 /* item (8).js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "item (8).js"; sourceTree = ""; }; - C1EA6E551680FE1500A21259 /* item (9).js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "item (9).js"; sourceTree = ""; }; - C1EA6E571680FE1500A21259 /* complex1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = complex1.js; sourceTree = ""; }; - C1EA6E581680FE1500A21259 /* main1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main1.js; sourceTree = ""; }; - C1EA6E591680FE1500A21259 /* main2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main2.js; sourceTree = ""; }; - C1EA6E5A1680FE1500A21259 /* main3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main3.js; sourceTree = ""; }; - C1EA6E5B1680FE1500A21259 /* main4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main4.js; sourceTree = ""; }; - C1EA6E5E1680FE1500A21259 /* step1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = step1.js; sourceTree = ""; }; - C1EA6E5F1680FE1500A21259 /* step2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = step2.js; sourceTree = ""; }; - C1EA6E621680FE1500A21259 /* a.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = a.js; sourceTree = ""; }; - C1EA6E631680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6E651680FE1500A21259 /* a.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = a.js; sourceTree = ""; }; - C1EA6E661680FE1500A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6E681680FE1500A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6E6A1680FE1500A21259 /* b.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = b.js; sourceTree = ""; }; - C1EA6E6B1680FE1500A21259 /* polyfills.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = polyfills.js; sourceTree = ""; }; - C1EA6E6D1680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6E6E1680FE1500A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA6E701680FE1500A21259 /* parser.benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = parser.benchmark.js; sourceTree = ""; }; - C1EA6E711680FE1500A21259 /* sender.benchmark.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sender.benchmark.js; sourceTree = ""; }; - C1EA6E721680FE1500A21259 /* speed.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = speed.js; sourceTree = ""; }; - C1EA6E731680FE1500A21259 /* util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = util.js; sourceTree = ""; }; - C1EA6E751680FE1500A21259 /* wscat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wscat; sourceTree = ""; }; - C1EA6E761680FE1500A21259 /* binding.gyp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = binding.gyp; sourceTree = ""; }; - C1EA6E781680FE1500A21259 /* binding.Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = binding.Makefile; sourceTree = ""; }; - C1EA6E791680FE1500A21259 /* bufferutil.target.mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bufferutil.target.mk; sourceTree = ""; }; - C1EA6E7A1680FE1500A21259 /* config.gypi */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = config.gypi; sourceTree = ""; }; - C1EA6E7B1680FE1500A21259 /* gyp-mac-tool */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "gyp-mac-tool"; sourceTree = ""; }; - C1EA6E7C1680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA6E801680FE1500A21259 /* bufferutil.node.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = bufferutil.node.d; sourceTree = ""; }; - C1EA6E841680FE1500A21259 /* bufferutil.o.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = bufferutil.o.d; sourceTree = ""; }; - C1EA6E871680FE1500A21259 /* validation.o.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = validation.o.d; sourceTree = ""; }; - C1EA6E881680FE1500A21259 /* validation.node.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = validation.node.d; sourceTree = ""; }; - C1EA6E891680FE1500A21259 /* bufferutil.node */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = bufferutil.node; sourceTree = ""; }; - C1EA6E8A1680FE1500A21259 /* linker.lock */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = linker.lock; sourceTree = ""; }; - C1EA6E8E1680FE1500A21259 /* bufferutil.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = bufferutil.o; sourceTree = ""; }; - C1EA6E911680FE1500A21259 /* validation.o */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.objfile"; path = validation.o; sourceTree = ""; }; - C1EA6E921680FE1500A21259 /* validation.node */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = validation.node; sourceTree = ""; }; - C1EA6E931680FE1500A21259 /* validation.target.mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = validation.target.mk; sourceTree = ""; }; - C1EA6E951680FE1500A21259 /* ws.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ws.md; sourceTree = ""; }; - C1EA6E981680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6E991680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6E9B1680FE1500A21259 /* app.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = app.js; sourceTree = ""; }; - C1EA6E9C1680FE1500A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA6E9D1680FE1500A21259 /* uploader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = uploader.js; sourceTree = ""; }; - C1EA6E9E1680FE1500A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA6EA01680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6EA21680FE1500A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA6EA31680FE1500A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA6EA51680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6EA71680FE1500A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA6EA81680FE1500A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA6EA91680FE1500A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA6EAA1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6EAB1680FE1500A21259 /* install.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = install.js; sourceTree = ""; }; - C1EA6EAD1680FE1500A21259 /* BufferPool.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = BufferPool.js; sourceTree = ""; }; - C1EA6EAE1680FE1500A21259 /* BufferUtil.fallback.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = BufferUtil.fallback.js; sourceTree = ""; }; - C1EA6EAF1680FE1500A21259 /* BufferUtil.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = BufferUtil.js; sourceTree = ""; }; - C1EA6EB01680FE1500A21259 /* ErrorCodes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ErrorCodes.js; sourceTree = ""; }; - C1EA6EB11680FE1500A21259 /* Receiver.hixie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Receiver.hixie.js; sourceTree = ""; }; - C1EA6EB21680FE1500A21259 /* Receiver.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Receiver.js; sourceTree = ""; }; - C1EA6EB31680FE1500A21259 /* Sender.hixie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Sender.hixie.js; sourceTree = ""; }; - C1EA6EB41680FE1500A21259 /* Sender.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Sender.js; sourceTree = ""; }; - C1EA6EB51680FE1500A21259 /* Validation.fallback.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Validation.fallback.js; sourceTree = ""; }; - C1EA6EB61680FE1500A21259 /* Validation.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Validation.js; sourceTree = ""; }; - C1EA6EB71680FE1500A21259 /* WebSocket.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = WebSocket.js; sourceTree = ""; }; - C1EA6EB81680FE1500A21259 /* WebSocketServer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = WebSocketServer.js; sourceTree = ""; }; - C1EA6EB91680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA6EBC1680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6EBD1680FE1500A21259 /* .travis.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .travis.yml; sourceTree = ""; }; - C1EA6EBE1680FE1500A21259 /* History.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = History.md; sourceTree = ""; }; - C1EA6EBF1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA6EC11680FE1500A21259 /* commander.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = commander.js; sourceTree = ""; }; - C1EA6EC21680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA6EC31680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6EC41680FE1500A21259 /* Readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Readme.md; sourceTree = ""; }; - C1EA6EC61680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6EC81680FE1500A21259 /* options.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = options.js; sourceTree = ""; }; - C1EA6EC91680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA6ECA1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6ECB1680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6ECE1680FE1500A21259 /* test.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.conf; sourceTree = ""; }; - C1EA6ECF1680FE1500A21259 /* options.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = options.test.js; sourceTree = ""; }; - C1EA6ED11680FE1500A21259 /* .npmignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .npmignore; sourceTree = ""; }; - C1EA6ED21680FE1500A21259 /* example.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = example.js; sourceTree = ""; }; - C1EA6ED31680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6ED41680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6ED51680FE1500A21259 /* tinycolor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tinycolor.js; sourceTree = ""; }; - C1EA6ED61680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA6ED71680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA6ED91680FE1500A21259 /* bufferutil.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bufferutil.cc; sourceTree = ""; }; - C1EA6EDA1680FE1500A21259 /* validation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = validation.cc; sourceTree = ""; }; - C1EA6EDC1680FE1500A21259 /* autobahn-server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "autobahn-server.js"; sourceTree = ""; }; - C1EA6EDD1680FE1500A21259 /* autobahn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = autobahn.js; sourceTree = ""; }; - C1EA6EDE1680FE1500A21259 /* BufferPool.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = BufferPool.test.js; sourceTree = ""; }; - C1EA6EE01680FE1500A21259 /* certificate.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = certificate.pem; sourceTree = ""; }; - C1EA6EE11680FE1500A21259 /* key.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = key.pem; sourceTree = ""; }; - C1EA6EE21680FE1500A21259 /* request.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = request.pem; sourceTree = ""; }; - C1EA6EE31680FE1500A21259 /* textfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = textfile; sourceTree = ""; }; - C1EA6EE41680FE1500A21259 /* hybi-common.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "hybi-common.js"; sourceTree = ""; }; - C1EA6EE51680FE1500A21259 /* Receiver.hixie.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Receiver.hixie.test.js; sourceTree = ""; }; - C1EA6EE61680FE1500A21259 /* Receiver.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Receiver.test.js; sourceTree = ""; }; - C1EA6EE71680FE1500A21259 /* Sender.hixie.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Sender.hixie.test.js; sourceTree = ""; }; - C1EA6EE81680FE1500A21259 /* Sender.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Sender.test.js; sourceTree = ""; }; - C1EA6EE91680FE1500A21259 /* testserver.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = testserver.js; sourceTree = ""; }; - C1EA6EEA1680FE1500A21259 /* Validation.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Validation.test.js; sourceTree = ""; }; - C1EA6EEB1680FE1500A21259 /* WebSocket.integration.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = WebSocket.integration.js; sourceTree = ""; }; - C1EA6EEC1680FE1500A21259 /* WebSocket.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = WebSocket.test.js; sourceTree = ""; }; - C1EA6EED1680FE1500A21259 /* WebSocketServer.test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = WebSocketServer.test.js; sourceTree = ""; }; - C1EA6EEE1680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = package.json; path = ../../package.json; sourceTree = ""; }; - C1EA6EEF1680FE1500A21259 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README; path = ../../README; sourceTree = ""; }; - C1EA6EF01680FE1500A21259 /* ripple-example.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "ripple-example.txt"; path = "../../ripple-example.txt"; sourceTree = ""; }; - C1EA6EF11680FE1500A21259 /* ripple2010.sln */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = ripple2010.sln; path = ../../ripple2010.sln; sourceTree = ""; }; - C1EA6EF21680FE1500A21259 /* ripple2010.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = ripple2010.vcxproj; path = ../../ripple2010.vcxproj; sourceTree = ""; }; - C1EA6EF31680FE1500A21259 /* ripple2010.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = ripple2010.vcxproj.filters; path = ../../ripple2010.vcxproj.filters; sourceTree = ""; }; - C1EA6EF41680FE1500A21259 /* rippled-example.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "rippled-example.cfg"; path = "../../rippled-example.cfg"; sourceTree = ""; }; - C1EA6EF51680FE1500A21259 /* rippled.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = rippled.cfg; path = ../../rippled.cfg; sourceTree = ""; }; - C1EA6EF61680FE1500A21259 /* SConstruct */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = SConstruct; path = ../../SConstruct; sourceTree = ""; }; - C1EA6EF91680FE1500A21259 /* protoc.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = protoc.py; sourceTree = ""; }; - C1EA6EFA1680FE1500A21259 /* protoc.pyc */ = {isa = PBXFileReference; lastKnownFileType = file; path = protoc.pyc; sourceTree = ""; }; - C1EA6EFE1680FE1500A21259 /* database.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = database.cpp; sourceTree = ""; }; - C1EA6EFF1680FE1500A21259 /* database.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = database.h; sourceTree = ""; }; - C1EA6F011680FE1500A21259 /* mysqldatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mysqldatabase.cpp; sourceTree = ""; }; - C1EA6F021680FE1500A21259 /* mysqldatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mysqldatabase.h; sourceTree = ""; }; - C1EA6F031680FE1500A21259 /* sqlite3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sqlite3.c; sourceTree = ""; }; - C1EA6F041680FE1500A21259 /* sqlite3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sqlite3.h; sourceTree = ""; }; - C1EA6F051680FE1500A21259 /* sqlite3ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sqlite3ext.h; sourceTree = ""; }; - C1EA6F061680FE1500A21259 /* SqliteDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SqliteDatabase.cpp; sourceTree = ""; }; - C1EA6F071680FE1500A21259 /* SqliteDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SqliteDatabase.h; sourceTree = ""; }; - C1EA6F091680FE1500A21259 /* dbutility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dbutility.h; sourceTree = ""; }; - C1EA6F0A1680FE1500A21259 /* windatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = windatabase.cpp; sourceTree = ""; }; - C1EA6F0B1680FE1500A21259 /* windatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = windatabase.h; sourceTree = ""; }; - C1EA6F0D1680FE1500A21259 /* autolink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = autolink.h; sourceTree = ""; }; - C1EA6F0E1680FE1500A21259 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; - C1EA6F0F1680FE1500A21259 /* features.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = features.h; sourceTree = ""; }; - C1EA6F101680FE1500A21259 /* forwards.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = forwards.h; sourceTree = ""; }; - C1EA6F111680FE1500A21259 /* json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json.h; sourceTree = ""; }; - C1EA6F121680FE1500A21259 /* json_batchallocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json_batchallocator.h; sourceTree = ""; }; - C1EA6F131680FE1500A21259 /* json_internalarray.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json_internalarray.inl; sourceTree = ""; }; - C1EA6F141680FE1500A21259 /* json_internalmap.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json_internalmap.inl; sourceTree = ""; }; - C1EA6F151680FE1500A21259 /* json_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_reader.cpp; sourceTree = ""; }; - C1EA6F161680FE1500A21259 /* json_value.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_value.cpp; sourceTree = ""; }; - C1EA6F171680FE1500A21259 /* json_valueiterator.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json_valueiterator.inl; sourceTree = ""; }; - C1EA6F181680FE1500A21259 /* json_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_writer.cpp; sourceTree = ""; }; - C1EA6F191680FE1500A21259 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - C1EA6F1A1680FE1500A21259 /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reader.h; sourceTree = ""; }; - C1EA6F1B1680FE1500A21259 /* value.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value.h; sourceTree = ""; }; - C1EA6F1C1680FE1500A21259 /* version */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = version; sourceTree = ""; }; - C1EA6F1D1680FE1500A21259 /* writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = writer.h; sourceTree = ""; }; - C1EA6F1F1680FE1500A21259 /* AccountItems.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccountItems.cpp; sourceTree = ""; }; - C1EA6F201680FE1500A21259 /* AccountItems.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountItems.h; sourceTree = ""; }; - C1EA6F211680FE1500A21259 /* AccountSetTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccountSetTransactor.cpp; sourceTree = ""; }; - C1EA6F221680FE1500A21259 /* AccountSetTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountSetTransactor.h; sourceTree = ""; }; - C1EA6F231680FE1500A21259 /* AccountState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AccountState.cpp; sourceTree = ""; }; - C1EA6F241680FE1500A21259 /* AccountState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccountState.h; sourceTree = ""; }; - C1EA6F251680FE1500A21259 /* Amount.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Amount.cpp; sourceTree = ""; }; - C1EA6F261680FE1500A21259 /* Application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Application.cpp; sourceTree = ""; }; - C1EA6F271680FE1500A21259 /* Application.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Application.h; sourceTree = ""; }; - C1EA6F281680FE1500A21259 /* base58.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base58.h; sourceTree = ""; }; - C1EA6F291680FE1500A21259 /* bignum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bignum.h; sourceTree = ""; }; - C1EA6F2A1680FE1500A21259 /* BitcoinUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BitcoinUtil.cpp; sourceTree = ""; }; - C1EA6F2B1680FE1500A21259 /* BitcoinUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BitcoinUtil.h; sourceTree = ""; }; - C1EA6F2C1680FE1500A21259 /* CallRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CallRPC.cpp; sourceTree = ""; }; - C1EA6F2D1680FE1500A21259 /* CallRPC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallRPC.h; sourceTree = ""; }; - C1EA6F2E1680FE1500A21259 /* CanonicalTXSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CanonicalTXSet.cpp; sourceTree = ""; }; - C1EA6F2F1680FE1500A21259 /* CanonicalTXSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CanonicalTXSet.h; sourceTree = ""; }; - C1EA6F301680FE1500A21259 /* Config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Config.cpp; sourceTree = ""; }; - C1EA6F311680FE1500A21259 /* Config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = ""; }; - C1EA6F321680FE1500A21259 /* ConnectionPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConnectionPool.cpp; sourceTree = ""; }; - C1EA6F331680FE1500A21259 /* ConnectionPool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConnectionPool.h; sourceTree = ""; }; - C1EA6F341680FE1500A21259 /* Contract.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Contract.cpp; sourceTree = ""; }; - C1EA6F351680FE1500A21259 /* Contract.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Contract.h; sourceTree = ""; }; - C1EA6F361680FE1500A21259 /* DBInit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DBInit.cpp; sourceTree = ""; }; - C1EA6F371680FE1500A21259 /* DeterministicKeys.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeterministicKeys.cpp; sourceTree = ""; }; - C1EA6F381680FE1500A21259 /* ECIES.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ECIES.cpp; sourceTree = ""; }; - C1EA6F391680FE1500A21259 /* FeatureTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FeatureTable.cpp; sourceTree = ""; }; - C1EA6F3A1680FE1500A21259 /* FeatureTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FeatureTable.h; sourceTree = ""; }; - C1EA6F3B1680FE1500A21259 /* FieldNames.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FieldNames.cpp; sourceTree = ""; }; - C1EA6F3C1680FE1500A21259 /* FieldNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FieldNames.h; sourceTree = ""; }; - C1EA6F3D1680FE1500A21259 /* HashedObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HashedObject.cpp; sourceTree = ""; }; - C1EA6F3E1680FE1500A21259 /* HashedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashedObject.h; sourceTree = ""; }; - C1EA6F3F1680FE1500A21259 /* HashPrefixes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashPrefixes.h; sourceTree = ""; }; - C1EA6F401680FE1500A21259 /* HTTPRequest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPRequest.cpp; sourceTree = ""; }; - C1EA6F411680FE1500A21259 /* HTTPRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPRequest.h; sourceTree = ""; }; - C1EA6F421680FE1500A21259 /* HttpsClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HttpsClient.cpp; sourceTree = ""; }; - C1EA6F431680FE1500A21259 /* HttpsClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HttpsClient.h; sourceTree = ""; }; - C1EA6F441680FE1500A21259 /* InstanceCounter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InstanceCounter.cpp; sourceTree = ""; }; - C1EA6F451680FE1500A21259 /* InstanceCounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InstanceCounter.h; sourceTree = ""; }; - C1EA6F461680FE1500A21259 /* Interpreter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Interpreter.cpp; sourceTree = ""; }; - C1EA6F471680FE1500A21259 /* Interpreter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Interpreter.h; sourceTree = ""; }; - C1EA6F481680FE1500A21259 /* JobQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JobQueue.cpp; sourceTree = ""; }; - C1EA6F491680FE1500A21259 /* JobQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JobQueue.h; sourceTree = ""; }; - C1EA6F4A1680FE1500A21259 /* key.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = key.h; sourceTree = ""; }; - C1EA6F4B1680FE1500A21259 /* Ledger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Ledger.cpp; sourceTree = ""; }; - C1EA6F4C1680FE1500A21259 /* Ledger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ledger.h; sourceTree = ""; }; - C1EA6F4D1680FE1500A21259 /* LedgerAcquire.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerAcquire.cpp; sourceTree = ""; }; - C1EA6F4E1680FE1500A21259 /* LedgerAcquire.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerAcquire.h; sourceTree = ""; }; - C1EA6F4F1680FE1500A21259 /* LedgerConsensus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerConsensus.cpp; sourceTree = ""; }; - C1EA6F501680FE1500A21259 /* LedgerConsensus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerConsensus.h; sourceTree = ""; }; - C1EA6F511680FE1500A21259 /* LedgerEntrySet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerEntrySet.cpp; sourceTree = ""; }; - C1EA6F521680FE1500A21259 /* LedgerEntrySet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerEntrySet.h; sourceTree = ""; }; - C1EA6F531680FE1500A21259 /* LedgerFormats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerFormats.cpp; sourceTree = ""; }; - C1EA6F541680FE1500A21259 /* LedgerFormats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerFormats.h; sourceTree = ""; }; - C1EA6F551680FE1500A21259 /* LedgerHistory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerHistory.cpp; sourceTree = ""; }; - C1EA6F561680FE1500A21259 /* LedgerHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerHistory.h; sourceTree = ""; }; - C1EA6F571680FE1500A21259 /* LedgerMaster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerMaster.cpp; sourceTree = ""; }; - C1EA6F581680FE1500A21259 /* LedgerMaster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerMaster.h; sourceTree = ""; }; - C1EA6F591680FE1500A21259 /* LedgerProposal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerProposal.cpp; sourceTree = ""; }; - C1EA6F5A1680FE1500A21259 /* LedgerProposal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerProposal.h; sourceTree = ""; }; - C1EA6F5B1680FE1500A21259 /* LedgerTiming.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LedgerTiming.cpp; sourceTree = ""; }; - C1EA6F5C1680FE1500A21259 /* LedgerTiming.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LedgerTiming.h; sourceTree = ""; }; - C1EA6F5D1680FE1500A21259 /* LoadManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoadManager.cpp; sourceTree = ""; }; - C1EA6F5E1680FE1500A21259 /* LoadManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadManager.h; sourceTree = ""; }; - C1EA6F5F1680FE1500A21259 /* LoadMonitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LoadMonitor.cpp; sourceTree = ""; }; - C1EA6F601680FE1500A21259 /* LoadMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoadMonitor.h; sourceTree = ""; }; - C1EA6F611680FE1500A21259 /* Log.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Log.cpp; sourceTree = ""; }; - C1EA6F621680FE1500A21259 /* Log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Log.h; sourceTree = ""; }; - C1EA6F631680FE1500A21259 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; - C1EA6F641680FE1500A21259 /* NetworkOPs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkOPs.cpp; sourceTree = ""; }; - C1EA6F651680FE1500A21259 /* NetworkOPs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkOPs.h; sourceTree = ""; }; - C1EA6F661680FE1500A21259 /* NetworkStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkStatus.h; sourceTree = ""; }; - C1EA6F671680FE1500A21259 /* NicknameState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NicknameState.cpp; sourceTree = ""; }; - C1EA6F681680FE1500A21259 /* NicknameState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NicknameState.h; sourceTree = ""; }; - C1EA6F691680FE1500A21259 /* Offer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Offer.cpp; sourceTree = ""; }; - C1EA6F6A1680FE1500A21259 /* Offer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Offer.h; sourceTree = ""; }; - C1EA6F6B1680FE1500A21259 /* OfferCancelTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OfferCancelTransactor.cpp; sourceTree = ""; }; - C1EA6F6C1680FE1500A21259 /* OfferCancelTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OfferCancelTransactor.h; sourceTree = ""; }; - C1EA6F6D1680FE1500A21259 /* OfferCreateTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OfferCreateTransactor.cpp; sourceTree = ""; }; - C1EA6F6E1680FE1500A21259 /* OfferCreateTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OfferCreateTransactor.h; sourceTree = ""; }; - C1EA6F6F1680FE1500A21259 /* Operation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Operation.cpp; sourceTree = ""; }; - C1EA6F701680FE1500A21259 /* Operation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Operation.h; sourceTree = ""; }; - C1EA6F711680FE1500A21259 /* OrderBook.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OrderBook.cpp; sourceTree = ""; }; - C1EA6F721680FE1500A21259 /* OrderBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OrderBook.h; sourceTree = ""; }; - C1EA6F731680FE1500A21259 /* OrderBookDB.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OrderBookDB.cpp; sourceTree = ""; }; - C1EA6F741680FE1500A21259 /* OrderBookDB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OrderBookDB.h; sourceTree = ""; }; - C1EA6F751680FE1500A21259 /* PackedMessage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PackedMessage.cpp; sourceTree = ""; }; - C1EA6F761680FE1500A21259 /* PackedMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackedMessage.h; sourceTree = ""; }; - C1EA6F771680FE1500A21259 /* ParameterTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParameterTable.cpp; sourceTree = ""; }; - C1EA6F781680FE1500A21259 /* ParameterTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParameterTable.h; sourceTree = ""; }; - C1EA6F791680FE1500A21259 /* ParseSection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParseSection.cpp; sourceTree = ""; }; - C1EA6F7A1680FE1500A21259 /* ParseSection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParseSection.h; sourceTree = ""; }; - C1EA6F7B1680FE1500A21259 /* Pathfinder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Pathfinder.cpp; sourceTree = ""; }; - C1EA6F7C1680FE1500A21259 /* Pathfinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pathfinder.h; sourceTree = ""; }; - C1EA6F7D1680FE1500A21259 /* PaymentTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PaymentTransactor.cpp; sourceTree = ""; }; - C1EA6F7E1680FE1500A21259 /* PaymentTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaymentTransactor.h; sourceTree = ""; }; - C1EA6F7F1680FE1500A21259 /* Peer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Peer.cpp; sourceTree = ""; }; - C1EA6F801680FE1500A21259 /* Peer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Peer.h; sourceTree = ""; }; - C1EA6F811680FE1500A21259 /* PeerDoor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PeerDoor.cpp; sourceTree = ""; }; - C1EA6F821680FE1500A21259 /* PeerDoor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PeerDoor.h; sourceTree = ""; }; - C1EA6F831680FE1500A21259 /* PlatRand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlatRand.cpp; sourceTree = ""; }; - C1EA6F841680FE1500A21259 /* ProofOfWork.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProofOfWork.cpp; sourceTree = ""; }; - C1EA6F851680FE1500A21259 /* ProofOfWork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProofOfWork.h; sourceTree = ""; }; - C1EA6F861680FE1500A21259 /* PubKeyCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PubKeyCache.cpp; sourceTree = ""; }; - C1EA6F871680FE1500A21259 /* PubKeyCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PubKeyCache.h; sourceTree = ""; }; - C1EA6F881680FE1500A21259 /* RangeSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RangeSet.cpp; sourceTree = ""; }; - C1EA6F891680FE1500A21259 /* RangeSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RangeSet.h; sourceTree = ""; }; - C1EA6F8A1680FE1500A21259 /* RegularKeySetTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegularKeySetTransactor.cpp; sourceTree = ""; }; - C1EA6F8B1680FE1500A21259 /* RegularKeySetTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegularKeySetTransactor.h; sourceTree = ""; }; - C1EA6F8C1680FE1500A21259 /* rfc1751.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rfc1751.cpp; sourceTree = ""; }; - C1EA6F8D1680FE1500A21259 /* rfc1751.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rfc1751.h; sourceTree = ""; }; - C1EA6F8E1680FE1500A21259 /* ripple.proto */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ripple.proto; sourceTree = ""; }; - C1EA6F8F1680FE1500A21259 /* RippleAddress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RippleAddress.cpp; sourceTree = ""; }; - C1EA6F901680FE1500A21259 /* RippleAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RippleAddress.h; sourceTree = ""; }; - C1EA6F911680FE1500A21259 /* RippleCalc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RippleCalc.cpp; sourceTree = ""; }; - C1EA6F921680FE1500A21259 /* RippleCalc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RippleCalc.h; sourceTree = ""; }; - C1EA6F931680FE1500A21259 /* RippleState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RippleState.cpp; sourceTree = ""; }; - C1EA6F941680FE1500A21259 /* RippleState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RippleState.h; sourceTree = ""; }; - C1EA6F951680FE1500A21259 /* rpc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rpc.cpp; sourceTree = ""; }; - C1EA6F961680FE1500A21259 /* RPC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RPC.h; sourceTree = ""; }; - C1EA6F971680FE1500A21259 /* RPCDoor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RPCDoor.cpp; sourceTree = ""; }; - C1EA6F981680FE1500A21259 /* RPCDoor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RPCDoor.h; sourceTree = ""; }; - C1EA6F991680FE1500A21259 /* RPCErr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RPCErr.cpp; sourceTree = ""; }; - C1EA6F9A1680FE1500A21259 /* RPCErr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RPCErr.h; sourceTree = ""; }; - C1EA6F9B1680FE1500A21259 /* RPCHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RPCHandler.cpp; sourceTree = ""; }; - C1EA6F9C1680FE1500A21259 /* RPCHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RPCHandler.h; sourceTree = ""; }; - C1EA6F9D1680FE1500A21259 /* RPCServer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RPCServer.cpp; sourceTree = ""; }; - C1EA6F9E1680FE1500A21259 /* RPCServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RPCServer.h; sourceTree = ""; }; - C1EA6F9F1680FE1500A21259 /* ScopedLock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScopedLock.h; sourceTree = ""; }; - C1EA6FA01680FE1500A21259 /* ScriptData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptData.cpp; sourceTree = ""; }; - C1EA6FA11680FE1500A21259 /* ScriptData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptData.h; sourceTree = ""; }; - C1EA6FA21680FE1500A21259 /* SecureAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecureAllocator.h; sourceTree = ""; }; - C1EA6FA31680FE1500A21259 /* SerializedLedger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedLedger.cpp; sourceTree = ""; }; - C1EA6FA41680FE1500A21259 /* SerializedLedger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedLedger.h; sourceTree = ""; }; - C1EA6FA51680FE1500A21259 /* SerializedObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedObject.cpp; sourceTree = ""; }; - C1EA6FA61680FE1500A21259 /* SerializedObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedObject.h; sourceTree = ""; }; - C1EA6FA71680FE1500A21259 /* SerializedTransaction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedTransaction.cpp; sourceTree = ""; }; - C1EA6FA81680FE1500A21259 /* SerializedTransaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedTransaction.h; sourceTree = ""; }; - C1EA6FA91680FE1500A21259 /* SerializedTypes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedTypes.cpp; sourceTree = ""; }; - C1EA6FAA1680FE1500A21259 /* SerializedTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedTypes.h; sourceTree = ""; }; - C1EA6FAB1680FE1500A21259 /* SerializedValidation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SerializedValidation.cpp; sourceTree = ""; }; - C1EA6FAC1680FE1500A21259 /* SerializedValidation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializedValidation.h; sourceTree = ""; }; - C1EA6FAD1680FE1500A21259 /* SerializeProto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SerializeProto.h; sourceTree = ""; }; - C1EA6FAE1680FE1500A21259 /* Serializer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Serializer.cpp; sourceTree = ""; }; - C1EA6FAF1680FE1500A21259 /* Serializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Serializer.h; sourceTree = ""; }; - C1EA6FB01680FE1500A21259 /* SHAMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SHAMap.cpp; sourceTree = ""; }; - C1EA6FB11680FE1500A21259 /* SHAMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SHAMap.h; sourceTree = ""; }; - C1EA6FB21680FE1500A21259 /* SHAMapDiff.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SHAMapDiff.cpp; sourceTree = ""; }; - C1EA6FB31680FE1500A21259 /* SHAMapNodes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SHAMapNodes.cpp; sourceTree = ""; }; - C1EA6FB41680FE1500A21259 /* SHAMapSync.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SHAMapSync.cpp; sourceTree = ""; }; - C1EA6FB51680FE1500A21259 /* SHAMapSync.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SHAMapSync.h; sourceTree = ""; }; - C1EA6FB61680FE1500A21259 /* SNTPClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SNTPClient.cpp; sourceTree = ""; }; - C1EA6FB71680FE1500A21259 /* SNTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SNTPClient.h; sourceTree = ""; }; - C1EA6FB81680FE1500A21259 /* Suppression.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Suppression.cpp; sourceTree = ""; }; - C1EA6FB91680FE1500A21259 /* Suppression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Suppression.h; sourceTree = ""; }; - C1EA6FBA1680FE1500A21259 /* TaggedCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TaggedCache.h; sourceTree = ""; }; - C1EA6FBB1680FE1500A21259 /* Transaction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Transaction.cpp; sourceTree = ""; }; - C1EA6FBC1680FE1500A21259 /* Transaction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Transaction.h; sourceTree = ""; }; - C1EA6FBD1680FE1500A21259 /* TransactionEngine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionEngine.cpp; sourceTree = ""; }; - C1EA6FBE1680FE1500A21259 /* TransactionEngine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionEngine.h; sourceTree = ""; }; - C1EA6FBF1680FE1500A21259 /* TransactionErr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionErr.cpp; sourceTree = ""; }; - C1EA6FC01680FE1500A21259 /* TransactionErr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionErr.h; sourceTree = ""; }; - C1EA6FC11680FE1500A21259 /* TransactionFormats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionFormats.cpp; sourceTree = ""; }; - C1EA6FC21680FE1500A21259 /* TransactionFormats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionFormats.h; sourceTree = ""; }; - C1EA6FC31680FE1500A21259 /* TransactionMaster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionMaster.cpp; sourceTree = ""; }; - C1EA6FC41680FE1500A21259 /* TransactionMaster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionMaster.h; sourceTree = ""; }; - C1EA6FC51680FE1500A21259 /* TransactionMeta.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionMeta.cpp; sourceTree = ""; }; - C1EA6FC61680FE1500A21259 /* TransactionMeta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionMeta.h; sourceTree = ""; }; - C1EA6FC71680FE1500A21259 /* Transactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Transactor.cpp; sourceTree = ""; }; - C1EA6FC81680FE1500A21259 /* Transactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Transactor.h; sourceTree = ""; }; - C1EA6FC91680FE1500A21259 /* TrustSetTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TrustSetTransactor.cpp; sourceTree = ""; }; - C1EA6FCA1680FE1500A21259 /* TrustSetTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TrustSetTransactor.h; sourceTree = ""; }; - C1EA6FCB1680FE1500A21259 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; - C1EA6FCC1680FE1500A21259 /* uint256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uint256.h; sourceTree = ""; }; - C1EA6FCD1680FE1500A21259 /* UniqueNodeList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UniqueNodeList.cpp; sourceTree = ""; }; - C1EA6FCE1680FE1500A21259 /* UniqueNodeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniqueNodeList.h; sourceTree = ""; }; - C1EA6FCF1680FE1500A21259 /* utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = utils.cpp; sourceTree = ""; }; - C1EA6FD01680FE1500A21259 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = ""; }; - C1EA6FD11680FE1500A21259 /* ValidationCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ValidationCollection.cpp; sourceTree = ""; }; - C1EA6FD21680FE1500A21259 /* ValidationCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValidationCollection.h; sourceTree = ""; }; - C1EA6FD31680FE1500A21259 /* Version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Version.h; sourceTree = ""; }; - C1EA6FD41680FE1500A21259 /* Wallet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Wallet.cpp; sourceTree = ""; }; - C1EA6FD51680FE1500A21259 /* Wallet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Wallet.h; sourceTree = ""; }; - C1EA6FD61680FE1500A21259 /* WalletAddTransactor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WalletAddTransactor.cpp; sourceTree = ""; }; - C1EA6FD71680FE1500A21259 /* WalletAddTransactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WalletAddTransactor.h; sourceTree = ""; }; - C1EA6FD81680FE1500A21259 /* WSConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WSConnection.h; sourceTree = ""; }; - C1EA6FD91680FE1500A21259 /* WSDoor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WSDoor.cpp; sourceTree = ""; }; - C1EA6FDA1680FE1500A21259 /* WSDoor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WSDoor.h; sourceTree = ""; }; - C1EA6FDB1680FE1500A21259 /* WSHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WSHandler.h; sourceTree = ""; }; - C1EA6FDD1680FE1500A21259 /* dependencies.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dependencies.txt; sourceTree = ""; }; - C1EA6FDF1680FE1500A21259 /* uri.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = uri.txt; sourceTree = ""; }; - C1EA6FE21680FE1500A21259 /* broadcast_admin.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = broadcast_admin.html; sourceTree = ""; }; - C1EA6FE31680FE1500A21259 /* broadcast_admin_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = broadcast_admin_handler.hpp; sourceTree = ""; }; - C1EA6FE41680FE1500A21259 /* broadcast_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = broadcast_handler.hpp; sourceTree = ""; }; - C1EA6FE51680FE1500A21259 /* broadcast_server_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = broadcast_server_handler.hpp; sourceTree = ""; }; - C1EA6FE61680FE1500A21259 /* broadcast_server_tls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = broadcast_server_tls.cpp; sourceTree = ""; }; - C1EA6FE71680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA6FEA1680FE1500A21259 /* API.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = API.txt; sourceTree = ""; }; - C1EA6FEC1680FE1500A21259 /* ajax.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ajax.html; sourceTree = ""; }; - C1EA6FED1680FE1500A21259 /* annotating.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = annotating.html; sourceTree = ""; }; - C1EA6FEE1680FE1500A21259 /* arrow-down.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "arrow-down.gif"; sourceTree = ""; }; - C1EA6FEF1680FE1500A21259 /* arrow-left.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "arrow-left.gif"; sourceTree = ""; }; - C1EA6FF01680FE1500A21259 /* arrow-right.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "arrow-right.gif"; sourceTree = ""; }; - C1EA6FF11680FE1500A21259 /* arrow-up.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "arrow-up.gif"; sourceTree = ""; }; - C1EA6FF21680FE1500A21259 /* basic.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = basic.html; sourceTree = ""; }; - C1EA6FF31680FE1500A21259 /* data-eu-gdp-growth-1.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth-1.json"; sourceTree = ""; }; - C1EA6FF41680FE1500A21259 /* data-eu-gdp-growth-2.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth-2.json"; sourceTree = ""; }; - C1EA6FF51680FE1500A21259 /* data-eu-gdp-growth-3.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth-3.json"; sourceTree = ""; }; - C1EA6FF61680FE1500A21259 /* data-eu-gdp-growth-4.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth-4.json"; sourceTree = ""; }; - C1EA6FF71680FE1500A21259 /* data-eu-gdp-growth-5.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth-5.json"; sourceTree = ""; }; - C1EA6FF81680FE1500A21259 /* data-eu-gdp-growth.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-eu-gdp-growth.json"; sourceTree = ""; }; - C1EA6FF91680FE1500A21259 /* data-japan-gdp-growth.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-japan-gdp-growth.json"; sourceTree = ""; }; - C1EA6FFA1680FE1500A21259 /* data-usa-gdp-growth.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "data-usa-gdp-growth.json"; sourceTree = ""; }; - C1EA6FFB1680FE1500A21259 /* graph-types.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "graph-types.html"; sourceTree = ""; }; - C1EA6FFC1680FE1500A21259 /* hs-2004-27-a-large_web.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "hs-2004-27-a-large_web.jpg"; sourceTree = ""; }; - C1EA6FFD1680FE1500A21259 /* image.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = image.html; sourceTree = ""; }; - C1EA6FFE1680FE1500A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA6FFF1680FE1500A21259 /* interacting-axes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "interacting-axes.html"; sourceTree = ""; }; - C1EA70001680FE1500A21259 /* interacting.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = interacting.html; sourceTree = ""; }; - C1EA70011680FE1500A21259 /* layout.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = layout.css; sourceTree = ""; }; - C1EA70021680FE1500A21259 /* multiple-axes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "multiple-axes.html"; sourceTree = ""; }; - C1EA70031680FE1500A21259 /* navigate.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = navigate.html; sourceTree = ""; }; - C1EA70041680FE1500A21259 /* percentiles.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = percentiles.html; sourceTree = ""; }; - C1EA70051680FE1500A21259 /* pie.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = pie.html; sourceTree = ""; }; - C1EA70061680FE1500A21259 /* realtime.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = realtime.html; sourceTree = ""; }; - C1EA70071680FE1500A21259 /* resize.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = resize.html; sourceTree = ""; }; - C1EA70081680FE1500A21259 /* selection.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = selection.html; sourceTree = ""; }; - C1EA70091680FE1500A21259 /* setting-options.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "setting-options.html"; sourceTree = ""; }; - C1EA700A1680FE1500A21259 /* stacking.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = stacking.html; sourceTree = ""; }; - C1EA700B1680FE1500A21259 /* symbols.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = symbols.html; sourceTree = ""; }; - C1EA700C1680FE1500A21259 /* thresholding.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = thresholding.html; sourceTree = ""; }; - C1EA700D1680FE1500A21259 /* time.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = time.html; sourceTree = ""; }; - C1EA700E1680FE1500A21259 /* tracking.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = tracking.html; sourceTree = ""; }; - C1EA700F1680FE1500A21259 /* turning-series.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "turning-series.html"; sourceTree = ""; }; - C1EA70101680FE1500A21259 /* visitors.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = visitors.html; sourceTree = ""; }; - C1EA70111680FE1500A21259 /* zooming.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = zooming.html; sourceTree = ""; }; - C1EA70121680FE1500A21259 /* excanvas.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = excanvas.js; sourceTree = ""; }; - C1EA70131680FE1500A21259 /* excanvas.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = excanvas.min.js; sourceTree = ""; }; - C1EA70141680FE1500A21259 /* FAQ.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FAQ.txt; sourceTree = ""; }; - C1EA70151680FE1500A21259 /* jquery.colorhelpers.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.colorhelpers.js; sourceTree = ""; }; - C1EA70161680FE1500A21259 /* jquery.colorhelpers.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.colorhelpers.min.js; sourceTree = ""; }; - C1EA70171680FE1500A21259 /* jquery.flot.crosshair.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.crosshair.js; sourceTree = ""; }; - C1EA70181680FE1500A21259 /* jquery.flot.crosshair.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.crosshair.min.js; sourceTree = ""; }; - C1EA70191680FE1500A21259 /* jquery.flot.fillbetween.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.fillbetween.js; sourceTree = ""; }; - C1EA701A1680FE1500A21259 /* jquery.flot.fillbetween.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.fillbetween.min.js; sourceTree = ""; }; - C1EA701B1680FE1500A21259 /* jquery.flot.image.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.image.js; sourceTree = ""; }; - C1EA701C1680FE1500A21259 /* jquery.flot.image.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.image.min.js; sourceTree = ""; }; - C1EA701D1680FE1500A21259 /* jquery.flot.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.js; sourceTree = ""; }; - C1EA701E1680FE1500A21259 /* jquery.flot.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.min.js; sourceTree = ""; }; - C1EA701F1680FE1500A21259 /* jquery.flot.navigate.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.navigate.js; sourceTree = ""; }; - C1EA70201680FE1500A21259 /* jquery.flot.navigate.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.navigate.min.js; sourceTree = ""; }; - C1EA70211680FE1500A21259 /* jquery.flot.pie.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.pie.js; sourceTree = ""; }; - C1EA70221680FE1500A21259 /* jquery.flot.pie.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.pie.min.js; sourceTree = ""; }; - C1EA70231680FE1500A21259 /* jquery.flot.resize.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.resize.js; sourceTree = ""; }; - C1EA70241680FE1500A21259 /* jquery.flot.resize.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.resize.min.js; sourceTree = ""; }; - C1EA70251680FE1500A21259 /* jquery.flot.selection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.selection.js; sourceTree = ""; }; - C1EA70261680FE1500A21259 /* jquery.flot.selection.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.selection.min.js; sourceTree = ""; }; - C1EA70271680FE1500A21259 /* jquery.flot.stack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.stack.js; sourceTree = ""; }; - C1EA70281680FE1500A21259 /* jquery.flot.stack.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.stack.min.js; sourceTree = ""; }; - C1EA70291680FE1500A21259 /* jquery.flot.symbol.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.symbol.js; sourceTree = ""; }; - C1EA702A1680FE1500A21259 /* jquery.flot.symbol.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.symbol.min.js; sourceTree = ""; }; - C1EA702B1680FE1500A21259 /* jquery.flot.threshold.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.threshold.js; sourceTree = ""; }; - C1EA702C1680FE1500A21259 /* jquery.flot.threshold.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.flot.threshold.min.js; sourceTree = ""; }; - C1EA702D1680FE1500A21259 /* jquery.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.js; sourceTree = ""; }; - C1EA702E1680FE1500A21259 /* jquery.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.min.js; sourceTree = ""; }; - C1EA702F1680FE1500A21259 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; - C1EA70301680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70311680FE1500A21259 /* NEWS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NEWS.txt; sourceTree = ""; }; - C1EA70321680FE1500A21259 /* PLUGINS.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PLUGINS.txt; sourceTree = ""; }; - C1EA70331680FE1500A21259 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - C1EA70341680FE1500A21259 /* md5.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = md5.js; sourceTree = ""; }; - C1EA70351680FE1500A21259 /* wscmd.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = wscmd.hpp; sourceTree = ""; }; - C1EA70371680FE1500A21259 /* chat_client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chat_client.cpp; sourceTree = ""; }; - C1EA70381680FE1500A21259 /* chat_client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = chat_client.html; sourceTree = ""; }; - C1EA70391680FE1500A21259 /* chat_client_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chat_client_handler.cpp; sourceTree = ""; }; - C1EA703A1680FE1500A21259 /* chat_client_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = chat_client_handler.hpp; sourceTree = ""; }; - C1EA703B1680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA703C1680FE1500A21259 /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; - C1EA703E1680FE1500A21259 /* jquery-1.6.3.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jquery-1.6.3.min.js"; sourceTree = ""; }; - C1EA70401680FE1500A21259 /* chat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chat.cpp; sourceTree = ""; }; - C1EA70411680FE1500A21259 /* chat.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = chat.hpp; sourceTree = ""; }; - C1EA70421680FE1500A21259 /* chat_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = chat_server.cpp; sourceTree = ""; }; - C1EA70431680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70441680FE1500A21259 /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; - C1EA70451680FE1500A21259 /* common.mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = common.mk; sourceTree = ""; }; - C1EA70471680FE1500A21259 /* concurrent_client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = concurrent_client.html; sourceTree = ""; }; - C1EA70481680FE1500A21259 /* concurrent_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = concurrent_server.cpp; sourceTree = ""; }; - C1EA70491680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA704A1680FE1500A21259 /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; - C1EA704C1680FE1500A21259 /* echo_client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = echo_client.cpp; sourceTree = ""; }; - C1EA704D1680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA704E1680FE1500A21259 /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; - C1EA70501680FE1500A21259 /* echo_client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = echo_client.html; sourceTree = ""; }; - C1EA70511680FE1500A21259 /* echo_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = echo_server.cpp; sourceTree = ""; }; - C1EA70521680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70531680FE1500A21259 /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; - C1EA70551680FE1500A21259 /* echo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = echo.cpp; sourceTree = ""; }; - C1EA70561680FE1500A21259 /* echo.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = echo.hpp; sourceTree = ""; }; - C1EA70571680FE1500A21259 /* echo_client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = echo_client.html; sourceTree = ""; }; - C1EA70581680FE1500A21259 /* echo_server_tls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = echo_server_tls.cpp; sourceTree = ""; }; - C1EA70591680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA705A1680FE1500A21259 /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; - C1EA705C1680FE1500A21259 /* fuzzing_client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fuzzing_client.cpp; sourceTree = ""; }; - C1EA705D1680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA705F1680FE1500A21259 /* echo_client.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = echo_client.html; sourceTree = ""; }; - C1EA70601680FE1500A21259 /* fuzzing_server_tls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fuzzing_server_tls.cpp; sourceTree = ""; }; - C1EA70611680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70621680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70641680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70651680FE1500A21259 /* stress_client.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stress_client.cpp; sourceTree = ""; }; - C1EA70671680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70681680FE1500A21259 /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; - C1EA70691680FE1500A21259 /* telemetry_server.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = telemetry_server.cpp; sourceTree = ""; }; - C1EA706B1680FE1500A21259 /* case.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = case.cpp; sourceTree = ""; }; - C1EA706C1680FE1500A21259 /* case.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = case.hpp; sourceTree = ""; }; - C1EA706D1680FE1500A21259 /* generic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = generic.cpp; sourceTree = ""; }; - C1EA706E1680FE1500A21259 /* generic.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = generic.hpp; sourceTree = ""; }; - C1EA706F1680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70701680FE1500A21259 /* message_test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = message_test.html; sourceTree = ""; }; - C1EA70711680FE1500A21259 /* request.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = request.cpp; sourceTree = ""; }; - C1EA70721680FE1500A21259 /* request.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = request.hpp; sourceTree = ""; }; - C1EA70731680FE1500A21259 /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; - C1EA70741680FE1500A21259 /* stress_aggregate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stress_aggregate.cpp; sourceTree = ""; }; - C1EA70751680FE1500A21259 /* stress_aggregate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stress_aggregate.hpp; sourceTree = ""; }; - C1EA70761680FE1500A21259 /* stress_handler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stress_handler.cpp; sourceTree = ""; }; - C1EA70771680FE1500A21259 /* stress_handler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = stress_handler.hpp; sourceTree = ""; }; - C1EA70781680FE1500A21259 /* stress_test.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = stress_test.html; sourceTree = ""; }; - C1EA707A1680FE1500A21259 /* backbone-localstorage.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "backbone-localstorage.js"; sourceTree = ""; }; - C1EA707B1680FE1500A21259 /* backbone.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = backbone.js; sourceTree = ""; }; - C1EA707C1680FE1500A21259 /* jquery.min.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jquery.min.js; sourceTree = ""; }; - C1EA707D1680FE1500A21259 /* underscore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = underscore.js; sourceTree = ""; }; - C1EA707E1680FE1500A21259 /* wscmd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wscmd.cpp; sourceTree = ""; }; - C1EA707F1680FE1500A21259 /* wscmd.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = wscmd.hpp; sourceTree = ""; }; - C1EA70801680FE1500A21259 /* wsperf.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wsperf.cfg; sourceTree = ""; }; - C1EA70811680FE1500A21259 /* wsperf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wsperf.cpp; sourceTree = ""; }; - C1EA70821680FE1500A21259 /* wsperf_commander.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = wsperf_commander.html; sourceTree = ""; }; - C1EA70831680FE1500A21259 /* license.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = license.txt; sourceTree = ""; }; - C1EA70841680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70851680FE1500A21259 /* readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.txt; sourceTree = ""; }; - C1EA70861680FE1500A21259 /* SConstruct */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConstruct; sourceTree = ""; }; - C1EA70891680FE1500A21259 /* base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = base64.cpp; sourceTree = ""; }; - C1EA708A1680FE1500A21259 /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = base64.h; sourceTree = ""; }; - C1EA708B1680FE1500A21259 /* common.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = common.hpp; sourceTree = ""; }; - C1EA708C1680FE1500A21259 /* connection.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = connection.hpp; sourceTree = ""; }; - C1EA708D1680FE1500A21259 /* endpoint.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = endpoint.hpp; sourceTree = ""; }; - C1EA708F1680FE1500A21259 /* constants.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = constants.hpp; sourceTree = ""; }; - C1EA70901680FE1500A21259 /* parser.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = parser.hpp; sourceTree = ""; }; - C1EA70921680FE1500A21259 /* logger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = logger.hpp; sourceTree = ""; }; - C1EA70941680FE1500A21259 /* md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = md5.c; sourceTree = ""; }; - C1EA70951680FE1500A21259 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; - C1EA70961680FE1500A21259 /* md5.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = md5.hpp; sourceTree = ""; }; - C1EA70981680FE1500A21259 /* control.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = control.hpp; sourceTree = ""; }; - C1EA70991680FE1500A21259 /* data.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data.cpp; sourceTree = ""; }; - C1EA709A1680FE1500A21259 /* data.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = data.hpp; sourceTree = ""; }; - C1EA709B1680FE1500A21259 /* network_utilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = network_utilities.cpp; sourceTree = ""; }; - C1EA709C1680FE1500A21259 /* network_utilities.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = network_utilities.hpp; sourceTree = ""; }; - C1EA709E1680FE1500A21259 /* hybi.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = hybi.hpp; sourceTree = ""; }; - C1EA709F1680FE1500A21259 /* hybi_header.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hybi_header.cpp; sourceTree = ""; }; - C1EA70A01680FE1500A21259 /* hybi_header.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = hybi_header.hpp; sourceTree = ""; }; - C1EA70A11680FE1500A21259 /* hybi_legacy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = hybi_legacy.hpp; sourceTree = ""; }; - C1EA70A21680FE1500A21259 /* hybi_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hybi_util.cpp; sourceTree = ""; }; - C1EA70A31680FE1500A21259 /* hybi_util.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = hybi_util.hpp; sourceTree = ""; }; - C1EA70A41680FE1500A21259 /* processor.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = processor.hpp; sourceTree = ""; }; - C1EA70A61680FE1500A21259 /* blank_rng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = blank_rng.cpp; sourceTree = ""; }; - C1EA70A71680FE1500A21259 /* blank_rng.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = blank_rng.hpp; sourceTree = ""; }; - C1EA70A81680FE1500A21259 /* boost_rng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = boost_rng.cpp; sourceTree = ""; }; - C1EA70A91680FE1500A21259 /* boost_rng.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = boost_rng.hpp; sourceTree = ""; }; - C1EA70AB1680FE1500A21259 /* client.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = client.hpp; sourceTree = ""; }; - C1EA70AC1680FE1500A21259 /* server.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = server.hpp; sourceTree = ""; }; - C1EA70AD1680FE1500A21259 /* SConscript */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SConscript; sourceTree = ""; }; - C1EA70AF1680FE1500A21259 /* license.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = license.txt; sourceTree = ""; }; - C1EA70B01680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70B11680FE1500A21259 /* Makefile.nt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.nt; sourceTree = ""; }; - C1EA70B21680FE1500A21259 /* sha.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sha.cpp; sourceTree = ""; }; - C1EA70B31680FE1500A21259 /* sha1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sha1.cpp; sourceTree = ""; }; - C1EA70B41680FE1500A21259 /* sha1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha1.h; sourceTree = ""; }; - C1EA70B51680FE1500A21259 /* shacmp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shacmp.cpp; sourceTree = ""; }; - C1EA70B61680FE1500A21259 /* shatest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shatest.cpp; sourceTree = ""; }; - C1EA70B71680FE1500A21259 /* shared_const_buffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shared_const_buffer.hpp; sourceTree = ""; }; - C1EA70B91680FE1500A21259 /* plain.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = plain.hpp; sourceTree = ""; }; - C1EA70BA1680FE1500A21259 /* socket_base.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = socket_base.hpp; sourceTree = ""; }; - C1EA70BB1680FE1500A21259 /* tls.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tls.hpp; sourceTree = ""; }; - C1EA70BD1680FE1500A21259 /* client.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = client.pem; sourceTree = ""; }; - C1EA70BE1680FE1500A21259 /* dh512.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dh512.pem; sourceTree = ""; }; - C1EA70BF1680FE1500A21259 /* server.cer */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.cer; sourceTree = ""; }; - C1EA70C01680FE1500A21259 /* server.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = server.pem; sourceTree = ""; }; - C1EA70C11680FE1500A21259 /* uri.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = uri.cpp; sourceTree = ""; }; - C1EA70C21680FE1500A21259 /* uri.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = uri.hpp; sourceTree = ""; }; - C1EA70C41680FE1500A21259 /* utf8_validator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = utf8_validator.hpp; sourceTree = ""; }; - C1EA70C51680FE1500A21259 /* websocket_frame.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = websocket_frame.hpp; sourceTree = ""; }; - C1EA70C61680FE1500A21259 /* websocketpp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = websocketpp.hpp; sourceTree = ""; }; - C1EA70C91680FE1500A21259 /* hybi_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hybi_util.cpp; sourceTree = ""; }; - C1EA70CA1680FE1500A21259 /* logging.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = logging.cpp; sourceTree = ""; }; - C1EA70CB1680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA70CC1680FE1500A21259 /* parsing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parsing.cpp; sourceTree = ""; }; - C1EA70CD1680FE1500A21259 /* uri_perf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = uri_perf.cpp; sourceTree = ""; }; - C1EA70CE1680FE1500A21259 /* todo.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = todo.txt; sourceTree = ""; }; - C1EA70D01680FE1500A21259 /* project.bbprojectdata */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = project.bbprojectdata; sourceTree = ""; }; - C1EA70D11680FE1500A21259 /* Scratchpad.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Scratchpad.txt; sourceTree = ""; }; - C1EA70D21680FE1500A21259 /* Unix Worksheet.worksheet */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.worksheet; path = "Unix Worksheet.worksheet"; sourceTree = ""; }; - C1EA70D31680FE1500A21259 /* zaphoyd.bbprojectsettings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = zaphoyd.bbprojectsettings; sourceTree = ""; }; - C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = websocketpp.xcodeproj; sourceTree = ""; }; - C1EA70D91680FE1500A21259 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; - C1EA70DA1680FE1500A21259 /* common.vsprops */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = common.vsprops; sourceTree = ""; }; - C1EA70DC1680FE1500A21259 /* chatclient.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatclient.vcproj; sourceTree = ""; }; - C1EA70DD1680FE1500A21259 /* chatserver.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatserver.vcproj; sourceTree = ""; }; - C1EA70DE1680FE1500A21259 /* concurrent_server.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = concurrent_server.vcproj; sourceTree = ""; }; - C1EA70DF1680FE1500A21259 /* echoserver.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = echoserver.vcproj; sourceTree = ""; }; - C1EA70E01680FE1500A21259 /* stdint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stdint.h; sourceTree = ""; }; - C1EA70E11680FE1500A21259 /* websocketpp.sln */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = websocketpp.sln; sourceTree = ""; }; - C1EA70E21680FE1500A21259 /* websocketpp.vcproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = websocketpp.vcproj; sourceTree = ""; }; - C1EA70E41680FE1500A21259 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; - C1EA70E61680FE1500A21259 /* chatclient.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatclient.vcxproj; sourceTree = ""; }; - C1EA70E71680FE1500A21259 /* chatclient.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatclient.vcxproj.filters; sourceTree = ""; }; - C1EA70E81680FE1500A21259 /* chatserver.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatserver.vcxproj; sourceTree = ""; }; - C1EA70E91680FE1500A21259 /* chatserver.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = chatserver.vcxproj.filters; sourceTree = ""; }; - C1EA70EA1680FE1500A21259 /* echoclient.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = echoclient.vcxproj; sourceTree = ""; }; - C1EA70EB1680FE1500A21259 /* echoclient.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = echoclient.vcxproj.filters; sourceTree = ""; }; - C1EA70EC1680FE1500A21259 /* echoserver.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = echoserver.vcxproj; sourceTree = ""; }; - C1EA70ED1680FE1500A21259 /* echoserver.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = echoserver.vcxproj.filters; sourceTree = ""; }; - C1EA70EF1680FE1500A21259 /* wsperf.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = wsperf.vcxproj; sourceTree = ""; }; - C1EA70F01680FE1500A21259 /* wsperf.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = wsperf.vcxproj.filters; sourceTree = ""; }; - C1EA70F11680FE1500A21259 /* readme.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = readme.txt; sourceTree = ""; }; - C1EA70F21680FE1500A21259 /* websocketpp.sln */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = websocketpp.sln; sourceTree = ""; }; - C1EA70F31680FE1500A21259 /* websocketpp.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = websocketpp.vcxproj; sourceTree = ""; }; - C1EA70F41680FE1500A21259 /* websocketpp.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = websocketpp.vcxproj.filters; sourceTree = ""; }; - C1EA70F61680FE1500A21259 /* account.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = account.js; sourceTree = ""; }; - C1EA70F71680FE1500A21259 /* amount.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = amount.js; sourceTree = ""; }; - C1EA70F91680FE1500A21259 /* cryptojs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cryptojs.js; sourceTree = ""; }; - C1EA70FB1680FE1500A21259 /* AES.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = AES.js; sourceTree = ""; }; - C1EA70FC1680FE1500A21259 /* BlockModes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = BlockModes.js; sourceTree = ""; }; - C1EA70FD1680FE1500A21259 /* Crypto.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Crypto.js; sourceTree = ""; }; - C1EA70FE1680FE1500A21259 /* CryptoMath.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = CryptoMath.js; sourceTree = ""; }; - C1EA70FF1680FE1500A21259 /* DES.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = DES.js; sourceTree = ""; }; - C1EA71001680FE1500A21259 /* HMAC.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = HMAC.js; sourceTree = ""; }; - C1EA71011680FE1500A21259 /* MARC4.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = MARC4.js; sourceTree = ""; }; - C1EA71021680FE1500A21259 /* MD5.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = MD5.js; sourceTree = ""; }; - C1EA71031680FE1500A21259 /* PBKDF2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = PBKDF2.js; sourceTree = ""; }; - C1EA71041680FE1500A21259 /* PBKDF2Async.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = PBKDF2Async.js; sourceTree = ""; }; - C1EA71051680FE1500A21259 /* Rabbit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Rabbit.js; sourceTree = ""; }; - C1EA71061680FE1500A21259 /* SHA1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = SHA1.js; sourceTree = ""; }; - C1EA71071680FE1500A21259 /* SHA256.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = SHA256.js; sourceTree = ""; }; - C1EA71081680FE1500A21259 /* package.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = package.json; sourceTree = ""; }; - C1EA71091680FE1500A21259 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.md; sourceTree = ""; }; - C1EA710B1680FE1500A21259 /* PBKDF2-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "PBKDF2-test.js"; sourceTree = ""; }; - C1EA710C1680FE1500A21259 /* test.coffee */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.coffee; sourceTree = ""; }; - C1EA710D1680FE1500A21259 /* index.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = index.js; sourceTree = ""; }; - C1EA710E1680FE1500A21259 /* jsbn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jsbn.js; sourceTree = ""; }; - C1EA710F1680FE1500A21259 /* network.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = network.js; sourceTree = ""; }; - C1EA71101680FE1500A21259 /* nodeutils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nodeutils.js; sourceTree = ""; }; - C1EA71111680FE1500A21259 /* remote.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = remote.js; sourceTree = ""; }; - C1EA71121680FE1500A21259 /* serializer.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = serializer.js; sourceTree = ""; }; - C1EA71151680FE1500A21259 /* browserTest.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = browserTest.html; sourceTree = ""; }; - C1EA71161680FE1500A21259 /* browserUtil.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = browserUtil.js; sourceTree = ""; }; - C1EA71171680FE1500A21259 /* rhinoUtil.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rhinoUtil.js; sourceTree = ""; }; - C1EA71181680FE1500A21259 /* test.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = test.css; sourceTree = ""; }; - C1EA711A1680FE1500A21259 /* compiler.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = compiler.jar; sourceTree = ""; }; - C1EA711B1680FE1500A21259 /* compress_with_closure.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = compress_with_closure.sh; sourceTree = ""; }; - C1EA711C1680FE1500A21259 /* compress_with_yui.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = compress_with_yui.sh; sourceTree = ""; }; - C1EA711D1680FE1500A21259 /* dewindowize.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = dewindowize.pl; sourceTree = ""; }; - C1EA711E1680FE1500A21259 /* digitize.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = digitize.pl; sourceTree = ""; }; - C1EA711F1680FE1500A21259 /* opacify.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = opacify.pl; sourceTree = ""; }; - C1EA71201680FE1500A21259 /* remove_constants.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = remove_constants.pl; sourceTree = ""; }; - C1EA71211680FE1500A21259 /* yuicompressor-2.4.2.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = "yuicompressor-2.4.2.jar"; sourceTree = ""; }; - C1EA71221680FE1500A21259 /* config.mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = config.mk; sourceTree = ""; }; - C1EA71231680FE1500A21259 /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = configure; sourceTree = ""; }; - C1EA71251680FE1500A21259 /* aes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = aes.js; sourceTree = ""; }; - C1EA71261680FE1500A21259 /* bitArray.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bitArray.js; sourceTree = ""; }; - C1EA71271680FE1500A21259 /* bn.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bn.js; sourceTree = ""; }; - C1EA71281680FE1500A21259 /* cbc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cbc.js; sourceTree = ""; }; - C1EA71291680FE1500A21259 /* ccm.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ccm.js; sourceTree = ""; }; - C1EA712A1680FE1500A21259 /* codecBase64.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = codecBase64.js; sourceTree = ""; }; - C1EA712B1680FE1500A21259 /* codecBytes.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = codecBytes.js; sourceTree = ""; }; - C1EA712C1680FE1500A21259 /* codecHex.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = codecHex.js; sourceTree = ""; }; - C1EA712D1680FE1500A21259 /* codecString.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = codecString.js; sourceTree = ""; }; - C1EA712E1680FE1500A21259 /* convenience.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = convenience.js; sourceTree = ""; }; - C1EA712F1680FE1500A21259 /* ecc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ecc.js; sourceTree = ""; }; - C1EA71301680FE1500A21259 /* hmac.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hmac.js; sourceTree = ""; }; - C1EA71311680FE1500A21259 /* ocb2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ocb2.js; sourceTree = ""; }; - C1EA71321680FE1500A21259 /* pbkdf2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pbkdf2.js; sourceTree = ""; }; - C1EA71331680FE1500A21259 /* random.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = random.js; sourceTree = ""; }; - C1EA71341680FE1500A21259 /* sha1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha1.js; sourceTree = ""; }; - C1EA71351680FE1500A21259 /* sha256.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha256.js; sourceTree = ""; }; - C1EA71361680FE1500A21259 /* sjcl.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sjcl.js; sourceTree = ""; }; - C1EA71371680FE1500A21259 /* srp.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = srp.js; sourceTree = ""; }; - C1EA71381680FE1500A21259 /* core.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = core.js; sourceTree = ""; }; - C1EA71391680FE1500A21259 /* core_closure.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = core_closure.js; sourceTree = ""; }; - C1EA713B1680FE1500A21259 /* alpha-arrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "alpha-arrow.png"; sourceTree = ""; }; - C1EA713C1680FE1500A21259 /* example.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = example.css; sourceTree = ""; }; - C1EA713D1680FE1500A21259 /* example.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = example.js; sourceTree = ""; }; - C1EA713E1680FE1500A21259 /* form.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = form.js; sourceTree = ""; }; - C1EA713F1680FE1500A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA71431680FE1500A21259 /* Chain.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Chain.js; sourceTree = ""; }; - C1EA71441680FE1500A21259 /* Dumper.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Dumper.js; sourceTree = ""; }; - C1EA71451680FE1500A21259 /* Hash.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Hash.js; sourceTree = ""; }; - C1EA71461680FE1500A21259 /* Link.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Link.js; sourceTree = ""; }; - C1EA71471680FE1500A21259 /* Namespace.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Namespace.js; sourceTree = ""; }; - C1EA71481680FE1500A21259 /* Opt.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Opt.js; sourceTree = ""; }; - C1EA71491680FE1500A21259 /* Reflection.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Reflection.js; sourceTree = ""; }; - C1EA714A1680FE1500A21259 /* String.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = String.js; sourceTree = ""; }; - C1EA714B1680FE1500A21259 /* Testrun.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Testrun.js; sourceTree = ""; }; - C1EA714C1680FE1500A21259 /* frame.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = frame.js; sourceTree = ""; }; - C1EA714E1680FE1500A21259 /* FOODOC.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = FOODOC.js; sourceTree = ""; }; - C1EA71501680FE1500A21259 /* DomReader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = DomReader.js; sourceTree = ""; }; - C1EA71511680FE1500A21259 /* XMLDoc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = XMLDoc.js; sourceTree = ""; }; - C1EA71521680FE1500A21259 /* XMLParse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = XMLParse.js; sourceTree = ""; }; - C1EA71531680FE1500A21259 /* XMLDOC.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = XMLDOC.js; sourceTree = ""; }; - C1EA71561680FE1500A21259 /* DocComment.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = DocComment.js; sourceTree = ""; }; - C1EA71571680FE1500A21259 /* DocTag.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = DocTag.js; sourceTree = ""; }; - C1EA71581680FE1500A21259 /* JsDoc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = JsDoc.js; sourceTree = ""; }; - C1EA71591680FE1500A21259 /* JsPlate.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = JsPlate.js; sourceTree = ""; }; - C1EA715A1680FE1500A21259 /* Lang.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Lang.js; sourceTree = ""; }; - C1EA715B1680FE1500A21259 /* Parser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Parser.js; sourceTree = ""; }; - C1EA715C1680FE1500A21259 /* PluginManager.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = PluginManager.js; sourceTree = ""; }; - C1EA715D1680FE1500A21259 /* Symbol.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Symbol.js; sourceTree = ""; }; - C1EA715E1680FE1500A21259 /* SymbolSet.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = SymbolSet.js; sourceTree = ""; }; - C1EA715F1680FE1500A21259 /* TextStream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TextStream.js; sourceTree = ""; }; - C1EA71601680FE1500A21259 /* Token.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Token.js; sourceTree = ""; }; - C1EA71611680FE1500A21259 /* TokenReader.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TokenReader.js; sourceTree = ""; }; - C1EA71621680FE1500A21259 /* TokenStream.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TokenStream.js; sourceTree = ""; }; - C1EA71631680FE1500A21259 /* Util.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Util.js; sourceTree = ""; }; - C1EA71641680FE1500A21259 /* Walker.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = Walker.js; sourceTree = ""; }; - C1EA71651680FE1500A21259 /* JSDOC.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = JSDOC.js; sourceTree = ""; }; - C1EA71661680FE1500A21259 /* main.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = main.js; sourceTree = ""; }; - C1EA71681680FE1500A21259 /* commentSrcJson.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = commentSrcJson.js; sourceTree = ""; }; - C1EA71691680FE1500A21259 /* frameworkPrototype.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = frameworkPrototype.js; sourceTree = ""; }; - C1EA716A1680FE1500A21259 /* functionCall.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = functionCall.js; sourceTree = ""; }; - C1EA716B1680FE1500A21259 /* publishSrcHilite.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = publishSrcHilite.js; sourceTree = ""; }; - C1EA716C1680FE1500A21259 /* symbolLink.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = symbolLink.js; sourceTree = ""; }; - C1EA716D1680FE1500A21259 /* tagParamConfig.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tagParamConfig.js; sourceTree = ""; }; - C1EA716E1680FE1500A21259 /* tagSynonyms.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tagSynonyms.js; sourceTree = ""; }; - C1EA716F1680FE1500A21259 /* run.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run.js; sourceTree = ""; }; - C1EA71711680FE1500A21259 /* runner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = runner.js; sourceTree = ""; }; - C1EA71721680FE1500A21259 /* TestDoc.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TestDoc.js; sourceTree = ""; }; - C1EA71741680FE1500A21259 /* addon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = addon.js; sourceTree = ""; }; - C1EA71751680FE1500A21259 /* anon_inner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = anon_inner.js; sourceTree = ""; }; - C1EA71761680FE1500A21259 /* augments.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = augments.js; sourceTree = ""; }; - C1EA71771680FE1500A21259 /* augments2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = augments2.js; sourceTree = ""; }; - C1EA71781680FE1500A21259 /* borrows.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borrows.js; sourceTree = ""; }; - C1EA71791680FE1500A21259 /* borrows2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = borrows2.js; sourceTree = ""; }; - C1EA717A1680FE1500A21259 /* config.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = config.js; sourceTree = ""; }; - C1EA717B1680FE1500A21259 /* constructs.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = constructs.js; sourceTree = ""; }; - C1EA717C1680FE1500A21259 /* encoding.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = encoding.js; sourceTree = ""; }; - C1EA717D1680FE1500A21259 /* encoding_other.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = encoding_other.js; sourceTree = ""; }; - C1EA717E1680FE1500A21259 /* event.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = event.js; sourceTree = ""; }; - C1EA717F1680FE1500A21259 /* exports.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = exports.js; sourceTree = ""; }; - C1EA71801680FE1500A21259 /* functions_anon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = functions_anon.js; sourceTree = ""; }; - C1EA71811680FE1500A21259 /* functions_nested.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = functions_nested.js; sourceTree = ""; }; - C1EA71821680FE1500A21259 /* global.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = global.js; sourceTree = ""; }; - C1EA71831680FE1500A21259 /* globals.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = globals.js; sourceTree = ""; }; - C1EA71841680FE1500A21259 /* ignore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ignore.js; sourceTree = ""; }; - C1EA71851680FE1500A21259 /* inner.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = inner.js; sourceTree = ""; }; - C1EA71861680FE1500A21259 /* jsdoc_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jsdoc_test.js; sourceTree = ""; }; - C1EA71871680FE1500A21259 /* lend.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = lend.js; sourceTree = ""; }; - C1EA71881680FE1500A21259 /* memberof.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = memberof.js; sourceTree = ""; }; - C1EA71891680FE1500A21259 /* memberof2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = memberof2.js; sourceTree = ""; }; - C1EA718A1680FE1500A21259 /* memberof3.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = memberof3.js; sourceTree = ""; }; - C1EA718B1680FE1500A21259 /* memberof_constructor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = memberof_constructor.js; sourceTree = ""; }; - C1EA718C1680FE1500A21259 /* module.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = module.js; sourceTree = ""; }; - C1EA718D1680FE1500A21259 /* multi_methods.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = multi_methods.js; sourceTree = ""; }; - C1EA718E1680FE1500A21259 /* name.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = name.js; sourceTree = ""; }; - C1EA718F1680FE1500A21259 /* namespace_nested.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = namespace_nested.js; sourceTree = ""; }; - C1EA71901680FE1500A21259 /* nocode.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nocode.js; sourceTree = ""; }; - C1EA71911680FE1500A21259 /* oblit_anon.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = oblit_anon.js; sourceTree = ""; }; - C1EA71921680FE1500A21259 /* overview.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = overview.js; sourceTree = ""; }; - C1EA71931680FE1500A21259 /* param_inline.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = param_inline.js; sourceTree = ""; }; - C1EA71941680FE1500A21259 /* params_optional.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = params_optional.js; sourceTree = ""; }; - C1EA71951680FE1500A21259 /* prototype.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = prototype.js; sourceTree = ""; }; - C1EA71961680FE1500A21259 /* prototype_nested.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = prototype_nested.js; sourceTree = ""; }; - C1EA71971680FE1500A21259 /* prototype_oblit.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = prototype_oblit.js; sourceTree = ""; }; - C1EA71981680FE1500A21259 /* prototype_oblit_constructor.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = prototype_oblit_constructor.js; sourceTree = ""; }; - C1EA71991680FE1500A21259 /* public.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = public.js; sourceTree = ""; }; - C1EA719B1680FE1500A21259 /* code.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = code.js; sourceTree = ""; }; - C1EA719C1680FE1500A21259 /* notcode.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = notcode.txt; sourceTree = ""; }; - C1EA719D1680FE1500A21259 /* shared.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shared.js; sourceTree = ""; }; - C1EA719E1680FE1500A21259 /* shared2.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shared2.js; sourceTree = ""; }; - C1EA719F1680FE1500A21259 /* shortcuts.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = shortcuts.js; sourceTree = ""; }; - C1EA71A01680FE1500A21259 /* static_this.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = static_this.js; sourceTree = ""; }; - C1EA71A11680FE1500A21259 /* synonyms.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = synonyms.js; sourceTree = ""; }; - C1EA71A21680FE1500A21259 /* tosource.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = tosource.js; sourceTree = ""; }; - C1EA71A31680FE1500A21259 /* variable_redefine.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = variable_redefine.js; sourceTree = ""; }; - C1EA71A41680FE1500A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA71A51680FE1500A21259 /* changes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = changes.txt; sourceTree = ""; }; - C1EA71A71680FE1500A21259 /* sample.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sample.conf; sourceTree = ""; }; - C1EA71A91680FE1500A21259 /* build.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = build.xml; sourceTree = ""; }; - C1EA71AA1680FE1500A21259 /* build_1.4.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = build_1.4.xml; sourceTree = ""; }; - C1EA71AC1680FE1500A21259 /* js.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = js.jar; sourceTree = ""; }; - C1EA71AE1680FE1500A21259 /* JsDebugRun.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = JsDebugRun.java; sourceTree = ""; }; - C1EA71AF1680FE1500A21259 /* JsRun.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = JsRun.java; sourceTree = ""; }; - C1EA71B01680FE1500A21259 /* jsdebug.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = jsdebug.jar; sourceTree = ""; }; - C1EA71B11680FE1500A21259 /* jsrun.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = jsrun.jar; sourceTree = ""; }; - C1EA71B21680FE1500A21259 /* jsrun.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = jsrun.sh; sourceTree = ""; }; - C1EA71B31680FE1500A21259 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - C1EA71B61680FE1500A21259 /* allclasses.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = allclasses.tmpl; sourceTree = ""; }; - C1EA71B71680FE1500A21259 /* allfiles.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = allfiles.tmpl; sourceTree = ""; }; - C1EA71B81680FE1500A21259 /* class.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = class.tmpl; sourceTree = ""; }; - C1EA71BA1680FE1500A21259 /* default.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = default.css; sourceTree = ""; }; - C1EA71BB1680FE1500A21259 /* index.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = index.tmpl; sourceTree = ""; }; - C1EA71BC1680FE1500A21259 /* publish.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = publish.js; sourceTree = ""; }; - C1EA71BE1680FE1500A21259 /* header.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = header.html; sourceTree = ""; }; - C1EA71BF1680FE1500A21259 /* index.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index.html; sourceTree = ""; }; - C1EA71C01680FE1500A21259 /* symbol.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = symbol.tmpl; sourceTree = ""; }; - C1EA71C21680FE1500A21259 /* coding_guidelines.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = coding_guidelines.pl; sourceTree = ""; }; - C1EA71C31680FE1500A21259 /* jslint_rhino.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jslint_rhino.js; sourceTree = ""; }; - C1EA71C41680FE1500A21259 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - C1EA71C61680FE1500A21259 /* bsd.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bsd.txt; sourceTree = ""; }; - C1EA71C71680FE1500A21259 /* COPYRIGHT */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYRIGHT; sourceTree = ""; }; - C1EA71C81680FE1500A21259 /* gpl-2.0.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "gpl-2.0.txt"; sourceTree = ""; }; - C1EA71C91680FE1500A21259 /* gpl-3.0.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "gpl-3.0.txt"; sourceTree = ""; }; - C1EA71CA1680FE1500A21259 /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = INSTALL; sourceTree = ""; }; - C1EA71CB1680FE1500A21259 /* sjcl.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sjcl.js; sourceTree = ""; }; - C1EA71CD1680FE1500A21259 /* aes_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = aes_test.js; sourceTree = ""; }; - C1EA71CE1680FE1500A21259 /* aes_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = aes_vectors.js; sourceTree = ""; }; - C1EA71CF1680FE1500A21259 /* bn_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bn_test.js; sourceTree = ""; }; - C1EA71D01680FE1500A21259 /* bn_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = bn_vectors.js; sourceTree = ""; }; - C1EA71D11680FE1500A21259 /* cbc_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cbc_test.js; sourceTree = ""; }; - C1EA71D21680FE1500A21259 /* cbc_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = cbc_vectors.js; sourceTree = ""; }; - C1EA71D31680FE1500A21259 /* ccm_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ccm_test.js; sourceTree = ""; }; - C1EA71D41680FE1500A21259 /* ccm_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ccm_vectors.js; sourceTree = ""; }; - C1EA71D51680FE1500A21259 /* ecdh_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ecdh_test.js; sourceTree = ""; }; - C1EA71D61680FE1500A21259 /* ecdsa_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ecdsa_test.js; sourceTree = ""; }; - C1EA71D71680FE1500A21259 /* hmac_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hmac_test.js; sourceTree = ""; }; - C1EA71D81680FE1500A21259 /* hmac_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = hmac_vectors.js; sourceTree = ""; }; - C1EA71D91680FE1500A21259 /* ocb2_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ocb2_test.js; sourceTree = ""; }; - C1EA71DA1680FE1500A21259 /* ocb2_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ocb2_vectors.js; sourceTree = ""; }; - C1EA71DB1680FE1500A21259 /* pbkdf2_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = pbkdf2_test.js; sourceTree = ""; }; - C1EA71DC1680FE1500A21259 /* run_tests_browser.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run_tests_browser.js; sourceTree = ""; }; - C1EA71DD1680FE1500A21259 /* run_tests_rhino.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = run_tests_rhino.js; sourceTree = ""; }; - C1EA71DE1680FE1500A21259 /* sha1_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha1_test.js; sourceTree = ""; }; - C1EA71DF1680FE1500A21259 /* sha1_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha1_vectors.js; sourceTree = ""; }; - C1EA71E01680FE1500A21259 /* sha256_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha256_test.js; sourceTree = ""; }; - C1EA71E11680FE1500A21259 /* sha256_test_brute_force.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha256_test_brute_force.js; sourceTree = ""; }; - C1EA71E21680FE1500A21259 /* sha256_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha256_vectors.js; sourceTree = ""; }; - C1EA71E31680FE1500A21259 /* srp_test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = srp_test.js; sourceTree = ""; }; - C1EA71E41680FE1500A21259 /* srp_vectors.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = srp_vectors.js; sourceTree = ""; }; - C1EA71E51680FE1500A21259 /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; - C1EA71E61680FE1500A21259 /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; - C1EA71E71680FE1500A21259 /* utils.web.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.web.js; sourceTree = ""; }; - C1EA71E81680FE1500A21259 /* tags */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tags; path = ../../tags; sourceTree = ""; }; - C1EA71EA1680FE1500A21259 /* amount-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "amount-test.js"; sourceTree = ""; }; - C1EA71EB1680FE1500A21259 /* buster.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = buster.js; sourceTree = ""; }; - C1EA71EC1680FE1500A21259 /* config-example.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "config-example.js"; sourceTree = ""; }; - C1EA71ED1680FE1500A21259 /* config.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = config.js; sourceTree = ""; }; - C1EA71EE1680FE1500A21259 /* monitor-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "monitor-test.js"; sourceTree = ""; }; - C1EA71EF1680FE1500A21259 /* offer-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "offer-test.js"; sourceTree = ""; }; - C1EA71F01680FE1500A21259 /* path-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "path-test.js"; sourceTree = ""; }; - C1EA71F11680FE1500A21259 /* remote-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "remote-test.js"; sourceTree = ""; }; - C1EA71F21680FE1500A21259 /* send-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "send-test.js"; sourceTree = ""; }; - C1EA71F31680FE1500A21259 /* server-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "server-test.js"; sourceTree = ""; }; - C1EA71F41680FE1500A21259 /* server.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = server.js; sourceTree = ""; }; - C1EA71F51680FE1500A21259 /* testconfig.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = testconfig.js; sourceTree = ""; }; - C1EA71F61680FE1500A21259 /* testutils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = testutils.js; sourceTree = ""; }; - C1EA71F71680FE1500A21259 /* utils-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "utils-test.js"; sourceTree = ""; }; - C1EA71F81680FE1500A21259 /* websocket-test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "websocket-test.js"; sourceTree = ""; }; - C1EA71F91680FE1500A21259 /* testcommit.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = testcommit.txt; path = ../../testcommit.txt; sourceTree = ""; }; - C1EA71FD1680FE1500A21259 /* rippled.cfg */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = rippled.cfg; sourceTree = ""; }; - C1EA71FE1680FE1500A21259 /* validators-example.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "validators-example.txt"; path = "../../validators-example.txt"; sourceTree = ""; }; - C1EA71FF1680FE1500A21259 /* validators.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = validators.txt; path = ../../validators.txt; sourceTree = ""; }; - C1EA72011680FE1500A21259 /* domain.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = domain.js; sourceTree = ""; }; - C1EA72021680FE1500A21259 /* ws.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = ws.js; sourceTree = ""; }; - C1EA72031680FE1500A21259 /* webpack.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = webpack.js; path = ../../webpack.js; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - C1EA4FC51680FDCA00A21259 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C1EA72121680FE1800A21259 /* database.o in Frameworks */, - C1EA72131680FE1800A21259 /* sqlite3.o in Frameworks */, - C1EA72141680FE1800A21259 /* SqliteDatabase.o in Frameworks */, - C1EA72151680FE1800A21259 /* json_reader.o in Frameworks */, - C1EA72161680FE1800A21259 /* json_value.o in Frameworks */, - C1EA72171680FE1800A21259 /* json_writer.o in Frameworks */, - C1EA72181680FE1800A21259 /* AccountItems.o in Frameworks */, - C1EA72191680FE1800A21259 /* AccountSetTransactor.o in Frameworks */, - C1EA721A1680FE1800A21259 /* AccountState.o in Frameworks */, - C1EA721B1680FE1800A21259 /* Amount.o in Frameworks */, - C1EA721C1680FE1800A21259 /* Application.o in Frameworks */, - C1EA721D1680FE1800A21259 /* BitcoinUtil.o in Frameworks */, - C1EA721E1680FE1800A21259 /* CallRPC.o in Frameworks */, - C1EA721F1680FE1800A21259 /* CanonicalTXSet.o in Frameworks */, - C1EA72201680FE1800A21259 /* Config.o in Frameworks */, - C1EA72211680FE1800A21259 /* ConnectionPool.o in Frameworks */, - C1EA72221680FE1800A21259 /* Contract.o in Frameworks */, - C1EA72231680FE1800A21259 /* DBInit.o in Frameworks */, - C1EA72241680FE1800A21259 /* DeterministicKeys.o in Frameworks */, - C1EA72251680FE1800A21259 /* ECIES.o in Frameworks */, - C1EA72261680FE1800A21259 /* FeatureTable.o in Frameworks */, - C1EA72271680FE1800A21259 /* FieldNames.o in Frameworks */, - C1EA72281680FE1800A21259 /* HashedObject.o in Frameworks */, - C1EA72291680FE1800A21259 /* HTTPRequest.o in Frameworks */, - C1EA722A1680FE1800A21259 /* HttpsClient.o in Frameworks */, - C1EA722B1680FE1800A21259 /* InstanceCounter.o in Frameworks */, - C1EA722C1680FE1800A21259 /* Interpreter.o in Frameworks */, - C1EA722D1680FE1800A21259 /* JobQueue.o in Frameworks */, - C1EA722E1680FE1800A21259 /* Ledger.o in Frameworks */, - C1EA722F1680FE1800A21259 /* LedgerAcquire.o in Frameworks */, - C1EA72301680FE1800A21259 /* LedgerConsensus.o in Frameworks */, - C1EA72311680FE1800A21259 /* LedgerEntrySet.o in Frameworks */, - C1EA72321680FE1800A21259 /* LedgerFormats.o in Frameworks */, - C1EA72331680FE1800A21259 /* LedgerHistory.o in Frameworks */, - C1EA72341680FE1800A21259 /* LedgerMaster.o in Frameworks */, - C1EA72351680FE1800A21259 /* LedgerProposal.o in Frameworks */, - C1EA72361680FE1800A21259 /* LedgerTiming.o in Frameworks */, - C1EA72371680FE1800A21259 /* LoadManager.o in Frameworks */, - C1EA72381680FE1800A21259 /* LoadMonitor.o in Frameworks */, - C1EA72391680FE1800A21259 /* Log.o in Frameworks */, - C1EA723A1680FE1800A21259 /* main.o in Frameworks */, - C1EA723B1680FE1800A21259 /* NetworkOPs.o in Frameworks */, - C1EA723C1680FE1800A21259 /* NicknameState.o in Frameworks */, - C1EA723D1680FE1800A21259 /* Offer.o in Frameworks */, - C1EA723E1680FE1800A21259 /* OfferCancelTransactor.o in Frameworks */, - C1EA723F1680FE1800A21259 /* OfferCreateTransactor.o in Frameworks */, - C1EA72401680FE1800A21259 /* Operation.o in Frameworks */, - C1EA72411680FE1800A21259 /* OrderBook.o in Frameworks */, - C1EA72421680FE1800A21259 /* OrderBookDB.o in Frameworks */, - C1EA72431680FE1800A21259 /* PackedMessage.o in Frameworks */, - C1EA72441680FE1800A21259 /* ParameterTable.o in Frameworks */, - C1EA72451680FE1800A21259 /* ParseSection.o in Frameworks */, - C1EA72461680FE1800A21259 /* Pathfinder.o in Frameworks */, - C1EA72471680FE1800A21259 /* PaymentTransactor.o in Frameworks */, - C1EA72481680FE1800A21259 /* Peer.o in Frameworks */, - C1EA72491680FE1800A21259 /* PeerDoor.o in Frameworks */, - C1EA724A1680FE1800A21259 /* PlatRand.o in Frameworks */, - C1EA724B1680FE1800A21259 /* ProofOfWork.o in Frameworks */, - C1EA724C1680FE1800A21259 /* PubKeyCache.o in Frameworks */, - C1EA724D1680FE1800A21259 /* RangeSet.o in Frameworks */, - C1EA724E1680FE1800A21259 /* RegularKeySetTransactor.o in Frameworks */, - C1EA724F1680FE1800A21259 /* rfc1751.o in Frameworks */, - C1EA72501680FE1800A21259 /* RippleAddress.o in Frameworks */, - C1EA72511680FE1800A21259 /* RippleCalc.o in Frameworks */, - C1EA72521680FE1800A21259 /* RippleState.o in Frameworks */, - C1EA72531680FE1800A21259 /* rpc.o in Frameworks */, - C1EA72541680FE1800A21259 /* RPCDoor.o in Frameworks */, - C1EA72551680FE1800A21259 /* RPCErr.o in Frameworks */, - C1EA72561680FE1800A21259 /* RPCHandler.o in Frameworks */, - C1EA72571680FE1800A21259 /* RPCServer.o in Frameworks */, - C1EA72581680FE1800A21259 /* ScriptData.o in Frameworks */, - C1EA72591680FE1800A21259 /* SerializedLedger.o in Frameworks */, - C1EA725A1680FE1800A21259 /* SerializedObject.o in Frameworks */, - C1EA725B1680FE1800A21259 /* SerializedTransaction.o in Frameworks */, - C1EA725C1680FE1800A21259 /* SerializedTypes.o in Frameworks */, - C1EA725D1680FE1800A21259 /* SerializedValidation.o in Frameworks */, - C1EA725E1680FE1800A21259 /* Serializer.o in Frameworks */, - C1EA725F1680FE1800A21259 /* SHAMap.o in Frameworks */, - C1EA72601680FE1800A21259 /* SHAMapDiff.o in Frameworks */, - C1EA72611680FE1800A21259 /* SHAMapNodes.o in Frameworks */, - C1EA72621680FE1800A21259 /* SHAMapSync.o in Frameworks */, - C1EA72631680FE1800A21259 /* SNTPClient.o in Frameworks */, - C1EA72641680FE1800A21259 /* Suppression.o in Frameworks */, - C1EA72651680FE1800A21259 /* Transaction.o in Frameworks */, - C1EA72661680FE1800A21259 /* TransactionEngine.o in Frameworks */, - C1EA72671680FE1800A21259 /* TransactionErr.o in Frameworks */, - C1EA72681680FE1800A21259 /* TransactionFormats.o in Frameworks */, - C1EA72691680FE1800A21259 /* TransactionMaster.o in Frameworks */, - C1EA726A1680FE1800A21259 /* TransactionMeta.o in Frameworks */, - C1EA726B1680FE1800A21259 /* Transactor.o in Frameworks */, - C1EA726C1680FE1800A21259 /* TrustSetTransactor.o in Frameworks */, - C1EA726D1680FE1800A21259 /* UniqueNodeList.o in Frameworks */, - C1EA726E1680FE1800A21259 /* utils.o in Frameworks */, - C1EA726F1680FE1800A21259 /* ValidationCollection.o in Frameworks */, - C1EA72701680FE1800A21259 /* Wallet.o in Frameworks */, - C1EA72711680FE1800A21259 /* WalletAddTransactor.o in Frameworks */, - C1EA72721680FE1800A21259 /* WSDoor.o in Frameworks */, - C1EA72731680FE1800A21259 /* base64.o in Frameworks */, - C1EA72741680FE1800A21259 /* md5.o in Frameworks */, - C1EA72751680FE1800A21259 /* data.o in Frameworks */, - C1EA72761680FE1800A21259 /* network_utilities.o in Frameworks */, - C1EA72771680FE1800A21259 /* hybi_header.o in Frameworks */, - C1EA72781680FE1800A21259 /* hybi_util.o in Frameworks */, - C1EA72791680FE1800A21259 /* sha1.o in Frameworks */, - C1EA727A1680FE1800A21259 /* uri.o in Frameworks */, - C1EA727C1680FE1800A21259 /* ripple.pb.o in Frameworks */, - C1EA76DE1680FE1900A21259 /* contextify.node in Frameworks */, - C1EA76DF1680FE1900A21259 /* contextify.o in Frameworks */, - C1EA79AD1680FE1900A21259 /* contextify.node in Frameworks */, - C1EA79AE1680FE1900A21259 /* contextify.o in Frameworks */, - C1EA82E81680FE1A00A21259 /* bufferutil.node in Frameworks */, - C1EA82E91680FE1A00A21259 /* bufferutil.o in Frameworks */, - C1EA82EA1680FE1A00A21259 /* validation.o in Frameworks */, - C1EA82EB1680FE1A00A21259 /* validation.node in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - C1EA4FBD1680FDCA00A21259 = { - isa = PBXGroup; - children = ( - C1EA4FCB1680FDCA00A21259 /* NewCoin */, - C1EA4FC91680FDCA00A21259 /* Products */, - ); - sourceTree = ""; - }; - C1EA4FC91680FDCA00A21259 /* Products */ = { - isa = PBXGroup; - children = ( - C1EA4FC81680FDCA00A21259 /* NewCoin */, - ); - name = Products; - sourceTree = ""; - }; - C1EA4FCB1680FDCA00A21259 /* NewCoin */ = { - isa = PBXGroup; - children = ( - C1EA4FD51680FE1000A21259 /* bin */, - C1EA4FDD1680FE1000A21259 /* build */, - C1EA50571680FE1000A21259 /* deploy */, - C1EA505C1680FE1100A21259 /* LICENSE */, - C1EA505D1680FE1100A21259 /* NewCoin */, - C1EA50641680FE1100A21259 /* NewCoin.1 */, - C1EA50651680FE1100A21259 /* newcoin.sln */, - C1EA50661680FE1100A21259 /* newcoin.vcxproj */, - C1EA50671680FE1100A21259 /* newcoin.vcxproj.filters */, - C1EA50681680FE1100A21259 /* node_modules */, - C1EA6EEE1680FE1500A21259 /* package.json */, - C1EA6EEF1680FE1500A21259 /* README */, - C1EA6EF01680FE1500A21259 /* ripple-example.txt */, - C1EA6EF11680FE1500A21259 /* ripple2010.sln */, - C1EA6EF21680FE1500A21259 /* ripple2010.vcxproj */, - C1EA6EF31680FE1500A21259 /* ripple2010.vcxproj.filters */, - C1EA6EF41680FE1500A21259 /* rippled-example.cfg */, - C1EA6EF51680FE1500A21259 /* rippled.cfg */, - C1EA6EF61680FE1500A21259 /* SConstruct */, - C1EA6EF71680FE1500A21259 /* site_scons */, - C1EA6EFB1680FE1500A21259 /* src */, - C1EA71E81680FE1500A21259 /* tags */, - C1EA71E91680FE1500A21259 /* test */, - C1EA71F91680FE1500A21259 /* testcommit.txt */, - C1EA71FA1680FE1500A21259 /* tmp */, - C1EA71FE1680FE1500A21259 /* validators-example.txt */, - C1EA71FF1680FE1500A21259 /* validators.txt */, - C1EA72001680FE1500A21259 /* web_modules */, - C1EA72031680FE1500A21259 /* webpack.js */, - C1EA4FCC1680FDCA00A21259 /* main.cpp */, - C1EA4FCE1680FDCA00A21259 /* NewCoin.1 */, - ); - path = NewCoin; - sourceTree = ""; - }; - C1EA4FD51680FE1000A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA4FD61680FE1000A21259 /* network-build */, - C1EA4FD71680FE1000A21259 /* network-init */, - C1EA4FD81680FE1000A21259 /* network-restart */, - C1EA4FD91680FE1000A21259 /* network-start */, - C1EA4FDA1680FE1000A21259 /* network-stop */, - C1EA4FDB1680FE1000A21259 /* network-update */, - C1EA4FDC1680FE1000A21259 /* nx */, - ); - name = bin; - path = ../../bin; - sourceTree = ""; - }; - C1EA4FDD1680FE1000A21259 /* build */ = { - isa = PBXGroup; - children = ( - C1EA4FDE1680FE1000A21259 /* obj */, - C1EA50521680FE1000A21259 /* proto */, - C1EA50561680FE1000A21259 /* rippled */, - ); - name = build; - path = ../../build; - sourceTree = ""; - }; - C1EA4FDE1680FE1000A21259 /* obj */ = { - isa = PBXGroup; - children = ( - C1EA4FDF1680FE1000A21259 /* database */, - C1EA4FE31680FE1000A21259 /* json */, - C1EA4FE71680FE1000A21259 /* ripple */, - C1EA50431680FE1000A21259 /* websocketpp */, - ); - path = obj; - sourceTree = ""; - }; - C1EA4FDF1680FE1000A21259 /* database */ = { - isa = PBXGroup; - children = ( - C1EA4FE01680FE1000A21259 /* database.o */, - C1EA4FE11680FE1000A21259 /* sqlite3.o */, - C1EA4FE21680FE1000A21259 /* SqliteDatabase.o */, - ); - path = database; - sourceTree = ""; - }; - C1EA4FE31680FE1000A21259 /* json */ = { - isa = PBXGroup; - children = ( - C1EA4FE41680FE1000A21259 /* json_reader.o */, - C1EA4FE51680FE1000A21259 /* json_value.o */, - C1EA4FE61680FE1000A21259 /* json_writer.o */, - ); - path = json; - sourceTree = ""; - }; - C1EA4FE71680FE1000A21259 /* ripple */ = { - isa = PBXGroup; - children = ( - C1EA4FE81680FE1000A21259 /* AccountItems.o */, - C1EA4FE91680FE1000A21259 /* AccountSetTransactor.o */, - C1EA4FEA1680FE1000A21259 /* AccountState.o */, - C1EA4FEB1680FE1000A21259 /* Amount.o */, - C1EA4FEC1680FE1000A21259 /* Application.o */, - C1EA4FED1680FE1000A21259 /* BitcoinUtil.o */, - C1EA4FEE1680FE1000A21259 /* CallRPC.o */, - C1EA4FEF1680FE1000A21259 /* CanonicalTXSet.o */, - C1EA4FF01680FE1000A21259 /* Config.o */, - C1EA4FF11680FE1000A21259 /* ConnectionPool.o */, - C1EA4FF21680FE1000A21259 /* Contract.o */, - C1EA4FF31680FE1000A21259 /* DBInit.o */, - C1EA4FF41680FE1000A21259 /* DeterministicKeys.o */, - C1EA4FF51680FE1000A21259 /* ECIES.o */, - C1EA4FF61680FE1000A21259 /* FeatureTable.o */, - C1EA4FF71680FE1000A21259 /* FieldNames.o */, - C1EA4FF81680FE1000A21259 /* HashedObject.o */, - C1EA4FF91680FE1000A21259 /* HTTPRequest.o */, - C1EA4FFA1680FE1000A21259 /* HttpsClient.o */, - C1EA4FFB1680FE1000A21259 /* InstanceCounter.o */, - C1EA4FFC1680FE1000A21259 /* Interpreter.o */, - C1EA4FFD1680FE1000A21259 /* JobQueue.o */, - C1EA4FFE1680FE1000A21259 /* Ledger.o */, - C1EA4FFF1680FE1000A21259 /* LedgerAcquire.o */, - C1EA50001680FE1000A21259 /* LedgerConsensus.o */, - C1EA50011680FE1000A21259 /* LedgerEntrySet.o */, - C1EA50021680FE1000A21259 /* LedgerFormats.o */, - C1EA50031680FE1000A21259 /* LedgerHistory.o */, - C1EA50041680FE1000A21259 /* LedgerMaster.o */, - C1EA50051680FE1000A21259 /* LedgerProposal.o */, - C1EA50061680FE1000A21259 /* LedgerTiming.o */, - C1EA50071680FE1000A21259 /* LoadManager.o */, - C1EA50081680FE1000A21259 /* LoadMonitor.o */, - C1EA50091680FE1000A21259 /* Log.o */, - C1EA500A1680FE1000A21259 /* main.o */, - C1EA500B1680FE1000A21259 /* NetworkOPs.o */, - C1EA500C1680FE1000A21259 /* NicknameState.o */, - C1EA500D1680FE1000A21259 /* Offer.o */, - C1EA500E1680FE1000A21259 /* OfferCancelTransactor.o */, - C1EA500F1680FE1000A21259 /* OfferCreateTransactor.o */, - C1EA50101680FE1000A21259 /* Operation.o */, - C1EA50111680FE1000A21259 /* OrderBook.o */, - C1EA50121680FE1000A21259 /* OrderBookDB.o */, - C1EA50131680FE1000A21259 /* PackedMessage.o */, - C1EA50141680FE1000A21259 /* ParameterTable.o */, - C1EA50151680FE1000A21259 /* ParseSection.o */, - C1EA50161680FE1000A21259 /* Pathfinder.o */, - C1EA50171680FE1000A21259 /* PaymentTransactor.o */, - C1EA50181680FE1000A21259 /* Peer.o */, - C1EA50191680FE1000A21259 /* PeerDoor.o */, - C1EA501A1680FE1000A21259 /* PlatRand.o */, - C1EA501B1680FE1000A21259 /* ProofOfWork.o */, - C1EA501C1680FE1000A21259 /* PubKeyCache.o */, - C1EA501D1680FE1000A21259 /* RangeSet.o */, - C1EA501E1680FE1000A21259 /* RegularKeySetTransactor.o */, - C1EA501F1680FE1000A21259 /* rfc1751.o */, - C1EA50201680FE1000A21259 /* RippleAddress.o */, - C1EA50211680FE1000A21259 /* RippleCalc.o */, - C1EA50221680FE1000A21259 /* RippleState.o */, - C1EA50231680FE1000A21259 /* rpc.o */, - C1EA50241680FE1000A21259 /* RPCDoor.o */, - C1EA50251680FE1000A21259 /* RPCErr.o */, - C1EA50261680FE1000A21259 /* RPCHandler.o */, - C1EA50271680FE1000A21259 /* RPCServer.o */, - C1EA50281680FE1000A21259 /* ScriptData.o */, - C1EA50291680FE1000A21259 /* SerializedLedger.o */, - C1EA502A1680FE1000A21259 /* SerializedObject.o */, - C1EA502B1680FE1000A21259 /* SerializedTransaction.o */, - C1EA502C1680FE1000A21259 /* SerializedTypes.o */, - C1EA502D1680FE1000A21259 /* SerializedValidation.o */, - C1EA502E1680FE1000A21259 /* Serializer.o */, - C1EA502F1680FE1000A21259 /* SHAMap.o */, - C1EA50301680FE1000A21259 /* SHAMapDiff.o */, - C1EA50311680FE1000A21259 /* SHAMapNodes.o */, - C1EA50321680FE1000A21259 /* SHAMapSync.o */, - C1EA50331680FE1000A21259 /* SNTPClient.o */, - C1EA50341680FE1000A21259 /* Suppression.o */, - C1EA50351680FE1000A21259 /* Transaction.o */, - C1EA50361680FE1000A21259 /* TransactionEngine.o */, - C1EA50371680FE1000A21259 /* TransactionErr.o */, - C1EA50381680FE1000A21259 /* TransactionFormats.o */, - C1EA50391680FE1000A21259 /* TransactionMaster.o */, - C1EA503A1680FE1000A21259 /* TransactionMeta.o */, - C1EA503B1680FE1000A21259 /* Transactor.o */, - C1EA503C1680FE1000A21259 /* TrustSetTransactor.o */, - C1EA503D1680FE1000A21259 /* UniqueNodeList.o */, - C1EA503E1680FE1000A21259 /* utils.o */, - C1EA503F1680FE1000A21259 /* ValidationCollection.o */, - C1EA50401680FE1000A21259 /* Wallet.o */, - C1EA50411680FE1000A21259 /* WalletAddTransactor.o */, - C1EA50421680FE1000A21259 /* WSDoor.o */, - ); - path = ripple; - sourceTree = ""; - }; - C1EA50431680FE1000A21259 /* websocketpp */ = { - isa = PBXGroup; - children = ( - C1EA50441680FE1000A21259 /* src */, - ); - path = websocketpp; - sourceTree = ""; - }; - C1EA50441680FE1000A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA50451680FE1000A21259 /* base64 */, - C1EA50471680FE1000A21259 /* md5 */, - C1EA50491680FE1000A21259 /* messages */, - C1EA504B1680FE1000A21259 /* network_utilities.o */, - C1EA504C1680FE1000A21259 /* processors */, - C1EA504F1680FE1000A21259 /* sha1 */, - C1EA50511680FE1000A21259 /* uri.o */, - ); - path = src; - sourceTree = ""; - }; - C1EA50451680FE1000A21259 /* base64 */ = { - isa = PBXGroup; - children = ( - C1EA50461680FE1000A21259 /* base64.o */, - ); - path = base64; - sourceTree = ""; - }; - C1EA50471680FE1000A21259 /* md5 */ = { - isa = PBXGroup; - children = ( - C1EA50481680FE1000A21259 /* md5.o */, - ); - path = md5; - sourceTree = ""; - }; - C1EA50491680FE1000A21259 /* messages */ = { - isa = PBXGroup; - children = ( - C1EA504A1680FE1000A21259 /* data.o */, - ); - path = messages; - sourceTree = ""; - }; - C1EA504C1680FE1000A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA504D1680FE1000A21259 /* hybi_header.o */, - C1EA504E1680FE1000A21259 /* hybi_util.o */, - ); - path = processors; - sourceTree = ""; - }; - C1EA504F1680FE1000A21259 /* sha1 */ = { - isa = PBXGroup; - children = ( - C1EA50501680FE1000A21259 /* sha1.o */, - ); - path = sha1; - sourceTree = ""; - }; - C1EA50521680FE1000A21259 /* proto */ = { - isa = PBXGroup; - children = ( - C1EA50531680FE1000A21259 /* ripple.pb.cc */, - C1EA50541680FE1000A21259 /* ripple.pb.h */, - C1EA50551680FE1000A21259 /* ripple.pb.o */, - ); - path = proto; - sourceTree = ""; - }; - C1EA50571680FE1000A21259 /* deploy */ = { - isa = PBXGroup; - children = ( - C1EA50581680FE1000A21259 /* cointoss.nsi */, - C1EA50591680FE1000A21259 /* newcoind.cfg */, - C1EA505A1680FE1100A21259 /* start CoinToss.bat */, - C1EA505B1680FE1100A21259 /* validators.txt */, - ); - name = deploy; - path = ../../deploy; - sourceTree = ""; - }; - C1EA505D1680FE1100A21259 /* NewCoin */ = { - isa = PBXGroup; - children = ( - C1EA505E1680FE1100A21259 /* NewCoin */, - C1EA50611680FE1100A21259 /* NewCoin.xcodeproj */, - ); - name = NewCoin; - sourceTree = SOURCE_ROOT; - }; - C1EA505E1680FE1100A21259 /* NewCoin */ = { - isa = PBXGroup; - children = ( - C1EA505F1680FE1100A21259 /* main.cpp */, - C1EA50601680FE1100A21259 /* NewCoin.1 */, - ); - path = NewCoin; - sourceTree = ""; - }; - C1EA50621680FE1100A21259 /* Products */ = { - isa = PBXGroup; - name = Products; - sourceTree = ""; - }; - C1EA50681680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA50691680FE1100A21259 /* .bin */, - C1EA50711680FE1100A21259 /* async */, - C1EA507B1680FE1100A21259 /* buster */, - C1EA64A61680FE1300A21259 /* extend */, - C1EA64AB1680FE1300A21259 /* webpack */, - C1EA6E6C1680FE1500A21259 /* ws */, - ); - name = node_modules; - path = ../../node_modules; - sourceTree = ""; - }; - C1EA50691680FE1100A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA506A1680FE1100A21259 /* buster */, - C1EA506B1680FE1100A21259 /* buster-autotest */, - C1EA506C1680FE1100A21259 /* buster-server */, - C1EA506D1680FE1100A21259 /* buster-static */, - C1EA506E1680FE1100A21259 /* buster-test */, - C1EA506F1680FE1100A21259 /* webpack */, - C1EA50701680FE1100A21259 /* wscat */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA50711680FE1100A21259 /* async */ = { - isa = PBXGroup; - children = ( - C1EA50721680FE1100A21259 /* .gitmodules */, - C1EA50731680FE1100A21259 /* .npmignore */, - C1EA50741680FE1100A21259 /* index.js */, - C1EA50751680FE1100A21259 /* lib */, - C1EA50771680FE1100A21259 /* LICENSE */, - C1EA50781680FE1100A21259 /* Makefile */, - C1EA50791680FE1100A21259 /* package.json */, - C1EA507A1680FE1100A21259 /* README.md */, - ); - path = async; - sourceTree = ""; - }; - C1EA50751680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA50761680FE1100A21259 /* async.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA507B1680FE1100A21259 /* buster */ = { - isa = PBXGroup; - children = ( - C1EA507C1680FE1100A21259 /* .travis.yml */, - C1EA507D1680FE1100A21259 /* bin */, - C1EA50841680FE1100A21259 /* build */, - C1EA50851680FE1100A21259 /* jsTestDriver.conf */, - C1EA50861680FE1100A21259 /* lib */, - C1EA508E1680FE1100A21259 /* node_modules */, - C1EA649B1680FE1300A21259 /* package.json */, - C1EA649C1680FE1300A21259 /* Readme.md */, - C1EA649D1680FE1300A21259 /* resources */, - C1EA649F1680FE1300A21259 /* run-tests */, - C1EA64A01680FE1300A21259 /* script */, - C1EA64A21680FE1300A21259 /* test */, - ); - path = buster; - sourceTree = ""; - }; - C1EA507D1680FE1100A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA507E1680FE1100A21259 /* buster */, - C1EA507F1680FE1100A21259 /* buster-autotest */, - C1EA50801680FE1100A21259 /* buster-headless */, - C1EA50811680FE1100A21259 /* buster-server */, - C1EA50821680FE1100A21259 /* buster-static */, - C1EA50831680FE1100A21259 /* buster-test */, - ); - path = bin; - sourceTree = ""; - }; - C1EA50861680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA50871680FE1100A21259 /* buster */, - C1EA508D1680FE1100A21259 /* buster.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA50871680FE1100A21259 /* buster */ = { - isa = PBXGroup; - children = ( - C1EA50881680FE1100A21259 /* browser-wiring.js */, - C1EA50891680FE1100A21259 /* buster-wiring.js */, - C1EA508A1680FE1100A21259 /* capture-server-wiring.js */, - C1EA508B1680FE1100A21259 /* framework-extension.js */, - C1EA508C1680FE1100A21259 /* wiring-extension.js */, - ); - path = buster; - sourceTree = ""; - }; - C1EA508E1680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA508F1680FE1100A21259 /* .bin */, - C1EA50911680FE1100A21259 /* buster-assertions */, - C1EA50A51680FE1100A21259 /* buster-autotest */, - C1EA511A1680FE1100A21259 /* buster-core */, - C1EA51701680FE1100A21259 /* buster-evented-logger */, - C1EA51851680FE1100A21259 /* buster-format */, - C1EA51911680FE1100A21259 /* buster-server-cli */, - C1EA58AD1680FE1200A21259 /* buster-sinon */, - C1EA58B71680FE1200A21259 /* buster-static */, - C1EA5A291680FE1200A21259 /* buster-syntax */, - C1EA5DB11680FE1200A21259 /* buster-test */, - C1EA60FB1680FE1300A21259 /* buster-test-cli */, - C1EA643D1680FE1300A21259 /* sinon */, - C1EA647C1680FE1300A21259 /* when */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA508F1680FE1100A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA50901680FE1100A21259 /* buster-static */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA50911680FE1100A21259 /* buster-assertions */ = { - isa = PBXGroup; - children = ( - C1EA50921680FE1100A21259 /* .travis.yml */, - C1EA50931680FE1100A21259 /* AUTHORS */, - C1EA50941680FE1100A21259 /* jsl.conf */, - C1EA50951680FE1100A21259 /* jsTestDriver.conf */, - C1EA50961680FE1100A21259 /* lib */, - C1EA509A1680FE1100A21259 /* LICENSE */, - C1EA509B1680FE1100A21259 /* package.json */, - C1EA509C1680FE1100A21259 /* Readme.md */, - C1EA509D1680FE1100A21259 /* run-tests */, - C1EA509E1680FE1100A21259 /* test */, - ); - path = "buster-assertions"; - sourceTree = ""; - }; - C1EA50961680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA50971680FE1100A21259 /* buster-assertions */, - C1EA50991680FE1100A21259 /* buster-assertions.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA50971680FE1100A21259 /* buster-assertions */ = { - isa = PBXGroup; - children = ( - C1EA50981680FE1100A21259 /* expect.js */, - ); - path = "buster-assertions"; - sourceTree = ""; - }; - C1EA509E1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA509F1680FE1100A21259 /* buster-assertions */, - C1EA50A11680FE1100A21259 /* buster-assertions-test.js */, - C1EA50A21680FE1100A21259 /* buster-assertions-util-test.js */, - C1EA50A31680FE1100A21259 /* test-helper.js */, - C1EA50A41680FE1100A21259 /* test.html */, - ); - path = test; - sourceTree = ""; - }; - C1EA509F1680FE1100A21259 /* buster-assertions */ = { - isa = PBXGroup; - children = ( - C1EA50A01680FE1100A21259 /* expect-test.js */, - ); - path = "buster-assertions"; - sourceTree = ""; - }; - C1EA50A51680FE1100A21259 /* buster-autotest */ = { - isa = PBXGroup; - children = ( - C1EA50A61680FE1100A21259 /* .npmignore */, - C1EA50A71680FE1100A21259 /* .travis.yml */, - C1EA50A81680FE1100A21259 /* buster.js */, - C1EA50A91680FE1100A21259 /* lib */, - C1EA50AC1680FE1100A21259 /* node_modules */, - C1EA51161680FE1100A21259 /* package.json */, - C1EA51171680FE1100A21259 /* Readme.md */, - C1EA51181680FE1100A21259 /* test */, - ); - path = "buster-autotest"; - sourceTree = ""; - }; - C1EA50A91680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA50AA1680FE1100A21259 /* buster-autotest.js */, - C1EA50AB1680FE1100A21259 /* on-interrupt.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA50AC1680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA50AD1680FE1100A21259 /* buster-glob */, - C1EA50F71680FE1100A21259 /* fs-watch-tree */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA50AD1680FE1100A21259 /* buster-glob */ = { - isa = PBXGroup; - children = ( - C1EA50AE1680FE1100A21259 /* .npmignore */, - C1EA50AF1680FE1100A21259 /* .travis.yml */, - C1EA50B01680FE1100A21259 /* autolint.json */, - C1EA50B11680FE1100A21259 /* buster.js */, - C1EA50B21680FE1100A21259 /* lib */, - C1EA50B41680FE1100A21259 /* node_modules */, - C1EA50F31680FE1100A21259 /* package.json */, - C1EA50F41680FE1100A21259 /* Readme.md */, - C1EA50F51680FE1100A21259 /* test */, - ); - path = "buster-glob"; - sourceTree = ""; - }; - C1EA50B21680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA50B31680FE1100A21259 /* buster-glob.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA50B41680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA50B51680FE1100A21259 /* glob */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA50B51680FE1100A21259 /* glob */ = { - isa = PBXGroup; - children = ( - C1EA50B61680FE1100A21259 /* .npmignore */, - C1EA50B71680FE1100A21259 /* .travis.yml */, - C1EA50B81680FE1100A21259 /* examples */, - C1EA50BB1680FE1100A21259 /* glob.js */, - C1EA50BC1680FE1100A21259 /* LICENSE */, - C1EA50BD1680FE1100A21259 /* node_modules */, - C1EA50E81680FE1100A21259 /* package.json */, - C1EA50E91680FE1100A21259 /* README.md */, - C1EA50EA1680FE1100A21259 /* test */, - ); - path = glob; - sourceTree = ""; - }; - C1EA50B81680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA50B91680FE1100A21259 /* g.js */, - C1EA50BA1680FE1100A21259 /* usr-local.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA50BD1680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA50BE1680FE1100A21259 /* graceful-fs */, - C1EA50C61680FE1100A21259 /* inherits */, - C1EA50CA1680FE1100A21259 /* minimatch */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA50BE1680FE1100A21259 /* graceful-fs */ = { - isa = PBXGroup; - children = ( - C1EA50BF1680FE1100A21259 /* .npmignore */, - C1EA50C01680FE1100A21259 /* graceful-fs.js */, - C1EA50C11680FE1100A21259 /* LICENSE */, - C1EA50C21680FE1100A21259 /* package.json */, - C1EA50C31680FE1100A21259 /* README.md */, - C1EA50C41680FE1100A21259 /* test */, - ); - path = "graceful-fs"; - sourceTree = ""; - }; - C1EA50C41680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA50C51680FE1100A21259 /* open.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA50C61680FE1100A21259 /* inherits */ = { - isa = PBXGroup; - children = ( - C1EA50C71680FE1100A21259 /* inherits.js */, - C1EA50C81680FE1100A21259 /* package.json */, - C1EA50C91680FE1100A21259 /* README.md */, - ); - path = inherits; - sourceTree = ""; - }; - C1EA50CA1680FE1100A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA50CB1680FE1100A21259 /* .travis.yml */, - C1EA50CC1680FE1100A21259 /* LICENSE */, - C1EA50CD1680FE1100A21259 /* minimatch.js */, - C1EA50CE1680FE1100A21259 /* node_modules */, - C1EA50E11680FE1100A21259 /* package.json */, - C1EA50E21680FE1100A21259 /* README.md */, - C1EA50E31680FE1100A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA50CE1680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA50CF1680FE1100A21259 /* lru-cache */, - C1EA50D91680FE1100A21259 /* sigmund */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA50CF1680FE1100A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA50D01680FE1100A21259 /* .npmignore */, - C1EA50D11680FE1100A21259 /* AUTHORS */, - C1EA50D21680FE1100A21259 /* lib */, - C1EA50D41680FE1100A21259 /* LICENSE */, - C1EA50D51680FE1100A21259 /* package.json */, - C1EA50D61680FE1100A21259 /* README.md */, - C1EA50D71680FE1100A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA50D21680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA50D31680FE1100A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA50D71680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA50D81680FE1100A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA50D91680FE1100A21259 /* sigmund */ = { - isa = PBXGroup; - children = ( - C1EA50DA1680FE1100A21259 /* bench.js */, - C1EA50DB1680FE1100A21259 /* LICENSE */, - C1EA50DC1680FE1100A21259 /* package.json */, - C1EA50DD1680FE1100A21259 /* README.md */, - C1EA50DE1680FE1100A21259 /* sigmund.js */, - C1EA50DF1680FE1100A21259 /* test */, - ); - path = sigmund; - sourceTree = ""; - }; - C1EA50DF1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA50E01680FE1100A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA50E31680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA50E41680FE1100A21259 /* basic.js */, - C1EA50E51680FE1100A21259 /* brace-expand.js */, - C1EA50E61680FE1100A21259 /* caching.js */, - C1EA50E71680FE1100A21259 /* defaults.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA50EA1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA50EB1680FE1100A21259 /* 00-setup.js */, - C1EA50EC1680FE1100A21259 /* bash-comparison.js */, - C1EA50ED1680FE1100A21259 /* cwd-test.js */, - C1EA50EE1680FE1100A21259 /* mark.js */, - C1EA50EF1680FE1100A21259 /* pause-resume.js */, - C1EA50F01680FE1100A21259 /* root-nomount.js */, - C1EA50F11680FE1100A21259 /* root.js */, - C1EA50F21680FE1100A21259 /* zz-cleanup.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA50F51680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA50F61680FE1100A21259 /* buster-glob-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA50F71680FE1100A21259 /* fs-watch-tree */ = { - isa = PBXGroup; - children = ( - C1EA50F81680FE1100A21259 /* .npmignore */, - C1EA50F91680FE1100A21259 /* .travis.yml */, - C1EA50FA1680FE1100A21259 /* buster.js */, - C1EA50FB1680FE1100A21259 /* check-fs-watch-results */, - C1EA51001680FE1100A21259 /* check-fs-watch.js */, - C1EA51011680FE1100A21259 /* lib */, - C1EA510B1680FE1100A21259 /* package.json */, - C1EA510C1680FE1100A21259 /* README.md */, - C1EA510D1680FE1100A21259 /* test */, - ); - path = "fs-watch-tree"; - sourceTree = ""; - }; - C1EA50FB1680FE1100A21259 /* check-fs-watch-results */ = { - isa = PBXGroup; - children = ( - C1EA50FC1680FE1100A21259 /* centos.txt */, - C1EA50FD1680FE1100A21259 /* osx.txt */, - C1EA50FE1680FE1100A21259 /* ubuntu.txt */, - C1EA50FF1680FE1100A21259 /* windows.txt */, - ); - path = "check-fs-watch-results"; - sourceTree = ""; - }; - C1EA51011680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA51021680FE1100A21259 /* async.js */, - C1EA51031680FE1100A21259 /* change-tracker.js */, - C1EA51041680FE1100A21259 /* fs-filtered.js */, - C1EA51051680FE1100A21259 /* fs-watch-tree.js */, - C1EA51061680FE1100A21259 /* fs-watcher.js */, - C1EA51071680FE1100A21259 /* tree-watcher.js */, - C1EA51081680FE1100A21259 /* walk-tree.js */, - C1EA51091680FE1100A21259 /* watch-tree-generic.js */, - C1EA510A1680FE1100A21259 /* watch-tree-unix.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA510D1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA510E1680FE1100A21259 /* change-tracker-test.js */, - C1EA510F1680FE1100A21259 /* fs-filtered-test.js */, - C1EA51101680FE1100A21259 /* fs-watcher-test.js */, - C1EA51111680FE1100A21259 /* helper.js */, - C1EA51121680FE1100A21259 /* os-watch-helper.js */, - C1EA51131680FE1100A21259 /* tree-watcher-test.js */, - C1EA51141680FE1100A21259 /* walk-tree-test.js */, - C1EA51151680FE1100A21259 /* watch-tree-unix-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA51181680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA51191680FE1100A21259 /* buster-autotest-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA511A1680FE1100A21259 /* buster-core */ = { - isa = PBXGroup; - children = ( - C1EA511B1680FE1100A21259 /* .travis.yml */, - C1EA511C1680FE1100A21259 /* AUTHORS */, - C1EA511D1680FE1100A21259 /* jsTestDriver.conf */, - C1EA511E1680FE1100A21259 /* lib */, - C1EA51221680FE1100A21259 /* LICENSE */, - C1EA51231680FE1100A21259 /* package.json */, - C1EA51241680FE1100A21259 /* Readme.md */, - C1EA51251680FE1100A21259 /* run-tests */, - C1EA51261680FE1100A21259 /* test */, - C1EA51291680FE1100A21259 /* vendor */, - ); - path = "buster-core"; - sourceTree = ""; - }; - C1EA511E1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA511F1680FE1100A21259 /* buster-core.js */, - C1EA51201680FE1100A21259 /* buster-event-emitter.js */, - C1EA51211680FE1100A21259 /* define-version-getter.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA51261680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA51271680FE1100A21259 /* buster-core-test.js */, - C1EA51281680FE1100A21259 /* buster-event-emitter-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA51291680FE1100A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA512A1680FE1100A21259 /* buster-util */, - C1EA51361680FE1100A21259 /* sinon */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA512A1680FE1100A21259 /* buster-util */ = { - isa = PBXGroup; - children = ( - C1EA512B1680FE1100A21259 /* AUTHORS */, - C1EA512C1680FE1100A21259 /* jstdhtml */, - C1EA512D1680FE1100A21259 /* lib */, - C1EA51341680FE1100A21259 /* LICENSE */, - C1EA51351680FE1100A21259 /* package.json */, - ); - path = "buster-util"; - sourceTree = ""; - }; - C1EA512D1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA512E1680FE1100A21259 /* buster-util */, - C1EA51331680FE1100A21259 /* buster-util.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA512E1680FE1100A21259 /* buster-util */ = { - isa = PBXGroup; - children = ( - C1EA512F1680FE1100A21259 /* jstestdriver-shim.js */, - C1EA51301680FE1100A21259 /* req-res.js */, - C1EA51311680FE1100A21259 /* runner.js */, - C1EA51321680FE1100A21259 /* test-case.js */, - ); - path = "buster-util"; - sourceTree = ""; - }; - C1EA51361680FE1100A21259 /* sinon */ = { - isa = PBXGroup; - children = ( - C1EA51371680FE1100A21259 /* .npmignore */, - C1EA51381680FE1100A21259 /* .travis.yml */, - C1EA51391680FE1100A21259 /* AUTHORS */, - C1EA513A1680FE1100A21259 /* build */, - C1EA513B1680FE1100A21259 /* Changelog.txt */, - C1EA513C1680FE1100A21259 /* jsl.conf */, - C1EA513D1680FE1100A21259 /* lib */, - C1EA51511680FE1100A21259 /* LICENSE */, - C1EA51521680FE1100A21259 /* package.json */, - C1EA51531680FE1100A21259 /* README.md */, - C1EA51541680FE1100A21259 /* test */, - ); - path = sinon; - sourceTree = ""; - }; - C1EA513D1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA513E1680FE1100A21259 /* sinon */, - C1EA51501680FE1100A21259 /* sinon.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA513E1680FE1100A21259 /* sinon */ = { - isa = PBXGroup; - children = ( - C1EA513F1680FE1100A21259 /* assert.js */, - C1EA51401680FE1100A21259 /* collection.js */, - C1EA51411680FE1100A21259 /* match.js */, - C1EA51421680FE1100A21259 /* mock.js */, - C1EA51431680FE1100A21259 /* sandbox.js */, - C1EA51441680FE1100A21259 /* spy.js */, - C1EA51451680FE1100A21259 /* stub.js */, - C1EA51461680FE1100A21259 /* test.js */, - C1EA51471680FE1100A21259 /* test_case.js */, - C1EA51481680FE1100A21259 /* util */, - ); - path = sinon; - sourceTree = ""; - }; - C1EA51481680FE1100A21259 /* util */ = { - isa = PBXGroup; - children = ( - C1EA51491680FE1100A21259 /* event.js */, - C1EA514A1680FE1100A21259 /* fake_server.js */, - C1EA514B1680FE1100A21259 /* fake_server_with_clock.js */, - C1EA514C1680FE1100A21259 /* fake_timers.js */, - C1EA514D1680FE1100A21259 /* fake_xml_http_request.js */, - C1EA514E1680FE1100A21259 /* timers_ie.js */, - C1EA514F1680FE1100A21259 /* xhr_ie.js */, - ); - path = util; - sourceTree = ""; - }; - C1EA51541680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA51551680FE1100A21259 /* node */, - C1EA51571680FE1100A21259 /* resources */, - C1EA51591680FE1100A21259 /* rhino */, - C1EA515C1680FE1100A21259 /* runner.js */, - C1EA515D1680FE1100A21259 /* sinon */, - C1EA516D1680FE1100A21259 /* sinon-dist.html */, - C1EA516E1680FE1100A21259 /* sinon.html */, - C1EA516F1680FE1100A21259 /* sinon_test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA51551680FE1100A21259 /* node */ = { - isa = PBXGroup; - children = ( - C1EA51561680FE1100A21259 /* run.js */, - ); - path = node; - sourceTree = ""; - }; - C1EA51571680FE1100A21259 /* resources */ = { - isa = PBXGroup; - children = ( - C1EA51581680FE1100A21259 /* xhr_target.txt */, - ); - path = resources; - sourceTree = ""; - }; - C1EA51591680FE1100A21259 /* rhino */ = { - isa = PBXGroup; - children = ( - C1EA515A1680FE1100A21259 /* env.rhino.1.2.js */, - C1EA515B1680FE1100A21259 /* run.js */, - ); - path = rhino; - sourceTree = ""; - }; - C1EA515D1680FE1100A21259 /* sinon */ = { - isa = PBXGroup; - children = ( - C1EA515E1680FE1100A21259 /* assert_test.js */, - C1EA515F1680FE1100A21259 /* collection_test.js */, - C1EA51601680FE1100A21259 /* match_test.js */, - C1EA51611680FE1100A21259 /* mock_test.js */, - C1EA51621680FE1100A21259 /* sandbox_test.js */, - C1EA51631680FE1100A21259 /* spy_test.js */, - C1EA51641680FE1100A21259 /* stub_test.js */, - C1EA51651680FE1100A21259 /* test_case_test.js */, - C1EA51661680FE1100A21259 /* test_test.js */, - C1EA51671680FE1100A21259 /* util */, - ); - path = sinon; - sourceTree = ""; - }; - C1EA51671680FE1100A21259 /* util */ = { - isa = PBXGroup; - children = ( - C1EA51681680FE1100A21259 /* event_test.js */, - C1EA51691680FE1100A21259 /* fake_server_test.js */, - C1EA516A1680FE1100A21259 /* fake_server_with_clock_test.js */, - C1EA516B1680FE1100A21259 /* fake_timers_test.js */, - C1EA516C1680FE1100A21259 /* fake_xml_http_request_test.js */, - ); - path = util; - sourceTree = ""; - }; - C1EA51701680FE1100A21259 /* buster-evented-logger */ = { - isa = PBXGroup; - children = ( - C1EA51711680FE1100A21259 /* .travis.yml */, - C1EA51721680FE1100A21259 /* AUTHORS */, - C1EA51731680FE1100A21259 /* jsTestDriver.conf */, - C1EA51741680FE1100A21259 /* lib */, - C1EA51761680FE1100A21259 /* LICENSE */, - C1EA51771680FE1100A21259 /* package.json */, - C1EA51781680FE1100A21259 /* Readme.md */, - C1EA51791680FE1100A21259 /* run-tests */, - C1EA517A1680FE1100A21259 /* test */, - C1EA517D1680FE1100A21259 /* vendor */, - ); - path = "buster-evented-logger"; - sourceTree = ""; - }; - C1EA51741680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA51751680FE1100A21259 /* buster-evented-logger.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA517A1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA517B1680FE1100A21259 /* buster-evented-logger-test.js */, - C1EA517C1680FE1100A21259 /* test.html */, - ); - path = test; - sourceTree = ""; - }; - C1EA517D1680FE1100A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA517E1680FE1100A21259 /* json */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA517E1680FE1100A21259 /* json */ = { - isa = PBXGroup; - children = ( - C1EA517F1680FE1100A21259 /* cycle.js */, - C1EA51801680FE1100A21259 /* json.js */, - C1EA51811680FE1100A21259 /* json2.js */, - C1EA51821680FE1100A21259 /* json_parse.js */, - C1EA51831680FE1100A21259 /* json_parse_state.js */, - C1EA51841680FE1100A21259 /* README */, - ); - path = json; - sourceTree = ""; - }; - C1EA51851680FE1100A21259 /* buster-format */ = { - isa = PBXGroup; - children = ( - C1EA51861680FE1100A21259 /* .travis.yml */, - C1EA51871680FE1100A21259 /* AUTHORS */, - C1EA51881680FE1100A21259 /* jsTestDriver.conf */, - C1EA51891680FE1100A21259 /* lib */, - C1EA518B1680FE1100A21259 /* LICENSE */, - C1EA518C1680FE1100A21259 /* package.json */, - C1EA518D1680FE1100A21259 /* Readme.md */, - C1EA518E1680FE1100A21259 /* run-tests */, - C1EA518F1680FE1100A21259 /* test */, - ); - path = "buster-format"; - sourceTree = ""; - }; - C1EA51891680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA518A1680FE1100A21259 /* buster-format.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA518F1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA51901680FE1100A21259 /* buster-format-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA51911680FE1100A21259 /* buster-server-cli */ = { - isa = PBXGroup; - children = ( - C1EA51921680FE1100A21259 /* .npmignore */, - C1EA51931680FE1100A21259 /* .travis.yml */, - C1EA51941680FE1100A21259 /* AUTHORS */, - C1EA51951680FE1100A21259 /* autolint.js */, - C1EA51961680FE1100A21259 /* lib */, - C1EA51991680FE1100A21259 /* LICENSE */, - C1EA519A1680FE1100A21259 /* node_modules */, - C1EA58881680FE1200A21259 /* package.json */, - C1EA58891680FE1200A21259 /* public */, - C1EA58A51680FE1200A21259 /* Readme.md */, - C1EA58A61680FE1200A21259 /* run-tests.js */, - C1EA58A71680FE1200A21259 /* test */, - C1EA58AA1680FE1200A21259 /* views */, - ); - path = "buster-server-cli"; - sourceTree = ""; - }; - C1EA51961680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA51971680FE1100A21259 /* middleware.js */, - C1EA51981680FE1100A21259 /* server-cli.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA519A1680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA519B1680FE1100A21259 /* buster-cli */, - C1EA52A41680FE1100A21259 /* ejs */, - C1EA52D41680FE1100A21259 /* paperboy */, - C1EA52E31680FE1100A21259 /* phantom */, - C1EA57251680FE1200A21259 /* platform */, - C1EA572F1680FE1200A21259 /* ramp */, - C1EA57B11680FE1200A21259 /* ramp-resources */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA519B1680FE1100A21259 /* buster-cli */ = { - isa = PBXGroup; - children = ( - C1EA519C1680FE1100A21259 /* .npmignore */, - C1EA519D1680FE1100A21259 /* .travis.yml */, - C1EA519E1680FE1100A21259 /* autolint.json */, - C1EA519F1680FE1100A21259 /* lib */, - C1EA51A71680FE1100A21259 /* node_modules */, - C1EA529E1680FE1100A21259 /* package.json */, - C1EA529F1680FE1100A21259 /* Readme.md */, - C1EA52A01680FE1100A21259 /* run-tests */, - C1EA52A11680FE1100A21259 /* test */, - ); - path = "buster-cli"; - sourceTree = ""; - }; - C1EA519F1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA51A01680FE1100A21259 /* buster-cli */, - C1EA51A51680FE1100A21259 /* buster-cli.js */, - C1EA51A61680FE1100A21259 /* test-helper.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA51A01680FE1100A21259 /* buster-cli */ = { - isa = PBXGroup; - children = ( - C1EA51A11680FE1100A21259 /* args.js */, - C1EA51A21680FE1100A21259 /* config.js */, - C1EA51A31680FE1100A21259 /* help.js */, - C1EA51A41680FE1100A21259 /* logger.js */, - ); - path = "buster-cli"; - sourceTree = ""; - }; - C1EA51A71680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA51A81680FE1100A21259 /* buster-configuration */, - C1EA523E1680FE1100A21259 /* buster-terminal */, - C1EA524E1680FE1100A21259 /* minimatch */, - C1EA526C1680FE1100A21259 /* posix-argv-parser */, - C1EA52851680FE1100A21259 /* rimraf */, - C1EA52921680FE1100A21259 /* stream-logger */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA51A81680FE1100A21259 /* buster-configuration */ = { - isa = PBXGroup; - children = ( - C1EA51A91680FE1100A21259 /* .travis.yml */, - C1EA51AA1680FE1100A21259 /* autolint.json */, - C1EA51AB1680FE1100A21259 /* buster.js */, - C1EA51AC1680FE1100A21259 /* lib */, - C1EA51B11680FE1100A21259 /* node_modules */, - C1EA522E1680FE1100A21259 /* package.json */, - C1EA522F1680FE1100A21259 /* Readme.md */, - C1EA52301680FE1100A21259 /* test */, - C1EA523D1680FE1100A21259 /* todo.org */, - ); - path = "buster-configuration"; - sourceTree = ""; - }; - C1EA51AC1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA51AD1680FE1100A21259 /* buster-configuration.js */, - C1EA51AE1680FE1100A21259 /* file-loader.js */, - C1EA51AF1680FE1100A21259 /* group.js */, - C1EA51B01680FE1100A21259 /* util.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA51B11680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA51B21680FE1100A21259 /* glob */, - C1EA51D21680FE1100A21259 /* ramp-resources */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA51B21680FE1100A21259 /* glob */ = { - isa = PBXGroup; - children = ( - C1EA51B31680FE1100A21259 /* .npmignore */, - C1EA51B41680FE1100A21259 /* .travis.yml */, - C1EA51B51680FE1100A21259 /* examples */, - C1EA51B81680FE1100A21259 /* glob.js */, - C1EA51B91680FE1100A21259 /* LICENSE */, - C1EA51BA1680FE1100A21259 /* node_modules */, - C1EA51C71680FE1100A21259 /* package.json */, - C1EA51C81680FE1100A21259 /* README.md */, - C1EA51C91680FE1100A21259 /* test */, - ); - path = glob; - sourceTree = ""; - }; - C1EA51B51680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA51B61680FE1100A21259 /* g.js */, - C1EA51B71680FE1100A21259 /* usr-local.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA51BA1680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA51BB1680FE1100A21259 /* graceful-fs */, - C1EA51C31680FE1100A21259 /* inherits */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA51BB1680FE1100A21259 /* graceful-fs */ = { - isa = PBXGroup; - children = ( - C1EA51BC1680FE1100A21259 /* .npmignore */, - C1EA51BD1680FE1100A21259 /* graceful-fs.js */, - C1EA51BE1680FE1100A21259 /* LICENSE */, - C1EA51BF1680FE1100A21259 /* package.json */, - C1EA51C01680FE1100A21259 /* README.md */, - C1EA51C11680FE1100A21259 /* test */, - ); - path = "graceful-fs"; - sourceTree = ""; - }; - C1EA51C11680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA51C21680FE1100A21259 /* open.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA51C31680FE1100A21259 /* inherits */ = { - isa = PBXGroup; - children = ( - C1EA51C41680FE1100A21259 /* inherits.js */, - C1EA51C51680FE1100A21259 /* package.json */, - C1EA51C61680FE1100A21259 /* README.md */, - ); - path = inherits; - sourceTree = ""; - }; - C1EA51C91680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA51CA1680FE1100A21259 /* 00-setup.js */, - C1EA51CB1680FE1100A21259 /* bash-comparison.js */, - C1EA51CC1680FE1100A21259 /* cwd-test.js */, - C1EA51CD1680FE1100A21259 /* mark.js */, - C1EA51CE1680FE1100A21259 /* pause-resume.js */, - C1EA51CF1680FE1100A21259 /* root-nomount.js */, - C1EA51D01680FE1100A21259 /* root.js */, - C1EA51D11680FE1100A21259 /* zz-cleanup.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA51D21680FE1100A21259 /* ramp-resources */ = { - isa = PBXGroup; - children = ( - C1EA51D31680FE1100A21259 /* .npmignore */, - C1EA51D41680FE1100A21259 /* .travis.yml */, - C1EA51D51680FE1100A21259 /* autolint.js */, - C1EA51D61680FE1100A21259 /* buster.js */, - C1EA51D71680FE1100A21259 /* examples */, - C1EA51E31680FE1100A21259 /* lib */, - C1EA51F11680FE1100A21259 /* node_modules */, - C1EA521A1680FE1100A21259 /* package.json */, - C1EA521B1680FE1100A21259 /* Readme.md */, - C1EA521C1680FE1100A21259 /* test */, - ); - path = "ramp-resources"; - sourceTree = ""; - }; - C1EA51D71680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA51D81680FE1100A21259 /* webserver */, - ); - path = examples; - sourceTree = ""; - }; - C1EA51D81680FE1100A21259 /* webserver */ = { - isa = PBXGroup; - children = ( - C1EA51D91680FE1100A21259 /* fixtures */, - C1EA51DE1680FE1100A21259 /* medium.json */, - C1EA51DF1680FE1100A21259 /* publish.js */, - C1EA51E01680FE1100A21259 /* README.md */, - C1EA51E11680FE1100A21259 /* server.js */, - C1EA51E21680FE1100A21259 /* small.json */, - ); - path = webserver; - sourceTree = ""; - }; - C1EA51D91680FE1100A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA51DA1680FE1100A21259 /* 1.png */, - C1EA51DB1680FE1100A21259 /* 2.html */, - C1EA51DC1680FE1100A21259 /* 3.txt */, - C1EA51DD1680FE1100A21259 /* 4.tgz */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA51E31680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA51E41680FE1100A21259 /* file-etag.js */, - C1EA51E51680FE1100A21259 /* http-proxy.js */, - C1EA51E61680FE1100A21259 /* invalid-error.js */, - C1EA51E71680FE1100A21259 /* load-path.js */, - C1EA51E81680FE1100A21259 /* processors */, - C1EA51EA1680FE1100A21259 /* ramp-resources.js */, - C1EA51EB1680FE1100A21259 /* resource-combiner.js */, - C1EA51EC1680FE1100A21259 /* resource-file-resolver.js */, - C1EA51ED1680FE1100A21259 /* resource-middleware.js */, - C1EA51EE1680FE1100A21259 /* resource-set-cache.js */, - C1EA51EF1680FE1100A21259 /* resource-set.js */, - C1EA51F01680FE1100A21259 /* resource.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA51E81680FE1100A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA51E91680FE1100A21259 /* iife.js */, - ); - path = processors; - sourceTree = ""; - }; - C1EA51F11680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA51F21680FE1100A21259 /* buster-glob */, - C1EA51FD1680FE1100A21259 /* mime */, - C1EA52061680FE1100A21259 /* minimatch */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA51F21680FE1100A21259 /* buster-glob */ = { - isa = PBXGroup; - children = ( - C1EA51F31680FE1100A21259 /* .npmignore */, - C1EA51F41680FE1100A21259 /* .travis.yml */, - C1EA51F51680FE1100A21259 /* autolint.json */, - C1EA51F61680FE1100A21259 /* buster.js */, - C1EA51F71680FE1100A21259 /* lib */, - C1EA51F91680FE1100A21259 /* package.json */, - C1EA51FA1680FE1100A21259 /* Readme.md */, - C1EA51FB1680FE1100A21259 /* test */, - ); - path = "buster-glob"; - sourceTree = ""; - }; - C1EA51F71680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA51F81680FE1100A21259 /* buster-glob.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA51FB1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA51FC1680FE1100A21259 /* buster-glob-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA51FD1680FE1100A21259 /* mime */ = { - isa = PBXGroup; - children = ( - C1EA51FE1680FE1100A21259 /* LICENSE */, - C1EA51FF1680FE1100A21259 /* mime.js */, - C1EA52001680FE1100A21259 /* package.json */, - C1EA52011680FE1100A21259 /* README.md */, - C1EA52021680FE1100A21259 /* test.js */, - C1EA52031680FE1100A21259 /* types */, - ); - path = mime; - sourceTree = ""; - }; - C1EA52031680FE1100A21259 /* types */ = { - isa = PBXGroup; - children = ( - C1EA52041680FE1100A21259 /* mime.types */, - C1EA52051680FE1100A21259 /* node.types */, - ); - path = types; - sourceTree = ""; - }; - C1EA52061680FE1100A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA52071680FE1100A21259 /* .travis.yml */, - C1EA52081680FE1100A21259 /* LICENSE */, - C1EA52091680FE1100A21259 /* minimatch.js */, - C1EA520A1680FE1100A21259 /* node_modules */, - C1EA52141680FE1100A21259 /* package.json */, - C1EA52151680FE1100A21259 /* README.md */, - C1EA52161680FE1100A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA520A1680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA520B1680FE1100A21259 /* lru-cache */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA520B1680FE1100A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA520C1680FE1100A21259 /* .npmignore */, - C1EA520D1680FE1100A21259 /* lib */, - C1EA520F1680FE1100A21259 /* LICENSE */, - C1EA52101680FE1100A21259 /* package.json */, - C1EA52111680FE1100A21259 /* README.md */, - C1EA52121680FE1100A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA520D1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA520E1680FE1100A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA52121680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA52131680FE1100A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA52161680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA52171680FE1100A21259 /* basic.js */, - C1EA52181680FE1100A21259 /* brace-expand.js */, - C1EA52191680FE1100A21259 /* caching.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA521C1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA521D1680FE1100A21259 /* fixtures */, - C1EA52251680FE1100A21259 /* http-proxy-test.js */, - C1EA52261680FE1100A21259 /* load-path-test.js */, - C1EA52271680FE1100A21259 /* processors */, - C1EA52291680FE1100A21259 /* resource-middleware-test.js */, - C1EA522A1680FE1100A21259 /* resource-set-cache-test.js */, - C1EA522B1680FE1100A21259 /* resource-set-test.js */, - C1EA522C1680FE1100A21259 /* resource-test.js */, - C1EA522D1680FE1100A21259 /* test-helper.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA521D1680FE1100A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA521E1680FE1100A21259 /* bar.js */, - C1EA521F1680FE1100A21259 /* foo.js */, - C1EA52201680FE1100A21259 /* other-test */, - C1EA52231680FE1100A21259 /* test */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA52201680FE1100A21259 /* other-test */ = { - isa = PBXGroup; - children = ( - C1EA52211680FE1100A21259 /* other.js */, - C1EA52221680FE1100A21259 /* some-test.js */, - ); - path = "other-test"; - sourceTree = ""; - }; - C1EA52231680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA52241680FE1100A21259 /* my-testish.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA52271680FE1100A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA52281680FE1100A21259 /* iife-processor-test.js */, - ); - path = processors; - sourceTree = ""; - }; - C1EA52301680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA52311680FE1100A21259 /* buster-configuration-test.js */, - C1EA52321680FE1100A21259 /* file-loader-test.js */, - C1EA52331680FE1100A21259 /* fixtures */, - C1EA523B1680FE1100A21259 /* group-test.js */, - C1EA523C1680FE1100A21259 /* test-helper.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA52331680FE1100A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA52341680FE1100A21259 /* bar.js */, - C1EA52351680FE1100A21259 /* dups */, - C1EA52381680FE1100A21259 /* foo.js */, - C1EA52391680FE1100A21259 /* test */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA52351680FE1100A21259 /* dups */ = { - isa = PBXGroup; - children = ( - C1EA52361680FE1100A21259 /* file */, - C1EA52371680FE1100A21259 /* file.js */, - ); - path = dups; - sourceTree = ""; - }; - C1EA52391680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA523A1680FE1100A21259 /* my-testish.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA523E1680FE1100A21259 /* buster-terminal */ = { - isa = PBXGroup; - children = ( - C1EA523F1680FE1100A21259 /* .travis.yml */, - C1EA52401680FE1100A21259 /* AUTHORS */, - C1EA52411680FE1100A21259 /* autolint.json */, - C1EA52421680FE1100A21259 /* buster.js */, - C1EA52431680FE1100A21259 /* lib */, - C1EA52471680FE1100A21259 /* package.json */, - C1EA52481680FE1100A21259 /* Readme.md */, - C1EA52491680FE1100A21259 /* test */, - ); - path = "buster-terminal"; - sourceTree = ""; - }; - C1EA52431680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA52441680FE1100A21259 /* buster-terminal.js */, - C1EA52451680FE1100A21259 /* matrix.js */, - C1EA52461680FE1100A21259 /* relative-grid.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA52491680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA524A1680FE1100A21259 /* buster-terminal-test.js */, - C1EA524B1680FE1100A21259 /* helper.js */, - C1EA524C1680FE1100A21259 /* matrix-test.js */, - C1EA524D1680FE1100A21259 /* relative-grid-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA524E1680FE1100A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA524F1680FE1100A21259 /* .travis.yml */, - C1EA52501680FE1100A21259 /* LICENSE */, - C1EA52511680FE1100A21259 /* minimatch.js */, - C1EA52521680FE1100A21259 /* node_modules */, - C1EA52651680FE1100A21259 /* package.json */, - C1EA52661680FE1100A21259 /* README.md */, - C1EA52671680FE1100A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA52521680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA52531680FE1100A21259 /* lru-cache */, - C1EA525D1680FE1100A21259 /* sigmund */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA52531680FE1100A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA52541680FE1100A21259 /* .npmignore */, - C1EA52551680FE1100A21259 /* AUTHORS */, - C1EA52561680FE1100A21259 /* lib */, - C1EA52581680FE1100A21259 /* LICENSE */, - C1EA52591680FE1100A21259 /* package.json */, - C1EA525A1680FE1100A21259 /* README.md */, - C1EA525B1680FE1100A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA52561680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA52571680FE1100A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA525B1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA525C1680FE1100A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA525D1680FE1100A21259 /* sigmund */ = { - isa = PBXGroup; - children = ( - C1EA525E1680FE1100A21259 /* bench.js */, - C1EA525F1680FE1100A21259 /* LICENSE */, - C1EA52601680FE1100A21259 /* package.json */, - C1EA52611680FE1100A21259 /* README.md */, - C1EA52621680FE1100A21259 /* sigmund.js */, - C1EA52631680FE1100A21259 /* test */, - ); - path = sigmund; - sourceTree = ""; - }; - C1EA52631680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA52641680FE1100A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA52671680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA52681680FE1100A21259 /* basic.js */, - C1EA52691680FE1100A21259 /* brace-expand.js */, - C1EA526A1680FE1100A21259 /* caching.js */, - C1EA526B1680FE1100A21259 /* defaults.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA526C1680FE1100A21259 /* posix-argv-parser */ = { - isa = PBXGroup; - children = ( - C1EA526D1680FE1100A21259 /* .npmignore */, - C1EA526E1680FE1100A21259 /* .travis.yml */, - C1EA526F1680FE1100A21259 /* autolint.js */, - C1EA52701680FE1100A21259 /* buster.js */, - C1EA52711680FE1100A21259 /* lib */, - C1EA527A1680FE1100A21259 /* LICENSE */, - C1EA527B1680FE1100A21259 /* package.json */, - C1EA527C1680FE1100A21259 /* Readme.md */, - C1EA527D1680FE1100A21259 /* test */, - ); - path = "posix-argv-parser"; - sourceTree = ""; - }; - C1EA52711680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA52721680FE1100A21259 /* argument.js */, - C1EA52731680FE1100A21259 /* operand.js */, - C1EA52741680FE1100A21259 /* option.js */, - C1EA52751680FE1100A21259 /* parser.js */, - C1EA52761680FE1100A21259 /* posix-argv-parser.js */, - C1EA52771680FE1100A21259 /* shorthand.js */, - C1EA52781680FE1100A21259 /* types.js */, - C1EA52791680FE1100A21259 /* validators.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA527D1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA527E1680FE1100A21259 /* operand-test.js */, - C1EA527F1680FE1100A21259 /* option-test.js */, - C1EA52801680FE1100A21259 /* parser-test.js */, - C1EA52811680FE1100A21259 /* posix-argv-parser-test.js */, - C1EA52821680FE1100A21259 /* shorthand-test.js */, - C1EA52831680FE1100A21259 /* types-test.js */, - C1EA52841680FE1100A21259 /* validators-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA52851680FE1100A21259 /* rimraf */ = { - isa = PBXGroup; - children = ( - C1EA52861680FE1100A21259 /* AUTHORS */, - C1EA52871680FE1100A21259 /* fiber.js */, - C1EA52881680FE1100A21259 /* LICENSE */, - C1EA52891680FE1100A21259 /* package.json */, - C1EA528A1680FE1100A21259 /* README.md */, - C1EA528B1680FE1100A21259 /* rimraf.js */, - C1EA528C1680FE1100A21259 /* test */, - ); - path = rimraf; - sourceTree = ""; - }; - C1EA528C1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA528D1680FE1100A21259 /* run.sh */, - C1EA528E1680FE1100A21259 /* setup.sh */, - C1EA528F1680FE1100A21259 /* test-async.js */, - C1EA52901680FE1100A21259 /* test-fiber.js */, - C1EA52911680FE1100A21259 /* test-sync.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA52921680FE1100A21259 /* stream-logger */ = { - isa = PBXGroup; - children = ( - C1EA52931680FE1100A21259 /* .npmignore */, - C1EA52941680FE1100A21259 /* .travis.yml */, - C1EA52951680FE1100A21259 /* autolint.json */, - C1EA52961680FE1100A21259 /* buster.js */, - C1EA52971680FE1100A21259 /* lib */, - C1EA52991680FE1100A21259 /* LICENSE */, - C1EA529A1680FE1100A21259 /* package.json */, - C1EA529B1680FE1100A21259 /* Readme.md */, - C1EA529C1680FE1100A21259 /* test */, - ); - path = "stream-logger"; - sourceTree = ""; - }; - C1EA52971680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA52981680FE1100A21259 /* stream-logger.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA529C1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA529D1680FE1100A21259 /* stream-logger-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA52A11680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA52A21680FE1100A21259 /* buster-cli-test.js */, - C1EA52A31680FE1100A21259 /* buster.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA52A41680FE1100A21259 /* ejs */ = { - isa = PBXGroup; - children = ( - C1EA52A51680FE1100A21259 /* .gitmodules */, - C1EA52A61680FE1100A21259 /* .npmignore */, - C1EA52A71680FE1100A21259 /* benchmark.js */, - C1EA52A81680FE1100A21259 /* ejs.js */, - C1EA52A91680FE1100A21259 /* ejs.min.js */, - C1EA52AA1680FE1100A21259 /* examples */, - C1EA52AE1680FE1100A21259 /* History.md */, - C1EA52AF1680FE1100A21259 /* index.js */, - C1EA52B01680FE1100A21259 /* lib */, - C1EA52B41680FE1100A21259 /* Makefile */, - C1EA52B51680FE1100A21259 /* package.json */, - C1EA52B61680FE1100A21259 /* Readme.md */, - C1EA52B71680FE1100A21259 /* support */, - C1EA52D21680FE1100A21259 /* test */, - ); - path = ejs; - sourceTree = ""; - }; - C1EA52AA1680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA52AB1680FE1100A21259 /* client.html */, - C1EA52AC1680FE1100A21259 /* list.ejs */, - C1EA52AD1680FE1100A21259 /* list.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA52B01680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA52B11680FE1100A21259 /* ejs.js */, - C1EA52B21680FE1100A21259 /* filters.js */, - C1EA52B31680FE1100A21259 /* utils.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA52B71680FE1100A21259 /* support */ = { - isa = PBXGroup; - children = ( - C1EA52B81680FE1100A21259 /* compile.js */, - C1EA52B91680FE1100A21259 /* expresso */, - ); - path = support; - sourceTree = ""; - }; - C1EA52B91680FE1100A21259 /* expresso */ = { - isa = PBXGroup; - children = ( - C1EA52BA1680FE1100A21259 /* .gitmodules */, - C1EA52BB1680FE1100A21259 /* .npmignore */, - C1EA52BC1680FE1100A21259 /* bin */, - C1EA52BE1680FE1100A21259 /* docs */, - C1EA52C51680FE1100A21259 /* History.md */, - C1EA52C61680FE1100A21259 /* lib */, - C1EA52C91680FE1100A21259 /* Makefile */, - C1EA52CA1680FE1100A21259 /* package.json */, - C1EA52CB1680FE1100A21259 /* Readme.md */, - C1EA52CC1680FE1100A21259 /* test */, - ); - path = expresso; - sourceTree = ""; - }; - C1EA52BC1680FE1100A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA52BD1680FE1100A21259 /* expresso */, - ); - path = bin; - sourceTree = ""; - }; - C1EA52BE1680FE1100A21259 /* docs */ = { - isa = PBXGroup; - children = ( - C1EA52BF1680FE1100A21259 /* api.html */, - C1EA52C01680FE1100A21259 /* index.html */, - C1EA52C11680FE1100A21259 /* index.md */, - C1EA52C21680FE1100A21259 /* layout */, - ); - path = docs; - sourceTree = ""; - }; - C1EA52C21680FE1100A21259 /* layout */ = { - isa = PBXGroup; - children = ( - C1EA52C31680FE1100A21259 /* foot.html */, - C1EA52C41680FE1100A21259 /* head.html */, - ); - path = layout; - sourceTree = ""; - }; - C1EA52C61680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA52C71680FE1100A21259 /* bar.js */, - C1EA52C81680FE1100A21259 /* foo.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA52CC1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA52CD1680FE1100A21259 /* assert.test.js */, - C1EA52CE1680FE1100A21259 /* async.test.js */, - C1EA52CF1680FE1100A21259 /* bar.test.js */, - C1EA52D01680FE1100A21259 /* foo.test.js */, - C1EA52D11680FE1100A21259 /* http.test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA52D21680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA52D31680FE1100A21259 /* ejs.test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA52D41680FE1100A21259 /* paperboy */ = { - isa = PBXGroup; - children = ( - C1EA52D51680FE1100A21259 /* .npmignore */, - C1EA52D61680FE1100A21259 /* example */, - C1EA52DC1680FE1100A21259 /* index.js */, - C1EA52DD1680FE1100A21259 /* lib */, - C1EA52DF1680FE1100A21259 /* LICENSE.txt */, - C1EA52E01680FE1100A21259 /* package.json */, - C1EA52E11680FE1100A21259 /* README.md */, - C1EA52E21680FE1100A21259 /* seed.yml */, - ); - path = paperboy; - sourceTree = ""; - }; - C1EA52D61680FE1100A21259 /* example */ = { - isa = PBXGroup; - children = ( - C1EA52D71680FE1100A21259 /* basic.js */, - C1EA52D81680FE1100A21259 /* webroot */, - ); - path = example; - sourceTree = ""; - }; - C1EA52D81680FE1100A21259 /* webroot */ = { - isa = PBXGroup; - children = ( - C1EA52D91680FE1100A21259 /* img */, - C1EA52DB1680FE1100A21259 /* index.html */, - ); - path = webroot; - sourceTree = ""; - }; - C1EA52D91680FE1100A21259 /* img */ = { - isa = PBXGroup; - children = ( - C1EA52DA1680FE1100A21259 /* paperboy.jpg */, - ); - path = img; - sourceTree = ""; - }; - C1EA52DD1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA52DE1680FE1100A21259 /* paperboy.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA52E31680FE1100A21259 /* phantom */ = { - isa = PBXGroup; - children = ( - C1EA52E41680FE1100A21259 /* Cakefile */, - C1EA52E51680FE1100A21259 /* index.html */, - C1EA52E61680FE1100A21259 /* node_modules */, - C1EA57191680FE1100A21259 /* package.json */, - C1EA571A1680FE1100A21259 /* phantom.coffee */, - C1EA571B1680FE1100A21259 /* phantom.js */, - C1EA571C1680FE1100A21259 /* README.markdown */, - C1EA571D1680FE1100A21259 /* shim.coffee */, - C1EA571E1680FE1100A21259 /* shim.js */, - C1EA571F1680FE1200A21259 /* test */, - ); - path = phantom; - sourceTree = ""; - }; - C1EA52E61680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA52E71680FE1100A21259 /* .bin */, - C1EA52E91680FE1100A21259 /* dnode */, - C1EA554B1680FE1100A21259 /* dnode-protocol */, - C1EA55931680FE1100A21259 /* express */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA52E71680FE1100A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA52E81680FE1100A21259 /* express */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA52E91680FE1100A21259 /* dnode */ = { - isa = PBXGroup; - children = ( - C1EA52EA1680FE1100A21259 /* .travis.yml */, - C1EA52EB1680FE1100A21259 /* bin */, - C1EA52ED1680FE1100A21259 /* browser */, - C1EA52F01680FE1100A21259 /* examples */, - C1EA53181680FE1100A21259 /* index.js */, - C1EA53191680FE1100A21259 /* lib */, - C1EA531B1680FE1100A21259 /* LICENSE */, - C1EA531C1680FE1100A21259 /* node_modules */, - C1EA55271680FE1100A21259 /* package.json */, - C1EA55281680FE1100A21259 /* README.markdown */, - C1EA55291680FE1100A21259 /* test */, - C1EA55461680FE1100A21259 /* testling */, - ); - path = dnode; - sourceTree = ""; - }; - C1EA52EB1680FE1100A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA52EC1680FE1100A21259 /* bundle.js */, - ); - path = bin; - sourceTree = ""; - }; - C1EA52ED1680FE1100A21259 /* browser */ = { - isa = PBXGroup; - children = ( - C1EA52EE1680FE1100A21259 /* bundle.js */, - C1EA52EF1680FE1100A21259 /* index.js */, - ); - path = browser; - sourceTree = ""; - }; - C1EA52F01680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA52F11680FE1100A21259 /* auth */, - C1EA52F51680FE1100A21259 /* bidirectional */, - C1EA52F81680FE1100A21259 /* chat */, - C1EA52FF1680FE1100A21259 /* https */, - C1EA53021680FE1100A21259 /* nested.js */, - C1EA53031680FE1100A21259 /* perf */, - C1EA53061680FE1100A21259 /* saturate */, - C1EA53091680FE1100A21259 /* simple */, - C1EA530C1680FE1100A21259 /* web-browserify */, - C1EA530F1680FE1100A21259 /* web-connect */, - C1EA53121680FE1100A21259 /* web-express */, - C1EA53151680FE1100A21259 /* web-http */, - ); - path = examples; - sourceTree = ""; - }; - C1EA52F11680FE1100A21259 /* auth */ = { - isa = PBXGroup; - children = ( - C1EA52F21680FE1100A21259 /* client.js */, - C1EA52F31680FE1100A21259 /* quotes.json */, - C1EA52F41680FE1100A21259 /* server.js */, - ); - path = auth; - sourceTree = ""; - }; - C1EA52F51680FE1100A21259 /* bidirectional */ = { - isa = PBXGroup; - children = ( - C1EA52F61680FE1100A21259 /* client.js */, - C1EA52F71680FE1100A21259 /* server.js */, - ); - path = bidirectional; - sourceTree = ""; - }; - C1EA52F81680FE1100A21259 /* chat */ = { - isa = PBXGroup; - children = ( - C1EA52F91680FE1100A21259 /* chat.css */, - C1EA52FA1680FE1100A21259 /* entry.js */, - C1EA52FB1680FE1100A21259 /* index.html */, - C1EA52FC1680FE1100A21259 /* INSTALL.txt */, - C1EA52FD1680FE1100A21259 /* package.json */, - C1EA52FE1680FE1100A21259 /* server.js */, - ); - path = chat; - sourceTree = ""; - }; - C1EA52FF1680FE1100A21259 /* https */ = { - isa = PBXGroup; - children = ( - C1EA53001680FE1100A21259 /* index.html */, - C1EA53011680FE1100A21259 /* server.js */, - ); - path = https; - sourceTree = ""; - }; - C1EA53031680FE1100A21259 /* perf */ = { - isa = PBXGroup; - children = ( - C1EA53041680FE1100A21259 /* client.js */, - C1EA53051680FE1100A21259 /* emitter.js */, - ); - path = perf; - sourceTree = ""; - }; - C1EA53061680FE1100A21259 /* saturate */ = { - isa = PBXGroup; - children = ( - C1EA53071680FE1100A21259 /* index.html */, - C1EA53081680FE1100A21259 /* saturate.js */, - ); - path = saturate; - sourceTree = ""; - }; - C1EA53091680FE1100A21259 /* simple */ = { - isa = PBXGroup; - children = ( - C1EA530A1680FE1100A21259 /* client.js */, - C1EA530B1680FE1100A21259 /* server.js */, - ); - path = simple; - sourceTree = ""; - }; - C1EA530C1680FE1100A21259 /* web-browserify */ = { - isa = PBXGroup; - children = ( - C1EA530D1680FE1100A21259 /* index.html */, - C1EA530E1680FE1100A21259 /* server.js */, - ); - path = "web-browserify"; - sourceTree = ""; - }; - C1EA530F1680FE1100A21259 /* web-connect */ = { - isa = PBXGroup; - children = ( - C1EA53101680FE1100A21259 /* index.html */, - C1EA53111680FE1100A21259 /* server.js */, - ); - path = "web-connect"; - sourceTree = ""; - }; - C1EA53121680FE1100A21259 /* web-express */ = { - isa = PBXGroup; - children = ( - C1EA53131680FE1100A21259 /* index.html */, - C1EA53141680FE1100A21259 /* server.js */, - ); - path = "web-express"; - sourceTree = ""; - }; - C1EA53151680FE1100A21259 /* web-http */ = { - isa = PBXGroup; - children = ( - C1EA53161680FE1100A21259 /* index.html */, - C1EA53171680FE1100A21259 /* server.js */, - ); - path = "web-http"; - sourceTree = ""; - }; - C1EA53191680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA531A1680FE1100A21259 /* stream_socketio.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA531C1680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA531D1680FE1100A21259 /* dnode-protocol */, - C1EA53531680FE1100A21259 /* jsonify */, - C1EA535D1680FE1100A21259 /* lazy */, - C1EA53761680FE1100A21259 /* socket.io */, - C1EA53E81680FE1100A21259 /* socket.io-client */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA531D1680FE1100A21259 /* dnode-protocol */ = { - isa = PBXGroup; - children = ( - C1EA531E1680FE1100A21259 /* .npmignore */, - C1EA531F1680FE1100A21259 /* .travis.yml */, - C1EA53201680FE1100A21259 /* index.js */, - C1EA53211680FE1100A21259 /* LICENSE */, - C1EA53221680FE1100A21259 /* node_modules */, - C1EA53481680FE1100A21259 /* package.json */, - C1EA53491680FE1100A21259 /* README.markdown */, - C1EA534A1680FE1100A21259 /* test */, - C1EA53511680FE1100A21259 /* testling */, - ); - path = "dnode-protocol"; - sourceTree = ""; - }; - C1EA53221680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA53231680FE1100A21259 /* traverse */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA53231680FE1100A21259 /* traverse */ = { - isa = PBXGroup; - children = ( - C1EA53241680FE1100A21259 /* .npmignore */, - C1EA53251680FE1100A21259 /* .travis.yml */, - C1EA53261680FE1100A21259 /* examples */, - C1EA532C1680FE1100A21259 /* fail.js */, - C1EA532D1680FE1100A21259 /* index.js */, - C1EA532E1680FE1100A21259 /* LICENSE */, - C1EA532F1680FE1100A21259 /* package.json */, - C1EA53301680FE1100A21259 /* README.markdown */, - C1EA53311680FE1100A21259 /* test */, - C1EA53461680FE1100A21259 /* testling */, - ); - path = traverse; - sourceTree = ""; - }; - C1EA53261680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA53271680FE1100A21259 /* json.js */, - C1EA53281680FE1100A21259 /* leaves.js */, - C1EA53291680FE1100A21259 /* negative.js */, - C1EA532A1680FE1100A21259 /* scrub.js */, - C1EA532B1680FE1100A21259 /* stringify.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA53311680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA53321680FE1100A21259 /* circular.js */, - C1EA53331680FE1100A21259 /* date.js */, - C1EA53341680FE1100A21259 /* equal.js */, - C1EA53351680FE1100A21259 /* error.js */, - C1EA53361680FE1100A21259 /* has.js */, - C1EA53371680FE1100A21259 /* instance.js */, - C1EA53381680FE1100A21259 /* interface.js */, - C1EA53391680FE1100A21259 /* json.js */, - C1EA533A1680FE1100A21259 /* keys.js */, - C1EA533B1680FE1100A21259 /* leaves.js */, - C1EA533C1680FE1100A21259 /* lib */, - C1EA533E1680FE1100A21259 /* mutability.js */, - C1EA533F1680FE1100A21259 /* negative.js */, - C1EA53401680FE1100A21259 /* obj.js */, - C1EA53411680FE1100A21259 /* siblings.js */, - C1EA53421680FE1100A21259 /* stop.js */, - C1EA53431680FE1100A21259 /* stringify.js */, - C1EA53441680FE1100A21259 /* subexpr.js */, - C1EA53451680FE1100A21259 /* super_deep.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA533C1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA533D1680FE1100A21259 /* deep_equal.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA53461680FE1100A21259 /* testling */ = { - isa = PBXGroup; - children = ( - C1EA53471680FE1100A21259 /* leaves.js */, - ); - path = testling; - sourceTree = ""; - }; - C1EA534A1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA534B1680FE1100A21259 /* args.js */, - C1EA534C1680FE1100A21259 /* circular.js */, - C1EA534D1680FE1100A21259 /* fn.js */, - C1EA534E1680FE1100A21259 /* proto.js */, - C1EA534F1680FE1100A21259 /* scrub.js */, - C1EA53501680FE1100A21259 /* store.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA53511680FE1100A21259 /* testling */ = { - isa = PBXGroup; - children = ( - C1EA53521680FE1100A21259 /* test.sh */, - ); - path = testling; - sourceTree = ""; - }; - C1EA53531680FE1100A21259 /* jsonify */ = { - isa = PBXGroup; - children = ( - C1EA53541680FE1100A21259 /* index.js */, - C1EA53551680FE1100A21259 /* lib */, - C1EA53581680FE1100A21259 /* package.json */, - C1EA53591680FE1100A21259 /* README.markdown */, - C1EA535A1680FE1100A21259 /* test */, - ); - path = jsonify; - sourceTree = ""; - }; - C1EA53551680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA53561680FE1100A21259 /* parse.js */, - C1EA53571680FE1100A21259 /* stringify.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA535A1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA535B1680FE1100A21259 /* parse.js */, - C1EA535C1680FE1100A21259 /* stringify.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA535D1680FE1100A21259 /* lazy */ = { - isa = PBXGroup; - children = ( - C1EA535E1680FE1100A21259 /* .npmignore */, - C1EA535F1680FE1100A21259 /* lazy.js */, - C1EA53601680FE1100A21259 /* package.json */, - C1EA53611680FE1100A21259 /* readme.txt */, - C1EA53621680FE1100A21259 /* test */, - ); - path = lazy; - sourceTree = ""; - }; - C1EA53621680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA53631680FE1100A21259 /* bucket.js */, - C1EA53641680FE1100A21259 /* complex.js */, - C1EA53651680FE1100A21259 /* custom.js */, - C1EA53661680FE1100A21259 /* em.js */, - C1EA53671680FE1100A21259 /* filter.js */, - C1EA53681680FE1100A21259 /* foldr.js */, - C1EA53691680FE1100A21259 /* forEach.js */, - C1EA536A1680FE1100A21259 /* head.js */, - C1EA536B1680FE1100A21259 /* join.js */, - C1EA536C1680FE1100A21259 /* lines.js */, - C1EA536D1680FE1100A21259 /* map.js */, - C1EA536E1680FE1100A21259 /* pipe.js */, - C1EA536F1680FE1100A21259 /* product.js */, - C1EA53701680FE1100A21259 /* range.js */, - C1EA53711680FE1100A21259 /* skip.js */, - C1EA53721680FE1100A21259 /* sum.js */, - C1EA53731680FE1100A21259 /* tail.js */, - C1EA53741680FE1100A21259 /* take.js */, - C1EA53751680FE1100A21259 /* takeWhile.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA53761680FE1100A21259 /* socket.io */ = { - isa = PBXGroup; - children = ( - C1EA53771680FE1100A21259 /* .npmignore */, - C1EA53781680FE1100A21259 /* benchmarks */, - C1EA537C1680FE1100A21259 /* History.md */, - C1EA537D1680FE1100A21259 /* index.js */, - C1EA537E1680FE1100A21259 /* lib */, - C1EA539B1680FE1100A21259 /* Makefile */, - C1EA539C1680FE1100A21259 /* node_modules */, - C1EA53E61680FE1100A21259 /* package.json */, - C1EA53E71680FE1100A21259 /* Readme.md */, - ); - path = socket.io; - sourceTree = ""; - }; - C1EA53781680FE1100A21259 /* benchmarks */ = { - isa = PBXGroup; - children = ( - C1EA53791680FE1100A21259 /* decode.bench.js */, - C1EA537A1680FE1100A21259 /* encode.bench.js */, - C1EA537B1680FE1100A21259 /* runner.js */, - ); - path = benchmarks; - sourceTree = ""; - }; - C1EA537E1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA537F1680FE1100A21259 /* logger.js */, - C1EA53801680FE1100A21259 /* manager.js */, - C1EA53811680FE1100A21259 /* namespace.js */, - C1EA53821680FE1100A21259 /* parser.js */, - C1EA53831680FE1100A21259 /* socket.io.js */, - C1EA53841680FE1100A21259 /* socket.js */, - C1EA53851680FE1100A21259 /* static.js */, - C1EA53861680FE1100A21259 /* store.js */, - C1EA53871680FE1100A21259 /* stores */, - C1EA538A1680FE1100A21259 /* transport.js */, - C1EA538B1680FE1100A21259 /* transports */, - C1EA539A1680FE1100A21259 /* util.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA53871680FE1100A21259 /* stores */ = { - isa = PBXGroup; - children = ( - C1EA53881680FE1100A21259 /* memory.js */, - C1EA53891680FE1100A21259 /* redis.js */, - ); - path = stores; - sourceTree = ""; - }; - C1EA538B1680FE1100A21259 /* transports */ = { - isa = PBXGroup; - children = ( - C1EA538C1680FE1100A21259 /* flashsocket.js */, - C1EA538D1680FE1100A21259 /* htmlfile.js */, - C1EA538E1680FE1100A21259 /* http-polling.js */, - C1EA538F1680FE1100A21259 /* http.js */, - C1EA53901680FE1100A21259 /* index.js */, - C1EA53911680FE1100A21259 /* jsonp-polling.js */, - C1EA53921680FE1100A21259 /* websocket */, - C1EA53981680FE1100A21259 /* websocket.js */, - C1EA53991680FE1100A21259 /* xhr-polling.js */, - ); - path = transports; - sourceTree = ""; - }; - C1EA53921680FE1100A21259 /* websocket */ = { - isa = PBXGroup; - children = ( - C1EA53931680FE1100A21259 /* default.js */, - C1EA53941680FE1100A21259 /* hybi-07-12.js */, - C1EA53951680FE1100A21259 /* hybi-16.js */, - C1EA53961680FE1100A21259 /* hybi-17.js */, - C1EA53971680FE1100A21259 /* index.js */, - ); - path = websocket; - sourceTree = ""; - }; - C1EA539C1680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA539D1680FE1100A21259 /* policyfile */, - C1EA53B01680FE1100A21259 /* redis */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA539D1680FE1100A21259 /* policyfile */ = { - isa = PBXGroup; - children = ( - C1EA539E1680FE1100A21259 /* .npmignore */, - C1EA539F1680FE1100A21259 /* doc */, - C1EA53A11680FE1100A21259 /* examples */, - C1EA53A41680FE1100A21259 /* index.js */, - C1EA53A51680FE1100A21259 /* lib */, - C1EA53A71680FE1100A21259 /* LICENSE */, - C1EA53A81680FE1100A21259 /* Makefile */, - C1EA53A91680FE1100A21259 /* package.json */, - C1EA53AA1680FE1100A21259 /* README.md */, - C1EA53AB1680FE1100A21259 /* tests */, - ); - path = policyfile; - sourceTree = ""; - }; - C1EA539F1680FE1100A21259 /* doc */ = { - isa = PBXGroup; - children = ( - C1EA53A01680FE1100A21259 /* index.html */, - ); - path = doc; - sourceTree = ""; - }; - C1EA53A11680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA53A21680FE1100A21259 /* basic.fallback.js */, - C1EA53A31680FE1100A21259 /* basic.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA53A51680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA53A61680FE1100A21259 /* server.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA53AB1680FE1100A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA53AC1680FE1100A21259 /* ssl */, - C1EA53AF1680FE1100A21259 /* unit.test.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA53AC1680FE1100A21259 /* ssl */ = { - isa = PBXGroup; - children = ( - C1EA53AD1680FE1100A21259 /* ssl.crt */, - C1EA53AE1680FE1100A21259 /* ssl.private.key */, - ); - path = ssl; - sourceTree = ""; - }; - C1EA53B01680FE1100A21259 /* redis */ = { - isa = PBXGroup; - children = ( - C1EA53B11680FE1100A21259 /* changelog.md */, - C1EA53B21680FE1100A21259 /* eval_test.js */, - C1EA53B31680FE1100A21259 /* examples */, - C1EA53C31680FE1100A21259 /* generate_commands.js */, - C1EA53C41680FE1100A21259 /* index.js */, - C1EA53C51680FE1100A21259 /* lib */, - C1EA53CD1680FE1100A21259 /* multi_bench.js */, - C1EA53CE1680FE1100A21259 /* package.json */, - C1EA53CF1680FE1100A21259 /* README.md */, - C1EA53D01680FE1100A21259 /* simple_test.js */, - C1EA53D11680FE1100A21259 /* test.js */, - C1EA53D21680FE1100A21259 /* tests */, - ); - path = redis; - sourceTree = ""; - }; - C1EA53B31680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA53B41680FE1100A21259 /* auth.js */, - C1EA53B51680FE1100A21259 /* backpressure_drain.js */, - C1EA53B61680FE1100A21259 /* extend.js */, - C1EA53B71680FE1100A21259 /* file.js */, - C1EA53B81680FE1100A21259 /* mget.js */, - C1EA53B91680FE1100A21259 /* monitor.js */, - C1EA53BA1680FE1100A21259 /* multi.js */, - C1EA53BB1680FE1100A21259 /* multi2.js */, - C1EA53BC1680FE1100A21259 /* psubscribe.js */, - C1EA53BD1680FE1100A21259 /* pub_sub.js */, - C1EA53BE1680FE1100A21259 /* simple.js */, - C1EA53BF1680FE1100A21259 /* subqueries.js */, - C1EA53C01680FE1100A21259 /* subquery.js */, - C1EA53C11680FE1100A21259 /* unix_socket.js */, - C1EA53C21680FE1100A21259 /* web_server.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA53C51680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA53C61680FE1100A21259 /* commands.js */, - C1EA53C71680FE1100A21259 /* parser */, - C1EA53CA1680FE1100A21259 /* queue.js */, - C1EA53CB1680FE1100A21259 /* to_array.js */, - C1EA53CC1680FE1100A21259 /* util.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA53C71680FE1100A21259 /* parser */ = { - isa = PBXGroup; - children = ( - C1EA53C81680FE1100A21259 /* hiredis.js */, - C1EA53C91680FE1100A21259 /* javascript.js */, - ); - path = parser; - sourceTree = ""; - }; - C1EA53D21680FE1100A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA53D31680FE1100A21259 /* buffer_bench.js */, - C1EA53D41680FE1100A21259 /* reconnect_test.js */, - C1EA53D51680FE1100A21259 /* stress */, - C1EA53E41680FE1100A21259 /* sub_quit_test.js */, - C1EA53E51680FE1100A21259 /* test_start_stop.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA53D51680FE1100A21259 /* stress */ = { - isa = PBXGroup; - children = ( - C1EA53D61680FE1100A21259 /* codec.js */, - C1EA53D71680FE1100A21259 /* pubsub */, - C1EA53DB1680FE1100A21259 /* rpushblpop */, - C1EA53DF1680FE1100A21259 /* speed */, - ); - path = stress; - sourceTree = ""; - }; - C1EA53D71680FE1100A21259 /* pubsub */ = { - isa = PBXGroup; - children = ( - C1EA53D81680FE1100A21259 /* pub.js */, - C1EA53D91680FE1100A21259 /* run */, - C1EA53DA1680FE1100A21259 /* server.js */, - ); - path = pubsub; - sourceTree = ""; - }; - C1EA53DB1680FE1100A21259 /* rpushblpop */ = { - isa = PBXGroup; - children = ( - C1EA53DC1680FE1100A21259 /* pub.js */, - C1EA53DD1680FE1100A21259 /* run */, - C1EA53DE1680FE1100A21259 /* server.js */, - ); - path = rpushblpop; - sourceTree = ""; - }; - C1EA53DF1680FE1100A21259 /* speed */ = { - isa = PBXGroup; - children = ( - C1EA53E01680FE1100A21259 /* 00 */, - C1EA53E11680FE1100A21259 /* plot */, - C1EA53E21680FE1100A21259 /* size-rate.png */, - C1EA53E31680FE1100A21259 /* speed.js */, - ); - path = speed; - sourceTree = ""; - }; - C1EA53E81680FE1100A21259 /* socket.io-client */ = { - isa = PBXGroup; - children = ( - C1EA53E91680FE1100A21259 /* .npmignore */, - C1EA53EA1680FE1100A21259 /* bin */, - C1EA53ED1680FE1100A21259 /* dist */, - C1EA53F31680FE1100A21259 /* History.md */, - C1EA53F41680FE1100A21259 /* lib */, - C1EA54931680FE1100A21259 /* Makefile */, - C1EA54941680FE1100A21259 /* node_modules */, - C1EA551A1680FE1100A21259 /* package.json */, - C1EA551B1680FE1100A21259 /* README.md */, - C1EA551C1680FE1100A21259 /* test */, - ); - path = "socket.io-client"; - sourceTree = ""; - }; - C1EA53EA1680FE1100A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA53EB1680FE1100A21259 /* browserify.js */, - C1EA53EC1680FE1100A21259 /* builder.js */, - ); - path = bin; - sourceTree = ""; - }; - C1EA53ED1680FE1100A21259 /* dist */ = { - isa = PBXGroup; - children = ( - C1EA53EE1680FE1100A21259 /* browserify.js */, - C1EA53EF1680FE1100A21259 /* socket.io.js */, - C1EA53F01680FE1100A21259 /* socket.io.min.js */, - C1EA53F11680FE1100A21259 /* WebSocketMain.swf */, - C1EA53F21680FE1100A21259 /* WebSocketMainInsecure.swf */, - ); - path = dist; - sourceTree = ""; - }; - C1EA53F41680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA53F51680FE1100A21259 /* events.js */, - C1EA53F61680FE1100A21259 /* io.js */, - C1EA53F71680FE1100A21259 /* json.js */, - C1EA53F81680FE1100A21259 /* namespace.js */, - C1EA53F91680FE1100A21259 /* parser.js */, - C1EA53FA1680FE1100A21259 /* socket.js */, - C1EA53FB1680FE1100A21259 /* transport.js */, - C1EA53FC1680FE1100A21259 /* transports */, - C1EA54031680FE1100A21259 /* util.js */, - C1EA54041680FE1100A21259 /* vendor */, - ); - path = lib; - sourceTree = ""; - }; - C1EA53FC1680FE1100A21259 /* transports */ = { - isa = PBXGroup; - children = ( - C1EA53FD1680FE1100A21259 /* flashsocket.js */, - C1EA53FE1680FE1100A21259 /* htmlfile.js */, - C1EA53FF1680FE1100A21259 /* jsonp-polling.js */, - C1EA54001680FE1100A21259 /* websocket.js */, - C1EA54011680FE1100A21259 /* xhr-polling.js */, - C1EA54021680FE1100A21259 /* xhr.js */, - ); - path = transports; - sourceTree = ""; - }; - C1EA54041680FE1100A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA54051680FE1100A21259 /* web-socket-js */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA54051680FE1100A21259 /* web-socket-js */ = { - isa = PBXGroup; - children = ( - C1EA54061680FE1100A21259 /* .npmignore */, - C1EA54071680FE1100A21259 /* flash-src */, - C1EA548D1680FE1100A21259 /* README.md */, - C1EA548E1680FE1100A21259 /* sample.html */, - C1EA548F1680FE1100A21259 /* swfobject.js */, - C1EA54901680FE1100A21259 /* web_socket.js */, - C1EA54911680FE1100A21259 /* WebSocketMain.swf */, - C1EA54921680FE1100A21259 /* WebSocketMainInsecure.zip */, - ); - path = "web-socket-js"; - sourceTree = ""; - }; - C1EA54071680FE1100A21259 /* flash-src */ = { - isa = PBXGroup; - children = ( - C1EA54081680FE1100A21259 /* build.sh */, - C1EA54091680FE1100A21259 /* com */, - C1EA54881680FE1100A21259 /* IWebSocketLogger.as */, - C1EA54891680FE1100A21259 /* WebSocket.as */, - C1EA548A1680FE1100A21259 /* WebSocketEvent.as */, - C1EA548B1680FE1100A21259 /* WebSocketMain.as */, - C1EA548C1680FE1100A21259 /* WebSocketMainInsecure.as */, - ); - path = "flash-src"; - sourceTree = ""; - }; - C1EA54091680FE1100A21259 /* com */ = { - isa = PBXGroup; - children = ( - C1EA540A1680FE1100A21259 /* adobe */, - C1EA540E1680FE1100A21259 /* gsolo */, - C1EA54111680FE1100A21259 /* hurlant */, - ); - path = com; - sourceTree = ""; - }; - C1EA540A1680FE1100A21259 /* adobe */ = { - isa = PBXGroup; - children = ( - C1EA540B1680FE1100A21259 /* net */, - ); - path = adobe; - sourceTree = ""; - }; - C1EA540B1680FE1100A21259 /* net */ = { - isa = PBXGroup; - children = ( - C1EA540C1680FE1100A21259 /* proxies */, - ); - path = net; - sourceTree = ""; - }; - C1EA540C1680FE1100A21259 /* proxies */ = { - isa = PBXGroup; - children = ( - C1EA540D1680FE1100A21259 /* RFC2817Socket.as */, - ); - path = proxies; - sourceTree = ""; - }; - C1EA540E1680FE1100A21259 /* gsolo */ = { - isa = PBXGroup; - children = ( - C1EA540F1680FE1100A21259 /* encryption */, - ); - path = gsolo; - sourceTree = ""; - }; - C1EA540F1680FE1100A21259 /* encryption */ = { - isa = PBXGroup; - children = ( - C1EA54101680FE1100A21259 /* MD5.as */, - ); - path = encryption; - sourceTree = ""; - }; - C1EA54111680FE1100A21259 /* hurlant */ = { - isa = PBXGroup; - children = ( - C1EA54121680FE1100A21259 /* crypto */, - C1EA546E1680FE1100A21259 /* math */, - C1EA54761680FE1100A21259 /* util */, - ); - path = hurlant; - sourceTree = ""; - }; - C1EA54121680FE1100A21259 /* crypto */ = { - isa = PBXGroup; - children = ( - C1EA54131680FE1100A21259 /* cert */, - C1EA54171680FE1100A21259 /* Crypto.as */, - C1EA54181680FE1100A21259 /* hash */, - C1EA54231680FE1100A21259 /* prng */, - C1EA54281680FE1100A21259 /* rsa */, - C1EA542A1680FE1100A21259 /* symmetric */, - C1EA54431680FE1100A21259 /* tests */, - C1EA545B1680FE1100A21259 /* tls */, - ); - path = crypto; - sourceTree = ""; - }; - C1EA54131680FE1100A21259 /* cert */ = { - isa = PBXGroup; - children = ( - C1EA54141680FE1100A21259 /* MozillaRootCertificates.as */, - C1EA54151680FE1100A21259 /* X509Certificate.as */, - C1EA54161680FE1100A21259 /* X509CertificateCollection.as */, - ); - path = cert; - sourceTree = ""; - }; - C1EA54181680FE1100A21259 /* hash */ = { - isa = PBXGroup; - children = ( - C1EA54191680FE1100A21259 /* HMAC.as */, - C1EA541A1680FE1100A21259 /* IHash.as */, - C1EA541B1680FE1100A21259 /* IHMAC.as */, - C1EA541C1680FE1100A21259 /* MAC.as */, - C1EA541D1680FE1100A21259 /* MD2.as */, - C1EA541E1680FE1100A21259 /* MD5.as */, - C1EA541F1680FE1100A21259 /* SHA1.as */, - C1EA54201680FE1100A21259 /* SHA224.as */, - C1EA54211680FE1100A21259 /* SHA256.as */, - C1EA54221680FE1100A21259 /* SHABase.as */, - ); - path = hash; - sourceTree = ""; - }; - C1EA54231680FE1100A21259 /* prng */ = { - isa = PBXGroup; - children = ( - C1EA54241680FE1100A21259 /* ARC4.as */, - C1EA54251680FE1100A21259 /* IPRNG.as */, - C1EA54261680FE1100A21259 /* Random.as */, - C1EA54271680FE1100A21259 /* TLSPRF.as */, - ); - path = prng; - sourceTree = ""; - }; - C1EA54281680FE1100A21259 /* rsa */ = { - isa = PBXGroup; - children = ( - C1EA54291680FE1100A21259 /* RSAKey.as */, - ); - path = rsa; - sourceTree = ""; - }; - C1EA542A1680FE1100A21259 /* symmetric */ = { - isa = PBXGroup; - children = ( - C1EA542B1680FE1100A21259 /* AESKey.as */, - C1EA542C1680FE1100A21259 /* aeskey.pl */, - C1EA542D1680FE1100A21259 /* BlowFishKey.as */, - C1EA542E1680FE1100A21259 /* CBCMode.as */, - C1EA542F1680FE1100A21259 /* CFB8Mode.as */, - C1EA54301680FE1100A21259 /* CFBMode.as */, - C1EA54311680FE1100A21259 /* CTRMode.as */, - C1EA54321680FE1100A21259 /* DESKey.as */, - C1EA54331680FE1100A21259 /* dump.txt */, - C1EA54341680FE1100A21259 /* ECBMode.as */, - C1EA54351680FE1100A21259 /* ICipher.as */, - C1EA54361680FE1100A21259 /* IMode.as */, - C1EA54371680FE1100A21259 /* IPad.as */, - C1EA54381680FE1100A21259 /* IStreamCipher.as */, - C1EA54391680FE1100A21259 /* ISymmetricKey.as */, - C1EA543A1680FE1100A21259 /* IVMode.as */, - C1EA543B1680FE1100A21259 /* NullPad.as */, - C1EA543C1680FE1100A21259 /* OFBMode.as */, - C1EA543D1680FE1100A21259 /* PKCS5.as */, - C1EA543E1680FE1100A21259 /* SimpleIVMode.as */, - C1EA543F1680FE1100A21259 /* SSLPad.as */, - C1EA54401680FE1100A21259 /* TLSPad.as */, - C1EA54411680FE1100A21259 /* TripleDESKey.as */, - C1EA54421680FE1100A21259 /* XTeaKey.as */, - ); - path = symmetric; - sourceTree = ""; - }; - C1EA54431680FE1100A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA54441680FE1100A21259 /* AESKeyTest.as */, - C1EA54451680FE1100A21259 /* ARC4Test.as */, - C1EA54461680FE1100A21259 /* BigIntegerTest.as */, - C1EA54471680FE1100A21259 /* BlowFishKeyTest.as */, - C1EA54481680FE1100A21259 /* CBCModeTest.as */, - C1EA54491680FE1100A21259 /* CFB8ModeTest.as */, - C1EA544A1680FE1100A21259 /* CFBModeTest.as */, - C1EA544B1680FE1100A21259 /* CTRModeTest.as */, - C1EA544C1680FE1100A21259 /* DESKeyTest.as */, - C1EA544D1680FE1100A21259 /* ECBModeTest.as */, - C1EA544E1680FE1100A21259 /* HMACTest.as */, - C1EA544F1680FE1100A21259 /* ITestHarness.as */, - C1EA54501680FE1100A21259 /* MD2Test.as */, - C1EA54511680FE1100A21259 /* MD5Test.as */, - C1EA54521680FE1100A21259 /* OFBModeTest.as */, - C1EA54531680FE1100A21259 /* RSAKeyTest.as */, - C1EA54541680FE1100A21259 /* SHA1Test.as */, - C1EA54551680FE1100A21259 /* SHA224Test.as */, - C1EA54561680FE1100A21259 /* SHA256Test.as */, - C1EA54571680FE1100A21259 /* TestCase.as */, - C1EA54581680FE1100A21259 /* TLSPRFTest.as */, - C1EA54591680FE1100A21259 /* TripleDESKeyTest.as */, - C1EA545A1680FE1100A21259 /* XTeaKeyTest.as */, - ); - path = tests; - sourceTree = ""; - }; - C1EA545B1680FE1100A21259 /* tls */ = { - isa = PBXGroup; - children = ( - C1EA545C1680FE1100A21259 /* BulkCiphers.as */, - C1EA545D1680FE1100A21259 /* CipherSuites.as */, - C1EA545E1680FE1100A21259 /* IConnectionState.as */, - C1EA545F1680FE1100A21259 /* ISecurityParameters.as */, - C1EA54601680FE1100A21259 /* KeyExchanges.as */, - C1EA54611680FE1100A21259 /* MACs.as */, - C1EA54621680FE1100A21259 /* SSLConnectionState.as */, - C1EA54631680FE1100A21259 /* SSLEvent.as */, - C1EA54641680FE1100A21259 /* SSLSecurityParameters.as */, - C1EA54651680FE1100A21259 /* TLSConfig.as */, - C1EA54661680FE1100A21259 /* TLSConnectionState.as */, - C1EA54671680FE1100A21259 /* TLSEngine.as */, - C1EA54681680FE1100A21259 /* TLSError.as */, - C1EA54691680FE1100A21259 /* TLSEvent.as */, - C1EA546A1680FE1100A21259 /* TLSSecurityParameters.as */, - C1EA546B1680FE1100A21259 /* TLSSocket.as */, - C1EA546C1680FE1100A21259 /* TLSSocketEvent.as */, - C1EA546D1680FE1100A21259 /* TLSTest.as */, - ); - path = tls; - sourceTree = ""; - }; - C1EA546E1680FE1100A21259 /* math */ = { - isa = PBXGroup; - children = ( - C1EA546F1680FE1100A21259 /* BarrettReduction.as */, - C1EA54701680FE1100A21259 /* bi_internal.as */, - C1EA54711680FE1100A21259 /* BigInteger.as */, - C1EA54721680FE1100A21259 /* ClassicReduction.as */, - C1EA54731680FE1100A21259 /* IReduction.as */, - C1EA54741680FE1100A21259 /* MontgomeryReduction.as */, - C1EA54751680FE1100A21259 /* NullReduction.as */, - ); - path = math; - sourceTree = ""; - }; - C1EA54761680FE1100A21259 /* util */ = { - isa = PBXGroup; - children = ( - C1EA54771680FE1100A21259 /* ArrayUtil.as */, - C1EA54781680FE1100A21259 /* Base64.as */, - C1EA54791680FE1100A21259 /* der */, - C1EA54861680FE1100A21259 /* Hex.as */, - C1EA54871680FE1100A21259 /* Memory.as */, - ); - path = util; - sourceTree = ""; - }; - C1EA54791680FE1100A21259 /* der */ = { - isa = PBXGroup; - children = ( - C1EA547A1680FE1100A21259 /* ByteString.as */, - C1EA547B1680FE1100A21259 /* DER.as */, - C1EA547C1680FE1100A21259 /* IAsn1Type.as */, - C1EA547D1680FE1100A21259 /* Integer.as */, - C1EA547E1680FE1100A21259 /* ObjectIdentifier.as */, - C1EA547F1680FE1100A21259 /* OID.as */, - C1EA54801680FE1100A21259 /* PEM.as */, - C1EA54811680FE1100A21259 /* PrintableString.as */, - C1EA54821680FE1100A21259 /* Sequence.as */, - C1EA54831680FE1100A21259 /* Set.as */, - C1EA54841680FE1100A21259 /* Type.as */, - C1EA54851680FE1100A21259 /* UTCTime.as */, - ); - path = der; - sourceTree = ""; - }; - C1EA54941680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA54951680FE1100A21259 /* .bin */, - C1EA54971680FE1100A21259 /* uglify-js */, - C1EA54FB1680FE1100A21259 /* websocket-client */, - C1EA55101680FE1100A21259 /* xmlhttprequest */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA54951680FE1100A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA54961680FE1100A21259 /* uglifyjs */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA54971680FE1100A21259 /* uglify-js */ = { - isa = PBXGroup; - children = ( - C1EA54981680FE1100A21259 /* .npmignore */, - C1EA54991680FE1100A21259 /* bin */, - C1EA549B1680FE1100A21259 /* docstyle.css */, - C1EA549C1680FE1100A21259 /* lib */, - C1EA54A01680FE1100A21259 /* package.json */, - C1EA54A11680FE1100A21259 /* README.html */, - C1EA54A21680FE1100A21259 /* README.org */, - C1EA54A31680FE1100A21259 /* test */, - C1EA54F71680FE1100A21259 /* tmp */, - C1EA54FA1680FE1100A21259 /* uglify-js.js */, - ); - path = "uglify-js"; - sourceTree = ""; - }; - C1EA54991680FE1100A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA549A1680FE1100A21259 /* uglifyjs */, - ); - path = bin; - sourceTree = ""; - }; - C1EA549C1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA549D1680FE1100A21259 /* parse-js.js */, - C1EA549E1680FE1100A21259 /* process.js */, - C1EA549F1680FE1100A21259 /* squeeze-more.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA54A31680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA54A41680FE1100A21259 /* beautify.js */, - C1EA54A51680FE1100A21259 /* testparser.js */, - C1EA54A61680FE1100A21259 /* unit */, - ); - path = test; - sourceTree = ""; - }; - C1EA54A61680FE1100A21259 /* unit */ = { - isa = PBXGroup; - children = ( - C1EA54A71680FE1100A21259 /* compress */, - C1EA54F61680FE1100A21259 /* scripts.js */, - ); - path = unit; - sourceTree = ""; - }; - C1EA54A71680FE1100A21259 /* compress */ = { - isa = PBXGroup; - children = ( - C1EA54A81680FE1100A21259 /* expected */, - C1EA54CF1680FE1100A21259 /* test */, - ); - path = compress; - sourceTree = ""; - }; - C1EA54A81680FE1100A21259 /* expected */ = { - isa = PBXGroup; - children = ( - C1EA54A91680FE1100A21259 /* array1.js */, - C1EA54AA1680FE1100A21259 /* array2.js */, - C1EA54AB1680FE1100A21259 /* array3.js */, - C1EA54AC1680FE1100A21259 /* array4.js */, - C1EA54AD1680FE1100A21259 /* assignment.js */, - C1EA54AE1680FE1100A21259 /* concatstring.js */, - C1EA54AF1680FE1100A21259 /* const.js */, - C1EA54B01680FE1100A21259 /* empty-blocks.js */, - C1EA54B11680FE1100A21259 /* forstatement.js */, - C1EA54B21680FE1100A21259 /* if.js */, - C1EA54B31680FE1100A21259 /* ifreturn.js */, - C1EA54B41680FE1100A21259 /* ifreturn2.js */, - C1EA54B51680FE1100A21259 /* issue10.js */, - C1EA54B61680FE1100A21259 /* issue11.js */, - C1EA54B71680FE1100A21259 /* issue13.js */, - C1EA54B81680FE1100A21259 /* issue14.js */, - C1EA54B91680FE1100A21259 /* issue16.js */, - C1EA54BA1680FE1100A21259 /* issue17.js */, - C1EA54BB1680FE1100A21259 /* issue20.js */, - C1EA54BC1680FE1100A21259 /* issue21.js */, - C1EA54BD1680FE1100A21259 /* issue25.js */, - C1EA54BE1680FE1100A21259 /* issue27.js */, - C1EA54BF1680FE1100A21259 /* issue28.js */, - C1EA54C01680FE1100A21259 /* issue29.js */, - C1EA54C11680FE1100A21259 /* issue30.js */, - C1EA54C21680FE1100A21259 /* issue34.js */, - C1EA54C31680FE1100A21259 /* issue4.js */, - C1EA54C41680FE1100A21259 /* issue48.js */, - C1EA54C51680FE1100A21259 /* issue50.js */, - C1EA54C61680FE1100A21259 /* issue53.js */, - C1EA54C71680FE1100A21259 /* issue54.1.js */, - C1EA54C81680FE1100A21259 /* issue68.js */, - C1EA54C91680FE1100A21259 /* issue69.js */, - C1EA54CA1680FE1100A21259 /* issue9.js */, - C1EA54CB1680FE1100A21259 /* mangle.js */, - C1EA54CC1680FE1100A21259 /* strict-equals.js */, - C1EA54CD1680FE1100A21259 /* var.js */, - C1EA54CE1680FE1100A21259 /* with.js */, - ); - path = expected; - sourceTree = ""; - }; - C1EA54CF1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA54D01680FE1100A21259 /* array1.js */, - C1EA54D11680FE1100A21259 /* array2.js */, - C1EA54D21680FE1100A21259 /* array3.js */, - C1EA54D31680FE1100A21259 /* array4.js */, - C1EA54D41680FE1100A21259 /* assignment.js */, - C1EA54D51680FE1100A21259 /* concatstring.js */, - C1EA54D61680FE1100A21259 /* const.js */, - C1EA54D71680FE1100A21259 /* empty-blocks.js */, - C1EA54D81680FE1100A21259 /* forstatement.js */, - C1EA54D91680FE1100A21259 /* if.js */, - C1EA54DA1680FE1100A21259 /* ifreturn.js */, - C1EA54DB1680FE1100A21259 /* ifreturn2.js */, - C1EA54DC1680FE1100A21259 /* issue10.js */, - C1EA54DD1680FE1100A21259 /* issue11.js */, - C1EA54DE1680FE1100A21259 /* issue13.js */, - C1EA54DF1680FE1100A21259 /* issue14.js */, - C1EA54E01680FE1100A21259 /* issue16.js */, - C1EA54E11680FE1100A21259 /* issue17.js */, - C1EA54E21680FE1100A21259 /* issue20.js */, - C1EA54E31680FE1100A21259 /* issue21.js */, - C1EA54E41680FE1100A21259 /* issue25.js */, - C1EA54E51680FE1100A21259 /* issue27.js */, - C1EA54E61680FE1100A21259 /* issue28.js */, - C1EA54E71680FE1100A21259 /* issue29.js */, - C1EA54E81680FE1100A21259 /* issue30.js */, - C1EA54E91680FE1100A21259 /* issue34.js */, - C1EA54EA1680FE1100A21259 /* issue4.js */, - C1EA54EB1680FE1100A21259 /* issue48.js */, - C1EA54EC1680FE1100A21259 /* issue50.js */, - C1EA54ED1680FE1100A21259 /* issue53.js */, - C1EA54EE1680FE1100A21259 /* issue54.1.js */, - C1EA54EF1680FE1100A21259 /* issue68.js */, - C1EA54F01680FE1100A21259 /* issue69.js */, - C1EA54F11680FE1100A21259 /* issue9.js */, - C1EA54F21680FE1100A21259 /* mangle.js */, - C1EA54F31680FE1100A21259 /* strict-equals.js */, - C1EA54F41680FE1100A21259 /* var.js */, - C1EA54F51680FE1100A21259 /* with.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA54F71680FE1100A21259 /* tmp */ = { - isa = PBXGroup; - children = ( - C1EA54F81680FE1100A21259 /* instrument.js */, - C1EA54F91680FE1100A21259 /* instrument2.js */, - ); - path = tmp; - sourceTree = ""; - }; - C1EA54FB1680FE1100A21259 /* websocket-client */ = { - isa = PBXGroup; - children = ( - C1EA54FC1680FE1100A21259 /* examples */, - C1EA55001680FE1100A21259 /* lib */, - C1EA55021680FE1100A21259 /* LICENSE */, - C1EA55031680FE1100A21259 /* Makefile */, - C1EA55041680FE1100A21259 /* new */, - C1EA55051680FE1100A21259 /* old */, - C1EA55061680FE1100A21259 /* package.json */, - C1EA55071680FE1100A21259 /* README.md */, - C1EA55081680FE1100A21259 /* test */, - ); - path = "websocket-client"; - sourceTree = ""; - }; - C1EA54FC1680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA54FD1680FE1100A21259 /* client-unix.js */, - C1EA54FE1680FE1100A21259 /* client.js */, - C1EA54FF1680FE1100A21259 /* server-unix.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA55001680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA55011680FE1100A21259 /* websocket.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA55081680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA55091680FE1100A21259 /* test-basic.js */, - C1EA550A1680FE1100A21259 /* test-client-close.js */, - C1EA550B1680FE1100A21259 /* test-readonly-attrs.js */, - C1EA550C1680FE1100A21259 /* test-ready-state.js */, - C1EA550D1680FE1100A21259 /* test-server-close.js */, - C1EA550E1680FE1100A21259 /* test-unix-send-fd.js */, - C1EA550F1680FE1100A21259 /* test-unix-sockets.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA55101680FE1100A21259 /* xmlhttprequest */ = { - isa = PBXGroup; - children = ( - C1EA55111680FE1100A21259 /* autotest.watchr */, - C1EA55121680FE1100A21259 /* demo.js */, - C1EA55131680FE1100A21259 /* package.json */, - C1EA55141680FE1100A21259 /* README.md */, - C1EA55151680FE1100A21259 /* tests */, - C1EA55191680FE1100A21259 /* XMLHttpRequest.js */, - ); - path = xmlhttprequest; - sourceTree = ""; - }; - C1EA55151680FE1100A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA55161680FE1100A21259 /* test-constants.js */, - C1EA55171680FE1100A21259 /* test-headers.js */, - C1EA55181680FE1100A21259 /* test-request.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA551C1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA551D1680FE1100A21259 /* browserify.js */, - C1EA551E1680FE1100A21259 /* events.test.js */, - C1EA551F1680FE1100A21259 /* io.test.js */, - C1EA55201680FE1100A21259 /* node */, - C1EA55231680FE1100A21259 /* parser.test.js */, - C1EA55241680FE1100A21259 /* socket.test.js */, - C1EA55251680FE1100A21259 /* util.test.js */, - C1EA55261680FE1100A21259 /* worker.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA55201680FE1100A21259 /* node */ = { - isa = PBXGroup; - children = ( - C1EA55211680FE1100A21259 /* builder.common.js */, - C1EA55221680FE1100A21259 /* builder.test.js */, - ); - path = node; - sourceTree = ""; - }; - C1EA55291680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA552A1680FE1100A21259 /* _id.js */, - C1EA552B1680FE1100A21259 /* bidirectional.js */, - C1EA552C1680FE1100A21259 /* broadcast.js */, - C1EA552D1680FE1100A21259 /* bundle.js */, - C1EA552E1680FE1100A21259 /* circular.js */, - C1EA552F1680FE1100A21259 /* double.js */, - C1EA55301680FE1100A21259 /* emit.js */, - C1EA55311680FE1100A21259 /* error.js */, - C1EA55321680FE1100A21259 /* keys */, - C1EA55391680FE1100A21259 /* middleware.js */, - C1EA553A1680FE1100A21259 /* nested.js */, - C1EA553B1680FE1100A21259 /* null.js */, - C1EA553C1680FE1100A21259 /* obj.js */, - C1EA553D1680FE1100A21259 /* recon.js */, - C1EA553E1680FE1100A21259 /* refs.js */, - C1EA553F1680FE1100A21259 /* self-referential.js */, - C1EA55401680FE1100A21259 /* simple.js */, - C1EA55411680FE1100A21259 /* single.js */, - C1EA55421680FE1100A21259 /* stream.js */, - C1EA55431680FE1100A21259 /* tls.js */, - C1EA55441680FE1100A21259 /* unicode.js */, - C1EA55451680FE1100A21259 /* unix.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA55321680FE1100A21259 /* keys */ = { - isa = PBXGroup; - children = ( - C1EA55331680FE1100A21259 /* agent1-cert.pem */, - C1EA55341680FE1100A21259 /* agent1-csr.pem */, - C1EA55351680FE1100A21259 /* agent1-key.pem */, - C1EA55361680FE1100A21259 /* agent2-cert.pem */, - C1EA55371680FE1100A21259 /* agent2-csr.pem */, - C1EA55381680FE1100A21259 /* agent2-key.pem */, - ); - path = keys; - sourceTree = ""; - }; - C1EA55461680FE1100A21259 /* testling */ = { - isa = PBXGroup; - children = ( - C1EA55471680FE1100A21259 /* index.html */, - C1EA55481680FE1100A21259 /* README.markdown */, - C1EA55491680FE1100A21259 /* server.js */, - C1EA554A1680FE1100A21259 /* test.js */, - ); - path = testling; - sourceTree = ""; - }; - C1EA554B1680FE1100A21259 /* dnode-protocol */ = { - isa = PBXGroup; - children = ( - C1EA554C1680FE1100A21259 /* .travis.yml */, - C1EA554D1680FE1100A21259 /* doc */, - C1EA554F1680FE1100A21259 /* example */, - C1EA55521680FE1100A21259 /* index.js */, - C1EA55531680FE1100A21259 /* lib */, - C1EA55581680FE1100A21259 /* LICENSE */, - C1EA55591680FE1100A21259 /* node_modules */, - C1EA55891680FE1100A21259 /* package.json */, - C1EA558A1680FE1100A21259 /* README.markdown */, - C1EA558B1680FE1100A21259 /* test */, - C1EA55911680FE1100A21259 /* testling */, - ); - path = "dnode-protocol"; - sourceTree = ""; - }; - C1EA554D1680FE1100A21259 /* doc */ = { - isa = PBXGroup; - children = ( - C1EA554E1680FE1100A21259 /* protocol.markdown */, - ); - path = doc; - sourceTree = ""; - }; - C1EA554F1680FE1100A21259 /* example */ = { - isa = PBXGroup; - children = ( - C1EA55501680FE1100A21259 /* proto.js */, - C1EA55511680FE1100A21259 /* weak.js */, - ); - path = example; - sourceTree = ""; - }; - C1EA55531680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA55541680FE1100A21259 /* foreach.js */, - C1EA55551680FE1100A21259 /* is_enum.js */, - C1EA55561680FE1100A21259 /* keys.js */, - C1EA55571680FE1100A21259 /* scrub.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA55591680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA555A1680FE1100A21259 /* jsonify */, - C1EA55641680FE1100A21259 /* traverse */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA555A1680FE1100A21259 /* jsonify */ = { - isa = PBXGroup; - children = ( - C1EA555B1680FE1100A21259 /* index.js */, - C1EA555C1680FE1100A21259 /* lib */, - C1EA555F1680FE1100A21259 /* package.json */, - C1EA55601680FE1100A21259 /* README.markdown */, - C1EA55611680FE1100A21259 /* test */, - ); - path = jsonify; - sourceTree = ""; - }; - C1EA555C1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA555D1680FE1100A21259 /* parse.js */, - C1EA555E1680FE1100A21259 /* stringify.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA55611680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA55621680FE1100A21259 /* parse.js */, - C1EA55631680FE1100A21259 /* stringify.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA55641680FE1100A21259 /* traverse */ = { - isa = PBXGroup; - children = ( - C1EA55651680FE1100A21259 /* .npmignore */, - C1EA55661680FE1100A21259 /* .travis.yml */, - C1EA55671680FE1100A21259 /* examples */, - C1EA556D1680FE1100A21259 /* fail.js */, - C1EA556E1680FE1100A21259 /* index.js */, - C1EA556F1680FE1100A21259 /* LICENSE */, - C1EA55701680FE1100A21259 /* package.json */, - C1EA55711680FE1100A21259 /* README.markdown */, - C1EA55721680FE1100A21259 /* test */, - C1EA55871680FE1100A21259 /* testling */, - ); - path = traverse; - sourceTree = ""; - }; - C1EA55671680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA55681680FE1100A21259 /* json.js */, - C1EA55691680FE1100A21259 /* leaves.js */, - C1EA556A1680FE1100A21259 /* negative.js */, - C1EA556B1680FE1100A21259 /* scrub.js */, - C1EA556C1680FE1100A21259 /* stringify.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA55721680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA55731680FE1100A21259 /* circular.js */, - C1EA55741680FE1100A21259 /* date.js */, - C1EA55751680FE1100A21259 /* equal.js */, - C1EA55761680FE1100A21259 /* error.js */, - C1EA55771680FE1100A21259 /* has.js */, - C1EA55781680FE1100A21259 /* instance.js */, - C1EA55791680FE1100A21259 /* interface.js */, - C1EA557A1680FE1100A21259 /* json.js */, - C1EA557B1680FE1100A21259 /* keys.js */, - C1EA557C1680FE1100A21259 /* leaves.js */, - C1EA557D1680FE1100A21259 /* lib */, - C1EA557F1680FE1100A21259 /* mutability.js */, - C1EA55801680FE1100A21259 /* negative.js */, - C1EA55811680FE1100A21259 /* obj.js */, - C1EA55821680FE1100A21259 /* siblings.js */, - C1EA55831680FE1100A21259 /* stop.js */, - C1EA55841680FE1100A21259 /* stringify.js */, - C1EA55851680FE1100A21259 /* subexpr.js */, - C1EA55861680FE1100A21259 /* super_deep.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA557D1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA557E1680FE1100A21259 /* deep_equal.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA55871680FE1100A21259 /* testling */ = { - isa = PBXGroup; - children = ( - C1EA55881680FE1100A21259 /* leaves.js */, - ); - path = testling; - sourceTree = ""; - }; - C1EA558B1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA558C1680FE1100A21259 /* circular.js */, - C1EA558D1680FE1100A21259 /* fn.js */, - C1EA558E1680FE1100A21259 /* proto.js */, - C1EA558F1680FE1100A21259 /* scrub.js */, - C1EA55901680FE1100A21259 /* wrap.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA55911680FE1100A21259 /* testling */ = { - isa = PBXGroup; - children = ( - C1EA55921680FE1100A21259 /* test.sh */, - ); - path = testling; - sourceTree = ""; - }; - C1EA55931680FE1100A21259 /* express */ = { - isa = PBXGroup; - children = ( - C1EA55941680FE1100A21259 /* .npmignore */, - C1EA55951680FE1100A21259 /* .travis.yml */, - C1EA55961680FE1100A21259 /* bin */, - C1EA55981680FE1100A21259 /* client.js */, - C1EA55991680FE1100A21259 /* History.md */, - C1EA559A1680FE1100A21259 /* index.js */, - C1EA559B1680FE1100A21259 /* lib */, - C1EA55A61680FE1100A21259 /* LICENSE */, - C1EA55A71680FE1100A21259 /* Makefile */, - C1EA55A81680FE1100A21259 /* node_modules */, - C1EA57161680FE1100A21259 /* package.json */, - C1EA57171680FE1100A21259 /* Readme.md */, - C1EA57181680FE1100A21259 /* test.js */, - ); - path = express; - sourceTree = ""; - }; - C1EA55961680FE1100A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA55971680FE1100A21259 /* express */, - ); - path = bin; - sourceTree = ""; - }; - C1EA559B1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA559C1680FE1100A21259 /* application.js */, - C1EA559D1680FE1100A21259 /* express.js */, - C1EA559E1680FE1100A21259 /* middleware.js */, - C1EA559F1680FE1100A21259 /* request.js */, - C1EA55A01680FE1100A21259 /* response.js */, - C1EA55A11680FE1100A21259 /* router */, - C1EA55A41680FE1100A21259 /* utils.js */, - C1EA55A51680FE1100A21259 /* view.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA55A11680FE1100A21259 /* router */ = { - isa = PBXGroup; - children = ( - C1EA55A21680FE1100A21259 /* index.js */, - C1EA55A31680FE1100A21259 /* route.js */, - ); - path = router; - sourceTree = ""; - }; - C1EA55A81680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA55A91680FE1100A21259 /* buffer-crc32 */, - C1EA55B11680FE1100A21259 /* commander */, - C1EA55BB1680FE1100A21259 /* connect */, - C1EA56B41680FE1100A21259 /* cookie */, - C1EA56BE1680FE1100A21259 /* cookie-signature */, - C1EA56C51680FE1100A21259 /* debug */, - C1EA56D71680FE1100A21259 /* fresh */, - C1EA56DD1680FE1100A21259 /* methods */, - C1EA56E01680FE1100A21259 /* mkdirp */, - C1EA56FB1680FE1100A21259 /* range-parser */, - C1EA57021680FE1100A21259 /* send */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA55A91680FE1100A21259 /* buffer-crc32 */ = { - isa = PBXGroup; - children = ( - C1EA55AA1680FE1100A21259 /* .npmignore */, - C1EA55AB1680FE1100A21259 /* .travis.yml */, - C1EA55AC1680FE1100A21259 /* index.js */, - C1EA55AD1680FE1100A21259 /* package.json */, - C1EA55AE1680FE1100A21259 /* README.md */, - C1EA55AF1680FE1100A21259 /* tests */, - ); - path = "buffer-crc32"; - sourceTree = ""; - }; - C1EA55AF1680FE1100A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA55B01680FE1100A21259 /* crc.test.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA55B11680FE1100A21259 /* commander */ = { - isa = PBXGroup; - children = ( - C1EA55B21680FE1100A21259 /* .npmignore */, - C1EA55B31680FE1100A21259 /* .travis.yml */, - C1EA55B41680FE1100A21259 /* History.md */, - C1EA55B51680FE1100A21259 /* index.js */, - C1EA55B61680FE1100A21259 /* lib */, - C1EA55B81680FE1100A21259 /* Makefile */, - C1EA55B91680FE1100A21259 /* package.json */, - C1EA55BA1680FE1100A21259 /* Readme.md */, - ); - path = commander; - sourceTree = ""; - }; - C1EA55B61680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA55B71680FE1100A21259 /* commander.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA55BB1680FE1100A21259 /* connect */ = { - isa = PBXGroup; - children = ( - C1EA55BC1680FE1100A21259 /* .npmignore */, - C1EA55BD1680FE1100A21259 /* .travis.yml */, - C1EA55BE1680FE1100A21259 /* index.js */, - C1EA55BF1680FE1100A21259 /* lib */, - C1EA56371680FE1100A21259 /* LICENSE */, - C1EA56381680FE1100A21259 /* node_modules */, - C1EA56B11680FE1100A21259 /* package.json */, - C1EA56B21680FE1100A21259 /* Readme.md */, - C1EA56B31680FE1100A21259 /* test.js */, - ); - path = connect; - sourceTree = ""; - }; - C1EA55BF1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA55C01680FE1100A21259 /* cache.js */, - C1EA55C11680FE1100A21259 /* connect.js */, - C1EA55C21680FE1100A21259 /* index.js */, - C1EA55C31680FE1100A21259 /* middleware */, - C1EA55DF1680FE1100A21259 /* patch.js */, - C1EA55E01680FE1100A21259 /* proto.js */, - C1EA55E11680FE1100A21259 /* public */, - C1EA56361680FE1100A21259 /* utils.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA55C31680FE1100A21259 /* middleware */ = { - isa = PBXGroup; - children = ( - C1EA55C41680FE1100A21259 /* basicAuth.js */, - C1EA55C51680FE1100A21259 /* bodyParser.js */, - C1EA55C61680FE1100A21259 /* compress.js */, - C1EA55C71680FE1100A21259 /* cookieParser.js */, - C1EA55C81680FE1100A21259 /* cookieSession.js */, - C1EA55C91680FE1100A21259 /* csrf.js */, - C1EA55CA1680FE1100A21259 /* directory.js */, - C1EA55CB1680FE1100A21259 /* errorHandler.js */, - C1EA55CC1680FE1100A21259 /* favicon.js */, - C1EA55CD1680FE1100A21259 /* json.js */, - C1EA55CE1680FE1100A21259 /* limit.js */, - C1EA55CF1680FE1100A21259 /* logger.js */, - C1EA55D01680FE1100A21259 /* methodOverride.js */, - C1EA55D11680FE1100A21259 /* multipart.js */, - C1EA55D21680FE1100A21259 /* query.js */, - C1EA55D31680FE1100A21259 /* responseTime.js */, - C1EA55D41680FE1100A21259 /* session */, - C1EA55D91680FE1100A21259 /* session.js */, - C1EA55DA1680FE1100A21259 /* static.js */, - C1EA55DB1680FE1100A21259 /* staticCache.js */, - C1EA55DC1680FE1100A21259 /* timeout.js */, - C1EA55DD1680FE1100A21259 /* urlencoded.js */, - C1EA55DE1680FE1100A21259 /* vhost.js */, - ); - path = middleware; - sourceTree = ""; - }; - C1EA55D41680FE1100A21259 /* session */ = { - isa = PBXGroup; - children = ( - C1EA55D51680FE1100A21259 /* cookie.js */, - C1EA55D61680FE1100A21259 /* memory.js */, - C1EA55D71680FE1100A21259 /* session.js */, - C1EA55D81680FE1100A21259 /* store.js */, - ); - path = session; - sourceTree = ""; - }; - C1EA55E11680FE1100A21259 /* public */ = { - isa = PBXGroup; - children = ( - C1EA55E21680FE1100A21259 /* directory.html */, - C1EA55E31680FE1100A21259 /* error.html */, - C1EA55E41680FE1100A21259 /* favicon.ico */, - C1EA55E51680FE1100A21259 /* icons */, - C1EA56351680FE1100A21259 /* style.css */, - ); - path = public; - sourceTree = ""; - }; - C1EA55E51680FE1100A21259 /* icons */ = { - isa = PBXGroup; - children = ( - C1EA55E61680FE1100A21259 /* page.png */, - C1EA55E71680FE1100A21259 /* page_add.png */, - C1EA55E81680FE1100A21259 /* page_attach.png */, - C1EA55E91680FE1100A21259 /* page_code.png */, - C1EA55EA1680FE1100A21259 /* page_copy.png */, - C1EA55EB1680FE1100A21259 /* page_delete.png */, - C1EA55EC1680FE1100A21259 /* page_edit.png */, - C1EA55ED1680FE1100A21259 /* page_error.png */, - C1EA55EE1680FE1100A21259 /* page_excel.png */, - C1EA55EF1680FE1100A21259 /* page_find.png */, - C1EA55F01680FE1100A21259 /* page_gear.png */, - C1EA55F11680FE1100A21259 /* page_go.png */, - C1EA55F21680FE1100A21259 /* page_green.png */, - C1EA55F31680FE1100A21259 /* page_key.png */, - C1EA55F41680FE1100A21259 /* page_lightning.png */, - C1EA55F51680FE1100A21259 /* page_link.png */, - C1EA55F61680FE1100A21259 /* page_paintbrush.png */, - C1EA55F71680FE1100A21259 /* page_paste.png */, - C1EA55F81680FE1100A21259 /* page_red.png */, - C1EA55F91680FE1100A21259 /* page_refresh.png */, - C1EA55FA1680FE1100A21259 /* page_save.png */, - C1EA55FB1680FE1100A21259 /* page_white.png */, - C1EA55FC1680FE1100A21259 /* page_white_acrobat.png */, - C1EA55FD1680FE1100A21259 /* page_white_actionscript.png */, - C1EA55FE1680FE1100A21259 /* page_white_add.png */, - C1EA55FF1680FE1100A21259 /* page_white_c.png */, - C1EA56001680FE1100A21259 /* page_white_camera.png */, - C1EA56011680FE1100A21259 /* page_white_cd.png */, - C1EA56021680FE1100A21259 /* page_white_code.png */, - C1EA56031680FE1100A21259 /* page_white_code_red.png */, - C1EA56041680FE1100A21259 /* page_white_coldfusion.png */, - C1EA56051680FE1100A21259 /* page_white_compressed.png */, - C1EA56061680FE1100A21259 /* page_white_copy.png */, - C1EA56071680FE1100A21259 /* page_white_cplusplus.png */, - C1EA56081680FE1100A21259 /* page_white_csharp.png */, - C1EA56091680FE1100A21259 /* page_white_cup.png */, - C1EA560A1680FE1100A21259 /* page_white_database.png */, - C1EA560B1680FE1100A21259 /* page_white_delete.png */, - C1EA560C1680FE1100A21259 /* page_white_dvd.png */, - C1EA560D1680FE1100A21259 /* page_white_edit.png */, - C1EA560E1680FE1100A21259 /* page_white_error.png */, - C1EA560F1680FE1100A21259 /* page_white_excel.png */, - C1EA56101680FE1100A21259 /* page_white_find.png */, - C1EA56111680FE1100A21259 /* page_white_flash.png */, - C1EA56121680FE1100A21259 /* page_white_freehand.png */, - C1EA56131680FE1100A21259 /* page_white_gear.png */, - C1EA56141680FE1100A21259 /* page_white_get.png */, - C1EA56151680FE1100A21259 /* page_white_go.png */, - C1EA56161680FE1100A21259 /* page_white_h.png */, - C1EA56171680FE1100A21259 /* page_white_horizontal.png */, - C1EA56181680FE1100A21259 /* page_white_key.png */, - C1EA56191680FE1100A21259 /* page_white_lightning.png */, - C1EA561A1680FE1100A21259 /* page_white_link.png */, - C1EA561B1680FE1100A21259 /* page_white_magnify.png */, - C1EA561C1680FE1100A21259 /* page_white_medal.png */, - C1EA561D1680FE1100A21259 /* page_white_office.png */, - C1EA561E1680FE1100A21259 /* page_white_paint.png */, - C1EA561F1680FE1100A21259 /* page_white_paintbrush.png */, - C1EA56201680FE1100A21259 /* page_white_paste.png */, - C1EA56211680FE1100A21259 /* page_white_php.png */, - C1EA56221680FE1100A21259 /* page_white_picture.png */, - C1EA56231680FE1100A21259 /* page_white_powerpoint.png */, - C1EA56241680FE1100A21259 /* page_white_put.png */, - C1EA56251680FE1100A21259 /* page_white_ruby.png */, - C1EA56261680FE1100A21259 /* page_white_stack.png */, - C1EA56271680FE1100A21259 /* page_white_star.png */, - C1EA56281680FE1100A21259 /* page_white_swoosh.png */, - C1EA56291680FE1100A21259 /* page_white_text.png */, - C1EA562A1680FE1100A21259 /* page_white_text_width.png */, - C1EA562B1680FE1100A21259 /* page_white_tux.png */, - C1EA562C1680FE1100A21259 /* page_white_vector.png */, - C1EA562D1680FE1100A21259 /* page_white_visualstudio.png */, - C1EA562E1680FE1100A21259 /* page_white_width.png */, - C1EA562F1680FE1100A21259 /* page_white_word.png */, - C1EA56301680FE1100A21259 /* page_white_world.png */, - C1EA56311680FE1100A21259 /* page_white_wrench.png */, - C1EA56321680FE1100A21259 /* page_white_zip.png */, - C1EA56331680FE1100A21259 /* page_word.png */, - C1EA56341680FE1100A21259 /* page_world.png */, - ); - path = icons; - sourceTree = ""; - }; - C1EA56381680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA56391680FE1100A21259 /* bytes */, - C1EA56411680FE1100A21259 /* crc */, - C1EA564B1680FE1100A21259 /* formidable */, - C1EA568E1680FE1100A21259 /* pause */, - C1EA56951680FE1100A21259 /* qs */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA56391680FE1100A21259 /* bytes */ = { - isa = PBXGroup; - children = ( - C1EA563A1680FE1100A21259 /* .npmignore */, - C1EA563B1680FE1100A21259 /* component.json */, - C1EA563C1680FE1100A21259 /* History.md */, - C1EA563D1680FE1100A21259 /* index.js */, - C1EA563E1680FE1100A21259 /* Makefile */, - C1EA563F1680FE1100A21259 /* package.json */, - C1EA56401680FE1100A21259 /* Readme.md */, - ); - path = bytes; - sourceTree = ""; - }; - C1EA56411680FE1100A21259 /* crc */ = { - isa = PBXGroup; - children = ( - C1EA56421680FE1100A21259 /* .gitmodules */, - C1EA56431680FE1100A21259 /* .npmignore */, - C1EA56441680FE1100A21259 /* lib */, - C1EA56461680FE1100A21259 /* Makefile */, - C1EA56471680FE1100A21259 /* package.json */, - C1EA56481680FE1100A21259 /* README.md */, - C1EA56491680FE1100A21259 /* test */, - ); - path = crc; - sourceTree = ""; - }; - C1EA56441680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA56451680FE1100A21259 /* crc.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA56491680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA564A1680FE1100A21259 /* crc.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA564B1680FE1100A21259 /* formidable */ = { - isa = PBXGroup; - children = ( - C1EA564C1680FE1100A21259 /* .npmignore */, - C1EA564D1680FE1100A21259 /* .travis.yml */, - C1EA564E1680FE1100A21259 /* benchmark */, - C1EA56501680FE1100A21259 /* example */, - C1EA56531680FE1100A21259 /* index.js */, - C1EA56541680FE1100A21259 /* lib */, - C1EA565B1680FE1100A21259 /* Makefile */, - C1EA565C1680FE1100A21259 /* node-gently */, - C1EA566C1680FE1100A21259 /* package.json */, - C1EA566D1680FE1100A21259 /* Readme.md */, - C1EA566E1680FE1100A21259 /* test */, - C1EA568B1680FE1100A21259 /* TODO */, - C1EA568C1680FE1100A21259 /* tool */, - ); - path = formidable; - sourceTree = ""; - }; - C1EA564E1680FE1100A21259 /* benchmark */ = { - isa = PBXGroup; - children = ( - C1EA564F1680FE1100A21259 /* bench-multipart-parser.js */, - ); - path = benchmark; - sourceTree = ""; - }; - C1EA56501680FE1100A21259 /* example */ = { - isa = PBXGroup; - children = ( - C1EA56511680FE1100A21259 /* post.js */, - C1EA56521680FE1100A21259 /* upload.js */, - ); - path = example; - sourceTree = ""; - }; - C1EA56541680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA56551680FE1100A21259 /* file.js */, - C1EA56561680FE1100A21259 /* incoming_form.js */, - C1EA56571680FE1100A21259 /* index.js */, - C1EA56581680FE1100A21259 /* multipart_parser.js */, - C1EA56591680FE1100A21259 /* querystring_parser.js */, - C1EA565A1680FE1100A21259 /* util.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA565C1680FE1100A21259 /* node-gently */ = { - isa = PBXGroup; - children = ( - C1EA565D1680FE1100A21259 /* example */, - C1EA56601680FE1100A21259 /* index.js */, - C1EA56611680FE1100A21259 /* lib */, - C1EA56651680FE1100A21259 /* Makefile */, - C1EA56661680FE1100A21259 /* package.json */, - C1EA56671680FE1100A21259 /* Readme.md */, - C1EA56681680FE1100A21259 /* test */, - ); - path = "node-gently"; - sourceTree = ""; - }; - C1EA565D1680FE1100A21259 /* example */ = { - isa = PBXGroup; - children = ( - C1EA565E1680FE1100A21259 /* dog.js */, - C1EA565F1680FE1100A21259 /* event_emitter.js */, - ); - path = example; - sourceTree = ""; - }; - C1EA56611680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA56621680FE1100A21259 /* gently */, - ); - path = lib; - sourceTree = ""; - }; - C1EA56621680FE1100A21259 /* gently */ = { - isa = PBXGroup; - children = ( - C1EA56631680FE1100A21259 /* gently.js */, - C1EA56641680FE1100A21259 /* index.js */, - ); - path = gently; - sourceTree = ""; - }; - C1EA56681680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA56691680FE1100A21259 /* common.js */, - C1EA566A1680FE1100A21259 /* simple */, - ); - path = test; - sourceTree = ""; - }; - C1EA566A1680FE1100A21259 /* simple */ = { - isa = PBXGroup; - children = ( - C1EA566B1680FE1100A21259 /* test-gently.js */, - ); - path = simple; - sourceTree = ""; - }; - C1EA566E1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA566F1680FE1100A21259 /* common.js */, - C1EA56701680FE1100A21259 /* fixture */, - C1EA567B1680FE1100A21259 /* integration */, - C1EA567D1680FE1100A21259 /* legacy */, - C1EA56881680FE1100A21259 /* run.js */, - C1EA56891680FE1100A21259 /* unit */, - ); - path = test; - sourceTree = ""; - }; - C1EA56701680FE1100A21259 /* fixture */ = { - isa = PBXGroup; - children = ( - C1EA56711680FE1100A21259 /* file */, - C1EA56741680FE1100A21259 /* http */, - C1EA56771680FE1100A21259 /* js */, - C1EA567A1680FE1100A21259 /* multipart.js */, - ); - path = fixture; - sourceTree = ""; - }; - C1EA56711680FE1100A21259 /* file */ = { - isa = PBXGroup; - children = ( - C1EA56721680FE1100A21259 /* funkyfilename.txt */, - C1EA56731680FE1100A21259 /* plain.txt */, - ); - path = file; - sourceTree = ""; - }; - C1EA56741680FE1100A21259 /* http */ = { - isa = PBXGroup; - children = ( - C1EA56751680FE1100A21259 /* special-chars-in-filename */, - ); - path = http; - sourceTree = ""; - }; - C1EA56751680FE1100A21259 /* special-chars-in-filename */ = { - isa = PBXGroup; - children = ( - C1EA56761680FE1100A21259 /* info.md */, - ); - path = "special-chars-in-filename"; - sourceTree = ""; - }; - C1EA56771680FE1100A21259 /* js */ = { - isa = PBXGroup; - children = ( - C1EA56781680FE1100A21259 /* no-filename.js */, - C1EA56791680FE1100A21259 /* special-chars-in-filename.js */, - ); - path = js; - sourceTree = ""; - }; - C1EA567B1680FE1100A21259 /* integration */ = { - isa = PBXGroup; - children = ( - C1EA567C1680FE1100A21259 /* test-fixtures.js */, - ); - path = integration; - sourceTree = ""; - }; - C1EA567D1680FE1100A21259 /* legacy */ = { - isa = PBXGroup; - children = ( - C1EA567E1680FE1100A21259 /* common.js */, - C1EA567F1680FE1100A21259 /* integration */, - C1EA56811680FE1100A21259 /* simple */, - C1EA56861680FE1100A21259 /* system */, - ); - path = legacy; - sourceTree = ""; - }; - C1EA567F1680FE1100A21259 /* integration */ = { - isa = PBXGroup; - children = ( - C1EA56801680FE1100A21259 /* test-multipart-parser.js */, - ); - path = integration; - sourceTree = ""; - }; - C1EA56811680FE1100A21259 /* simple */ = { - isa = PBXGroup; - children = ( - C1EA56821680FE1100A21259 /* test-file.js */, - C1EA56831680FE1100A21259 /* test-incoming-form.js */, - C1EA56841680FE1100A21259 /* test-multipart-parser.js */, - C1EA56851680FE1100A21259 /* test-querystring-parser.js */, - ); - path = simple; - sourceTree = ""; - }; - C1EA56861680FE1100A21259 /* system */ = { - isa = PBXGroup; - children = ( - C1EA56871680FE1100A21259 /* test-multi-video-upload.js */, - ); - path = system; - sourceTree = ""; - }; - C1EA56891680FE1100A21259 /* unit */ = { - isa = PBXGroup; - children = ( - C1EA568A1680FE1100A21259 /* test-incoming-form.js */, - ); - path = unit; - sourceTree = ""; - }; - C1EA568C1680FE1100A21259 /* tool */ = { - isa = PBXGroup; - children = ( - C1EA568D1680FE1100A21259 /* record.js */, - ); - path = tool; - sourceTree = ""; - }; - C1EA568E1680FE1100A21259 /* pause */ = { - isa = PBXGroup; - children = ( - C1EA568F1680FE1100A21259 /* .npmignore */, - C1EA56901680FE1100A21259 /* History.md */, - C1EA56911680FE1100A21259 /* index.js */, - C1EA56921680FE1100A21259 /* Makefile */, - C1EA56931680FE1100A21259 /* package.json */, - C1EA56941680FE1100A21259 /* Readme.md */, - ); - path = pause; - sourceTree = ""; - }; - C1EA56951680FE1100A21259 /* qs */ = { - isa = PBXGroup; - children = ( - C1EA56961680FE1100A21259 /* .gitmodules */, - C1EA56971680FE1100A21259 /* .npmignore */, - C1EA56981680FE1100A21259 /* .travis.yml */, - C1EA56991680FE1100A21259 /* benchmark.js */, - C1EA569A1680FE1100A21259 /* component.json */, - C1EA569B1680FE1100A21259 /* examples.js */, - C1EA569C1680FE1100A21259 /* History.md */, - C1EA569D1680FE1100A21259 /* index.js */, - C1EA569E1680FE1100A21259 /* lib */, - C1EA56A21680FE1100A21259 /* Makefile */, - C1EA56A31680FE1100A21259 /* package.json */, - C1EA56A41680FE1100A21259 /* querystring.js */, - C1EA56A51680FE1100A21259 /* Readme.md */, - C1EA56A61680FE1100A21259 /* test */, - ); - path = qs; - sourceTree = ""; - }; - C1EA569E1680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA569F1680FE1100A21259 /* head.js */, - C1EA56A01680FE1100A21259 /* querystring.js */, - C1EA56A11680FE1100A21259 /* tail.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA56A61680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA56A71680FE1100A21259 /* browser */, - C1EA56AF1680FE1100A21259 /* parse.js */, - C1EA56B01680FE1100A21259 /* stringify.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA56A71680FE1100A21259 /* browser */ = { - isa = PBXGroup; - children = ( - C1EA56A81680FE1100A21259 /* expect.js */, - C1EA56A91680FE1100A21259 /* index.html */, - C1EA56AA1680FE1100A21259 /* jquery.js */, - C1EA56AB1680FE1100A21259 /* mocha.css */, - C1EA56AC1680FE1100A21259 /* mocha.js */, - C1EA56AD1680FE1100A21259 /* qs.css */, - C1EA56AE1680FE1100A21259 /* qs.js */, - ); - path = browser; - sourceTree = ""; - }; - C1EA56B41680FE1100A21259 /* cookie */ = { - isa = PBXGroup; - children = ( - C1EA56B51680FE1100A21259 /* .npmignore */, - C1EA56B61680FE1100A21259 /* .travis.yml */, - C1EA56B71680FE1100A21259 /* index.js */, - C1EA56B81680FE1100A21259 /* package.json */, - C1EA56B91680FE1100A21259 /* README.md */, - C1EA56BA1680FE1100A21259 /* test */, - ); - path = cookie; - sourceTree = ""; - }; - C1EA56BA1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA56BB1680FE1100A21259 /* mocha.opts */, - C1EA56BC1680FE1100A21259 /* parse.js */, - C1EA56BD1680FE1100A21259 /* serialize.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA56BE1680FE1100A21259 /* cookie-signature */ = { - isa = PBXGroup; - children = ( - C1EA56BF1680FE1100A21259 /* .npmignore */, - C1EA56C01680FE1100A21259 /* History.md */, - C1EA56C11680FE1100A21259 /* index.js */, - C1EA56C21680FE1100A21259 /* Makefile */, - C1EA56C31680FE1100A21259 /* package.json */, - C1EA56C41680FE1100A21259 /* Readme.md */, - ); - path = "cookie-signature"; - sourceTree = ""; - }; - C1EA56C51680FE1100A21259 /* debug */ = { - isa = PBXGroup; - children = ( - C1EA56C61680FE1100A21259 /* .npmignore */, - C1EA56C71680FE1100A21259 /* debug.component.js */, - C1EA56C81680FE1100A21259 /* debug.js */, - C1EA56C91680FE1100A21259 /* example */, - C1EA56CE1680FE1100A21259 /* head.js */, - C1EA56CF1680FE1100A21259 /* History.md */, - C1EA56D01680FE1100A21259 /* index.js */, - C1EA56D11680FE1100A21259 /* lib */, - C1EA56D31680FE1100A21259 /* Makefile */, - C1EA56D41680FE1100A21259 /* package.json */, - C1EA56D51680FE1100A21259 /* Readme.md */, - C1EA56D61680FE1100A21259 /* tail.js */, - ); - path = debug; - sourceTree = ""; - }; - C1EA56C91680FE1100A21259 /* example */ = { - isa = PBXGroup; - children = ( - C1EA56CA1680FE1100A21259 /* app.js */, - C1EA56CB1680FE1100A21259 /* browser.html */, - C1EA56CC1680FE1100A21259 /* wildcards.js */, - C1EA56CD1680FE1100A21259 /* worker.js */, - ); - path = example; - sourceTree = ""; - }; - C1EA56D11680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA56D21680FE1100A21259 /* debug.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA56D71680FE1100A21259 /* fresh */ = { - isa = PBXGroup; - children = ( - C1EA56D81680FE1100A21259 /* .npmignore */, - C1EA56D91680FE1100A21259 /* index.js */, - C1EA56DA1680FE1100A21259 /* Makefile */, - C1EA56DB1680FE1100A21259 /* package.json */, - C1EA56DC1680FE1100A21259 /* Readme.md */, - ); - path = fresh; - sourceTree = ""; - }; - C1EA56DD1680FE1100A21259 /* methods */ = { - isa = PBXGroup; - children = ( - C1EA56DE1680FE1100A21259 /* index.js */, - C1EA56DF1680FE1100A21259 /* package.json */, - ); - path = methods; - sourceTree = ""; - }; - C1EA56E01680FE1100A21259 /* mkdirp */ = { - isa = PBXGroup; - children = ( - C1EA56E11680FE1100A21259 /* .gitignore.orig */, - C1EA56E21680FE1100A21259 /* .gitignore.rej */, - C1EA56E31680FE1100A21259 /* .npmignore */, - C1EA56E41680FE1100A21259 /* .travis.yml */, - C1EA56E51680FE1100A21259 /* examples */, - C1EA56E91680FE1100A21259 /* index.js */, - C1EA56EA1680FE1100A21259 /* LICENSE */, - C1EA56EB1680FE1100A21259 /* package.json */, - C1EA56EC1680FE1100A21259 /* README.markdown */, - C1EA56ED1680FE1100A21259 /* test */, - ); - path = mkdirp; - sourceTree = ""; - }; - C1EA56E51680FE1100A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA56E61680FE1100A21259 /* pow.js */, - C1EA56E71680FE1100A21259 /* pow.js.orig */, - C1EA56E81680FE1100A21259 /* pow.js.rej */, - ); - path = examples; - sourceTree = ""; - }; - C1EA56ED1680FE1100A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA56EE1680FE1100A21259 /* chmod.js */, - C1EA56EF1680FE1100A21259 /* clobber.js */, - C1EA56F01680FE1100A21259 /* mkdirp.js */, - C1EA56F11680FE1100A21259 /* perm.js */, - C1EA56F21680FE1100A21259 /* perm_sync.js */, - C1EA56F31680FE1100A21259 /* race.js */, - C1EA56F41680FE1100A21259 /* rel.js */, - C1EA56F51680FE1100A21259 /* return.js */, - C1EA56F61680FE1100A21259 /* return_sync.js */, - C1EA56F71680FE1100A21259 /* root.js */, - C1EA56F81680FE1100A21259 /* sync.js */, - C1EA56F91680FE1100A21259 /* umask.js */, - C1EA56FA1680FE1100A21259 /* umask_sync.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA56FB1680FE1100A21259 /* range-parser */ = { - isa = PBXGroup; - children = ( - C1EA56FC1680FE1100A21259 /* .npmignore */, - C1EA56FD1680FE1100A21259 /* History.md */, - C1EA56FE1680FE1100A21259 /* index.js */, - C1EA56FF1680FE1100A21259 /* Makefile */, - C1EA57001680FE1100A21259 /* package.json */, - C1EA57011680FE1100A21259 /* Readme.md */, - ); - path = "range-parser"; - sourceTree = ""; - }; - C1EA57021680FE1100A21259 /* send */ = { - isa = PBXGroup; - children = ( - C1EA57031680FE1100A21259 /* .npmignore */, - C1EA57041680FE1100A21259 /* History.md */, - C1EA57051680FE1100A21259 /* index.js */, - C1EA57061680FE1100A21259 /* lib */, - C1EA57091680FE1100A21259 /* Makefile */, - C1EA570A1680FE1100A21259 /* node_modules */, - C1EA57141680FE1100A21259 /* package.json */, - C1EA57151680FE1100A21259 /* Readme.md */, - ); - path = send; - sourceTree = ""; - }; - C1EA57061680FE1100A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA57071680FE1100A21259 /* send.js */, - C1EA57081680FE1100A21259 /* utils.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA570A1680FE1100A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA570B1680FE1100A21259 /* mime */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA570B1680FE1100A21259 /* mime */ = { - isa = PBXGroup; - children = ( - C1EA570C1680FE1100A21259 /* LICENSE */, - C1EA570D1680FE1100A21259 /* mime.js */, - C1EA570E1680FE1100A21259 /* package.json */, - C1EA570F1680FE1100A21259 /* README.md */, - C1EA57101680FE1100A21259 /* test.js */, - C1EA57111680FE1100A21259 /* types */, - ); - path = mime; - sourceTree = ""; - }; - C1EA57111680FE1100A21259 /* types */ = { - isa = PBXGroup; - children = ( - C1EA57121680FE1100A21259 /* mime.types */, - C1EA57131680FE1100A21259 /* node.types */, - ); - path = types; - sourceTree = ""; - }; - C1EA571F1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA57201680FE1200A21259 /* adv.coffee */, - C1EA57211680FE1200A21259 /* basic.coffee */, - C1EA57221680FE1200A21259 /* inject.js */, - C1EA57231680FE1200A21259 /* page.coffee */, - C1EA57241680FE1200A21259 /* test.gif */, - ); - path = test; - sourceTree = ""; - }; - C1EA57251680FE1200A21259 /* platform */ = { - isa = PBXGroup; - children = ( - C1EA57261680FE1200A21259 /* doc */, - C1EA57281680FE1200A21259 /* LICENSE.txt */, - C1EA57291680FE1200A21259 /* package.json */, - C1EA572A1680FE1200A21259 /* platform.js */, - C1EA572B1680FE1200A21259 /* README.md */, - C1EA572C1680FE1200A21259 /* test */, - ); - path = platform; - sourceTree = ""; - }; - C1EA57261680FE1200A21259 /* doc */ = { - isa = PBXGroup; - children = ( - C1EA57271680FE1200A21259 /* README.md */, - ); - path = doc; - sourceTree = ""; - }; - C1EA572C1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA572D1680FE1200A21259 /* run-test.sh */, - C1EA572E1680FE1200A21259 /* test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA572F1680FE1200A21259 /* ramp */ = { - isa = PBXGroup; - children = ( - C1EA57301680FE1200A21259 /* .travis.yml */, - C1EA57311680FE1200A21259 /* autolint.js */, - C1EA57321680FE1200A21259 /* lib */, - C1EA57441680FE1200A21259 /* node_modules */, - C1EA57981680FE1200A21259 /* package.json */, - C1EA57991680FE1200A21259 /* Readme.md */, - C1EA579A1680FE1200A21259 /* run-tests.js */, - C1EA579B1680FE1200A21259 /* test */, - C1EA57A91680FE1200A21259 /* vendor */, - ); - path = ramp; - sourceTree = ""; - }; - C1EA57321680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA57331680FE1200A21259 /* http-server-request-listener-proxy.js */, - C1EA57341680FE1200A21259 /* prison-init.js */, - C1EA57351680FE1200A21259 /* prison-session-initializer.js */, - C1EA57361680FE1200A21259 /* prison-util.js */, - C1EA57371680FE1200A21259 /* prison.js */, - C1EA57381680FE1200A21259 /* pubsub-client.js */, - C1EA57391680FE1200A21259 /* pubsub-server.js */, - C1EA573A1680FE1200A21259 /* ramp.js */, - C1EA573B1680FE1200A21259 /* server-client.js */, - C1EA573C1680FE1200A21259 /* server.js */, - C1EA573D1680FE1200A21259 /* session-client.js */, - C1EA573E1680FE1200A21259 /* session-queue.js */, - C1EA573F1680FE1200A21259 /* session.js */, - C1EA57401680FE1200A21259 /* slave.js */, - C1EA57411680FE1200A21259 /* templates */, - C1EA57431680FE1200A21259 /* test-helper.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA57411680FE1200A21259 /* templates */ = { - isa = PBXGroup; - children = ( - C1EA57421680FE1200A21259 /* slave_prison.html */, - ); - path = templates; - sourceTree = ""; - }; - C1EA57441680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA57451680FE1200A21259 /* bane */, - C1EA57521680FE1200A21259 /* faye */, - C1EA57881680FE1200A21259 /* node-uuid */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA57451680FE1200A21259 /* bane */ = { - isa = PBXGroup; - children = ( - C1EA57461680FE1200A21259 /* .npmignore */, - C1EA57471680FE1200A21259 /* AUTHORS */, - C1EA57481680FE1200A21259 /* autolint.js */, - C1EA57491680FE1200A21259 /* buster.js */, - C1EA574A1680FE1200A21259 /* lib */, - C1EA574C1680FE1200A21259 /* LICENSE */, - C1EA574D1680FE1200A21259 /* package.json */, - C1EA574E1680FE1200A21259 /* Readme.rst */, - C1EA574F1680FE1200A21259 /* test */, - C1EA57511680FE1200A21259 /* todo.org */, - ); - path = bane; - sourceTree = ""; - }; - C1EA574A1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA574B1680FE1200A21259 /* bane.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA574F1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA57501680FE1200A21259 /* bane-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA57521680FE1200A21259 /* faye */ = { - isa = PBXGroup; - children = ( - C1EA57531680FE1200A21259 /* browser */, - C1EA57571680FE1200A21259 /* History.txt */, - C1EA57581680FE1200A21259 /* node */, - C1EA575A1680FE1200A21259 /* node_modules */, - C1EA57861680FE1200A21259 /* package.json */, - C1EA57871680FE1200A21259 /* README.txt */, - ); - path = faye; - sourceTree = ""; - }; - C1EA57531680FE1200A21259 /* browser */ = { - isa = PBXGroup; - children = ( - C1EA57541680FE1200A21259 /* faye-browser-min.js */, - C1EA57551680FE1200A21259 /* faye-browser-min.js.map */, - C1EA57561680FE1200A21259 /* faye-browser.js */, - ); - path = browser; - sourceTree = ""; - }; - C1EA57581680FE1200A21259 /* node */ = { - isa = PBXGroup; - children = ( - C1EA57591680FE1200A21259 /* faye-node.js */, - ); - path = node; - sourceTree = ""; - }; - C1EA575A1680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA575B1680FE1200A21259 /* cookiejar */, - C1EA57611680FE1200A21259 /* faye-websocket */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA575B1680FE1200A21259 /* cookiejar */ = { - isa = PBXGroup; - children = ( - C1EA575C1680FE1200A21259 /* cookiejar.js */, - C1EA575D1680FE1200A21259 /* package.json */, - C1EA575E1680FE1200A21259 /* readme.md */, - C1EA575F1680FE1200A21259 /* tests */, - ); - path = cookiejar; - sourceTree = ""; - }; - C1EA575F1680FE1200A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA57601680FE1200A21259 /* test.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA57611680FE1200A21259 /* faye-websocket */ = { - isa = PBXGroup; - children = ( - C1EA57621680FE1200A21259 /* CHANGELOG.txt */, - C1EA57631680FE1200A21259 /* examples */, - C1EA576A1680FE1200A21259 /* lib */, - C1EA577A1680FE1200A21259 /* package.json */, - C1EA577B1680FE1200A21259 /* README.markdown */, - C1EA577C1680FE1200A21259 /* spec */, - ); - path = "faye-websocket"; - sourceTree = ""; - }; - C1EA57631680FE1200A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA57641680FE1200A21259 /* autobahn_client.js */, - C1EA57651680FE1200A21259 /* client.js */, - C1EA57661680FE1200A21259 /* haproxy.conf */, - C1EA57671680FE1200A21259 /* server.js */, - C1EA57681680FE1200A21259 /* sse.html */, - C1EA57691680FE1200A21259 /* ws.html */, - ); - path = examples; - sourceTree = ""; - }; - C1EA576A1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA576B1680FE1200A21259 /* faye */, - ); - path = lib; - sourceTree = ""; - }; - C1EA576B1680FE1200A21259 /* faye */ = { - isa = PBXGroup; - children = ( - C1EA576C1680FE1200A21259 /* eventsource.js */, - C1EA576D1680FE1200A21259 /* websocket */, - C1EA57791680FE1200A21259 /* websocket.js */, - ); - path = faye; - sourceTree = ""; - }; - C1EA576D1680FE1200A21259 /* websocket */ = { - isa = PBXGroup; - children = ( - C1EA576E1680FE1200A21259 /* api */, - C1EA57711680FE1200A21259 /* api.js */, - C1EA57721680FE1200A21259 /* client.js */, - C1EA57731680FE1200A21259 /* draft75_parser.js */, - C1EA57741680FE1200A21259 /* draft76_parser.js */, - C1EA57751680FE1200A21259 /* hybi_parser */, - C1EA57781680FE1200A21259 /* hybi_parser.js */, - ); - path = websocket; - sourceTree = ""; - }; - C1EA576E1680FE1200A21259 /* api */ = { - isa = PBXGroup; - children = ( - C1EA576F1680FE1200A21259 /* event.js */, - C1EA57701680FE1200A21259 /* event_target.js */, - ); - path = api; - sourceTree = ""; - }; - C1EA57751680FE1200A21259 /* hybi_parser */ = { - isa = PBXGroup; - children = ( - C1EA57761680FE1200A21259 /* handshake.js */, - C1EA57771680FE1200A21259 /* stream_reader.js */, - ); - path = hybi_parser; - sourceTree = ""; - }; - C1EA577C1680FE1200A21259 /* spec */ = { - isa = PBXGroup; - children = ( - C1EA577D1680FE1200A21259 /* faye */, - C1EA57831680FE1200A21259 /* runner.js */, - C1EA57841680FE1200A21259 /* server.crt */, - C1EA57851680FE1200A21259 /* server.key */, - ); - path = spec; - sourceTree = ""; - }; - C1EA577D1680FE1200A21259 /* faye */ = { - isa = PBXGroup; - children = ( - C1EA577E1680FE1200A21259 /* websocket */, - ); - path = faye; - sourceTree = ""; - }; - C1EA577E1680FE1200A21259 /* websocket */ = { - isa = PBXGroup; - children = ( - C1EA577F1680FE1200A21259 /* client_spec.js */, - C1EA57801680FE1200A21259 /* draft75parser_spec.js */, - C1EA57811680FE1200A21259 /* draft76parser_spec.js */, - C1EA57821680FE1200A21259 /* hybi_parser_spec.js */, - ); - path = websocket; - sourceTree = ""; - }; - C1EA57881680FE1200A21259 /* node-uuid */ = { - isa = PBXGroup; - children = ( - C1EA57891680FE1200A21259 /* .npmignore */, - C1EA578A1680FE1200A21259 /* benchmark */, - C1EA57901680FE1200A21259 /* LICENSE.md */, - C1EA57911680FE1200A21259 /* package.json */, - C1EA57921680FE1200A21259 /* README.md */, - C1EA57931680FE1200A21259 /* test */, - C1EA57971680FE1200A21259 /* uuid.js */, - ); - path = "node-uuid"; - sourceTree = ""; - }; - C1EA578A1680FE1200A21259 /* benchmark */ = { - isa = PBXGroup; - children = ( - C1EA578B1680FE1200A21259 /* bench.gnu */, - C1EA578C1680FE1200A21259 /* bench.sh */, - C1EA578D1680FE1200A21259 /* benchmark-native.c */, - C1EA578E1680FE1200A21259 /* benchmark.js */, - C1EA578F1680FE1200A21259 /* README.md */, - ); - path = benchmark; - sourceTree = ""; - }; - C1EA57931680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA57941680FE1200A21259 /* compare_v1.js */, - C1EA57951680FE1200A21259 /* test.html */, - C1EA57961680FE1200A21259 /* test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA579B1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA579C1680FE1200A21259 /* cache-test.js */, - C1EA579D1680FE1200A21259 /* events-test.js */, - C1EA579E1680FE1200A21259 /* helpers */, - C1EA57A31680FE1200A21259 /* joinable-and-unjoinable-test.js */, - C1EA57A41680FE1200A21259 /* main-test-session-client.js */, - C1EA57A51680FE1200A21259 /* main-test.js */, - C1EA57A61680FE1200A21259 /* session-lifecycle-test.js */, - C1EA57A71680FE1200A21259 /* slave-header-test.js */, - C1EA57A81680FE1200A21259 /* test-helper-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA579E1680FE1200A21259 /* helpers */ = { - isa = PBXGroup; - children = ( - C1EA579F1680FE1200A21259 /* phantom-factory.js */, - C1EA57A01680FE1200A21259 /* phantom.js */, - C1EA57A11680FE1200A21259 /* server-loader.js */, - C1EA57A21680FE1200A21259 /* test-helper.js */, - ); - path = helpers; - sourceTree = ""; - }; - C1EA57A91680FE1200A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA57AA1680FE1200A21259 /* json */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA57AA1680FE1200A21259 /* json */ = { - isa = PBXGroup; - children = ( - C1EA57AB1680FE1200A21259 /* cycle.js */, - C1EA57AC1680FE1200A21259 /* json.js */, - C1EA57AD1680FE1200A21259 /* json2.js */, - C1EA57AE1680FE1200A21259 /* json_parse.js */, - C1EA57AF1680FE1200A21259 /* json_parse_state.js */, - C1EA57B01680FE1200A21259 /* README */, - ); - path = json; - sourceTree = ""; - }; - C1EA57B11680FE1200A21259 /* ramp-resources */ = { - isa = PBXGroup; - children = ( - C1EA57B21680FE1200A21259 /* .npmignore */, - C1EA57B31680FE1200A21259 /* .travis.yml */, - C1EA57B41680FE1200A21259 /* AUTHORS */, - C1EA57B51680FE1200A21259 /* autolint.js */, - C1EA57B61680FE1200A21259 /* buster.js */, - C1EA57B71680FE1200A21259 /* examples */, - C1EA57C41680FE1200A21259 /* lib */, - C1EA57D21680FE1200A21259 /* LICENSE */, - C1EA57D31680FE1200A21259 /* node_modules */, - C1EA58741680FE1200A21259 /* package.json */, - C1EA58751680FE1200A21259 /* Readme.rst */, - C1EA58761680FE1200A21259 /* test */, - ); - path = "ramp-resources"; - sourceTree = ""; - }; - C1EA57B71680FE1200A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA57B81680FE1200A21259 /* webserver */, - ); - path = examples; - sourceTree = ""; - }; - C1EA57B81680FE1200A21259 /* webserver */ = { - isa = PBXGroup; - children = ( - C1EA57B91680FE1200A21259 /* alternatives.json */, - C1EA57BA1680FE1200A21259 /* fixtures */, - C1EA57BF1680FE1200A21259 /* medium.json */, - C1EA57C01680FE1200A21259 /* publish.js */, - C1EA57C11680FE1200A21259 /* README.rst */, - C1EA57C21680FE1200A21259 /* server.js */, - C1EA57C31680FE1200A21259 /* small.json */, - ); - path = webserver; - sourceTree = ""; - }; - C1EA57BA1680FE1200A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA57BB1680FE1200A21259 /* 1.png */, - C1EA57BC1680FE1200A21259 /* 2.html */, - C1EA57BD1680FE1200A21259 /* 3.txt */, - C1EA57BE1680FE1200A21259 /* 4.tgz */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA57C41680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA57C51680FE1200A21259 /* file-etag.js */, - C1EA57C61680FE1200A21259 /* http-proxy.js */, - C1EA57C71680FE1200A21259 /* invalid-error.js */, - C1EA57C81680FE1200A21259 /* load-path.js */, - C1EA57C91680FE1200A21259 /* processors */, - C1EA57CB1680FE1200A21259 /* ramp-resources.js */, - C1EA57CC1680FE1200A21259 /* resource-combiner.js */, - C1EA57CD1680FE1200A21259 /* resource-file-resolver.js */, - C1EA57CE1680FE1200A21259 /* resource-middleware.js */, - C1EA57CF1680FE1200A21259 /* resource-set-cache.js */, - C1EA57D01680FE1200A21259 /* resource-set.js */, - C1EA57D11680FE1200A21259 /* resource.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA57C91680FE1200A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA57CA1680FE1200A21259 /* iife.js */, - ); - path = processors; - sourceTree = ""; - }; - C1EA57D31680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA57D41680FE1200A21259 /* .bin */, - C1EA57D61680FE1200A21259 /* lodash */, - C1EA580B1680FE1200A21259 /* mime */, - C1EA58141680FE1200A21259 /* minimatch */, - C1EA58281680FE1200A21259 /* multi-glob */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA57D41680FE1200A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA57D51680FE1200A21259 /* lodash */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA57D61680FE1200A21259 /* lodash */ = { - isa = PBXGroup; - children = ( - C1EA57D71680FE1200A21259 /* build */, - C1EA57DB1680FE1200A21259 /* build.js */, - C1EA57DC1680FE1200A21259 /* doc */, - C1EA57DE1680FE1200A21259 /* LICENSE.txt */, - C1EA57DF1680FE1200A21259 /* lodash.js */, - C1EA57E01680FE1200A21259 /* lodash.min.js */, - C1EA57E11680FE1200A21259 /* package.json */, - C1EA57E21680FE1200A21259 /* perf */, - C1EA57E41680FE1200A21259 /* README.md */, - C1EA57E51680FE1200A21259 /* test */, - C1EA57E71680FE1200A21259 /* vendor */, - ); - path = lodash; - sourceTree = ""; - }; - C1EA57D71680FE1200A21259 /* build */ = { - isa = PBXGroup; - children = ( - C1EA57D81680FE1200A21259 /* minify.js */, - C1EA57D91680FE1200A21259 /* post-compile.js */, - C1EA57DA1680FE1200A21259 /* pre-compile.js */, - ); - path = build; - sourceTree = ""; - }; - C1EA57DC1680FE1200A21259 /* doc */ = { - isa = PBXGroup; - children = ( - C1EA57DD1680FE1200A21259 /* README.md */, - ); - path = doc; - sourceTree = ""; - }; - C1EA57E21680FE1200A21259 /* perf */ = { - isa = PBXGroup; - children = ( - C1EA57E31680FE1200A21259 /* perf.js */, - ); - path = perf; - sourceTree = ""; - }; - C1EA57E51680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA57E61680FE1200A21259 /* test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA57E71680FE1200A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA57E81680FE1200A21259 /* benchmark.js */, - C1EA57ED1680FE1200A21259 /* closure-compiler */, - C1EA57F11680FE1200A21259 /* platform.js */, - C1EA57F51680FE1200A21259 /* qunit */, - C1EA57FA1680FE1200A21259 /* qunit-clib */, - C1EA57FE1680FE1200A21259 /* uglifyjs */, - C1EA58061680FE1200A21259 /* underscore */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA57E81680FE1200A21259 /* benchmark.js */ = { - isa = PBXGroup; - children = ( - C1EA57E91680FE1200A21259 /* benchmark.js */, - C1EA57EA1680FE1200A21259 /* LICENSE.txt */, - C1EA57EB1680FE1200A21259 /* nano.jar */, - C1EA57EC1680FE1200A21259 /* README.md */, - ); - path = benchmark.js; - sourceTree = ""; - }; - C1EA57ED1680FE1200A21259 /* closure-compiler */ = { - isa = PBXGroup; - children = ( - C1EA57EE1680FE1200A21259 /* compiler.jar */, - C1EA57EF1680FE1200A21259 /* COPYING */, - C1EA57F01680FE1200A21259 /* README */, - ); - path = "closure-compiler"; - sourceTree = ""; - }; - C1EA57F11680FE1200A21259 /* platform.js */ = { - isa = PBXGroup; - children = ( - C1EA57F21680FE1200A21259 /* LICENSE.txt */, - C1EA57F31680FE1200A21259 /* platform.js */, - C1EA57F41680FE1200A21259 /* README.md */, - ); - path = platform.js; - sourceTree = ""; - }; - C1EA57F51680FE1200A21259 /* qunit */ = { - isa = PBXGroup; - children = ( - C1EA57F61680FE1200A21259 /* qunit */, - C1EA57F91680FE1200A21259 /* README.md */, - ); - path = qunit; - sourceTree = ""; - }; - C1EA57F61680FE1200A21259 /* qunit */ = { - isa = PBXGroup; - children = ( - C1EA57F71680FE1200A21259 /* qunit-1.8.0.js */, - C1EA57F81680FE1200A21259 /* qunit.js */, - ); - path = qunit; - sourceTree = ""; - }; - C1EA57FA1680FE1200A21259 /* qunit-clib */ = { - isa = PBXGroup; - children = ( - C1EA57FB1680FE1200A21259 /* LICENSE.txt */, - C1EA57FC1680FE1200A21259 /* qunit-clib.js */, - C1EA57FD1680FE1200A21259 /* README.md */, - ); - path = "qunit-clib"; - sourceTree = ""; - }; - C1EA57FE1680FE1200A21259 /* uglifyjs */ = { - isa = PBXGroup; - children = ( - C1EA57FF1680FE1200A21259 /* lib */, - C1EA58041680FE1200A21259 /* README.org */, - C1EA58051680FE1200A21259 /* uglify-js.js */, - ); - path = uglifyjs; - sourceTree = ""; - }; - C1EA57FF1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA58001680FE1200A21259 /* consolidator.js */, - C1EA58011680FE1200A21259 /* parse-js.js */, - C1EA58021680FE1200A21259 /* process.js */, - C1EA58031680FE1200A21259 /* squeeze-more.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA58061680FE1200A21259 /* underscore */ = { - isa = PBXGroup; - children = ( - C1EA58071680FE1200A21259 /* LICENSE */, - C1EA58081680FE1200A21259 /* README.md */, - C1EA58091680FE1200A21259 /* underscore-min.js */, - C1EA580A1680FE1200A21259 /* underscore.js */, - ); - path = underscore; - sourceTree = ""; - }; - C1EA580B1680FE1200A21259 /* mime */ = { - isa = PBXGroup; - children = ( - C1EA580C1680FE1200A21259 /* LICENSE */, - C1EA580D1680FE1200A21259 /* mime.js */, - C1EA580E1680FE1200A21259 /* package.json */, - C1EA580F1680FE1200A21259 /* README.md */, - C1EA58101680FE1200A21259 /* test.js */, - C1EA58111680FE1200A21259 /* types */, - ); - path = mime; - sourceTree = ""; - }; - C1EA58111680FE1200A21259 /* types */ = { - isa = PBXGroup; - children = ( - C1EA58121680FE1200A21259 /* mime.types */, - C1EA58131680FE1200A21259 /* node.types */, - ); - path = types; - sourceTree = ""; - }; - C1EA58141680FE1200A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA58151680FE1200A21259 /* .travis.yml */, - C1EA58161680FE1200A21259 /* LICENSE */, - C1EA58171680FE1200A21259 /* minimatch.js */, - C1EA58181680FE1200A21259 /* node_modules */, - C1EA58221680FE1200A21259 /* package.json */, - C1EA58231680FE1200A21259 /* README.md */, - C1EA58241680FE1200A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA58181680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA58191680FE1200A21259 /* lru-cache */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA58191680FE1200A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA581A1680FE1200A21259 /* .npmignore */, - C1EA581B1680FE1200A21259 /* lib */, - C1EA581D1680FE1200A21259 /* LICENSE */, - C1EA581E1680FE1200A21259 /* package.json */, - C1EA581F1680FE1200A21259 /* README.md */, - C1EA58201680FE1200A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA581B1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA581C1680FE1200A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA58201680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58211680FE1200A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58241680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58251680FE1200A21259 /* basic.js */, - C1EA58261680FE1200A21259 /* brace-expand.js */, - C1EA58271680FE1200A21259 /* caching.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58281680FE1200A21259 /* multi-glob */ = { - isa = PBXGroup; - children = ( - C1EA58291680FE1200A21259 /* .npmignore */, - C1EA582A1680FE1200A21259 /* .travis.yml */, - C1EA582B1680FE1200A21259 /* AUTHORS */, - C1EA582C1680FE1200A21259 /* autolint.js */, - C1EA582D1680FE1200A21259 /* buster.js */, - C1EA582E1680FE1200A21259 /* lib */, - C1EA58301680FE1200A21259 /* LICENSE */, - C1EA58311680FE1200A21259 /* node_modules */, - C1EA58701680FE1200A21259 /* package.json */, - C1EA58711680FE1200A21259 /* Readme.rst */, - C1EA58721680FE1200A21259 /* test */, - ); - path = "multi-glob"; - sourceTree = ""; - }; - C1EA582E1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA582F1680FE1200A21259 /* multi-glob.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA58311680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA58321680FE1200A21259 /* glob */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA58321680FE1200A21259 /* glob */ = { - isa = PBXGroup; - children = ( - C1EA58331680FE1200A21259 /* .npmignore */, - C1EA58341680FE1200A21259 /* .travis.yml */, - C1EA58351680FE1200A21259 /* examples */, - C1EA58381680FE1200A21259 /* glob.js */, - C1EA58391680FE1200A21259 /* LICENSE */, - C1EA583A1680FE1200A21259 /* node_modules */, - C1EA58651680FE1200A21259 /* package.json */, - C1EA58661680FE1200A21259 /* README.md */, - C1EA58671680FE1200A21259 /* test */, - ); - path = glob; - sourceTree = ""; - }; - C1EA58351680FE1200A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA58361680FE1200A21259 /* g.js */, - C1EA58371680FE1200A21259 /* usr-local.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA583A1680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA583B1680FE1200A21259 /* graceful-fs */, - C1EA58431680FE1200A21259 /* inherits */, - C1EA58471680FE1200A21259 /* minimatch */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA583B1680FE1200A21259 /* graceful-fs */ = { - isa = PBXGroup; - children = ( - C1EA583C1680FE1200A21259 /* .npmignore */, - C1EA583D1680FE1200A21259 /* graceful-fs.js */, - C1EA583E1680FE1200A21259 /* LICENSE */, - C1EA583F1680FE1200A21259 /* package.json */, - C1EA58401680FE1200A21259 /* README.md */, - C1EA58411680FE1200A21259 /* test */, - ); - path = "graceful-fs"; - sourceTree = ""; - }; - C1EA58411680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58421680FE1200A21259 /* open.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58431680FE1200A21259 /* inherits */ = { - isa = PBXGroup; - children = ( - C1EA58441680FE1200A21259 /* inherits.js */, - C1EA58451680FE1200A21259 /* package.json */, - C1EA58461680FE1200A21259 /* README.md */, - ); - path = inherits; - sourceTree = ""; - }; - C1EA58471680FE1200A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA58481680FE1200A21259 /* .travis.yml */, - C1EA58491680FE1200A21259 /* LICENSE */, - C1EA584A1680FE1200A21259 /* minimatch.js */, - C1EA584B1680FE1200A21259 /* node_modules */, - C1EA585E1680FE1200A21259 /* package.json */, - C1EA585F1680FE1200A21259 /* README.md */, - C1EA58601680FE1200A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA584B1680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA584C1680FE1200A21259 /* lru-cache */, - C1EA58561680FE1200A21259 /* sigmund */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA584C1680FE1200A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA584D1680FE1200A21259 /* .npmignore */, - C1EA584E1680FE1200A21259 /* AUTHORS */, - C1EA584F1680FE1200A21259 /* lib */, - C1EA58511680FE1200A21259 /* LICENSE */, - C1EA58521680FE1200A21259 /* package.json */, - C1EA58531680FE1200A21259 /* README.md */, - C1EA58541680FE1200A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA584F1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA58501680FE1200A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA58541680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58551680FE1200A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58561680FE1200A21259 /* sigmund */ = { - isa = PBXGroup; - children = ( - C1EA58571680FE1200A21259 /* bench.js */, - C1EA58581680FE1200A21259 /* LICENSE */, - C1EA58591680FE1200A21259 /* package.json */, - C1EA585A1680FE1200A21259 /* README.md */, - C1EA585B1680FE1200A21259 /* sigmund.js */, - C1EA585C1680FE1200A21259 /* test */, - ); - path = sigmund; - sourceTree = ""; - }; - C1EA585C1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA585D1680FE1200A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58601680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58611680FE1200A21259 /* basic.js */, - C1EA58621680FE1200A21259 /* brace-expand.js */, - C1EA58631680FE1200A21259 /* caching.js */, - C1EA58641680FE1200A21259 /* defaults.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58671680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58681680FE1200A21259 /* 00-setup.js */, - C1EA58691680FE1200A21259 /* bash-comparison.js */, - C1EA586A1680FE1200A21259 /* cwd-test.js */, - C1EA586B1680FE1200A21259 /* mark.js */, - C1EA586C1680FE1200A21259 /* pause-resume.js */, - C1EA586D1680FE1200A21259 /* root-nomount.js */, - C1EA586E1680FE1200A21259 /* root.js */, - C1EA586F1680FE1200A21259 /* zz-cleanup.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58721680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58731680FE1200A21259 /* multi-glob-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58761680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58771680FE1200A21259 /* fixtures */, - C1EA587F1680FE1200A21259 /* http-proxy-test.js */, - C1EA58801680FE1200A21259 /* load-path-test.js */, - C1EA58811680FE1200A21259 /* processors */, - C1EA58831680FE1200A21259 /* resource-middleware-test.js */, - C1EA58841680FE1200A21259 /* resource-set-cache-test.js */, - C1EA58851680FE1200A21259 /* resource-set-test.js */, - C1EA58861680FE1200A21259 /* resource-test.js */, - C1EA58871680FE1200A21259 /* test-helper.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58771680FE1200A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA58781680FE1200A21259 /* bar.js */, - C1EA58791680FE1200A21259 /* foo.js */, - C1EA587A1680FE1200A21259 /* other-test */, - C1EA587D1680FE1200A21259 /* test */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA587A1680FE1200A21259 /* other-test */ = { - isa = PBXGroup; - children = ( - C1EA587B1680FE1200A21259 /* other.js */, - C1EA587C1680FE1200A21259 /* some-test.js */, - ); - path = "other-test"; - sourceTree = ""; - }; - C1EA587D1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA587E1680FE1200A21259 /* my-testish.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58811680FE1200A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA58821680FE1200A21259 /* iife-processor-test.js */, - ); - path = processors; - sourceTree = ""; - }; - C1EA58891680FE1200A21259 /* public */ = { - isa = PBXGroup; - children = ( - C1EA588A1680FE1200A21259 /* images */, - C1EA58A21680FE1200A21259 /* stylesheets */, - ); - path = public; - sourceTree = ""; - }; - C1EA588A1680FE1200A21259 /* images */ = { - isa = PBXGroup; - children = ( - C1EA588B1680FE1200A21259 /* android-256.png */, - C1EA588C1680FE1200A21259 /* android-64.png */, - C1EA588D1680FE1200A21259 /* chrome-64.png */, - C1EA588E1680FE1200A21259 /* firefox-64.png */, - C1EA588F1680FE1200A21259 /* ie-64.png */, - C1EA58901680FE1200A21259 /* ios-24.png */, - C1EA58911680FE1200A21259 /* ios-256.png */, - C1EA58921680FE1200A21259 /* linux-24.png */, - C1EA58931680FE1200A21259 /* linux-256.png */, - C1EA58941680FE1200A21259 /* linux-64.png */, - C1EA58951680FE1200A21259 /* opera-64.png */, - C1EA58961680FE1200A21259 /* osx-24.png */, - C1EA58971680FE1200A21259 /* osx-256.png */, - C1EA58981680FE1200A21259 /* osx-64.png */, - C1EA58991680FE1200A21259 /* osx-colored-128.png */, - C1EA589A1680FE1200A21259 /* osx-colored-64.png */, - C1EA589B1680FE1200A21259 /* osx-finder-128.png */, - C1EA589C1680FE1200A21259 /* osx-finder-64.png */, - C1EA589D1680FE1200A21259 /* safari-64.png */, - C1EA589E1680FE1200A21259 /* safari-mobile-64.png */, - C1EA589F1680FE1200A21259 /* windows-24.png */, - C1EA58A01680FE1200A21259 /* windows-256.png */, - C1EA58A11680FE1200A21259 /* windows-64.png */, - ); - path = images; - sourceTree = ""; - }; - C1EA58A21680FE1200A21259 /* stylesheets */ = { - isa = PBXGroup; - children = ( - C1EA58A31680FE1200A21259 /* buster-server.css */, - C1EA58A41680FE1200A21259 /* buster.css */, - ); - path = stylesheets; - sourceTree = ""; - }; - C1EA58A71680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58A81680FE1200A21259 /* server-cli-test.js */, - C1EA58A91680FE1200A21259 /* test-helper.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58AA1680FE1200A21259 /* views */ = { - isa = PBXGroup; - children = ( - C1EA58AB1680FE1200A21259 /* header.ejs */, - C1EA58AC1680FE1200A21259 /* index.ejs */, - ); - path = views; - sourceTree = ""; - }; - C1EA58AD1680FE1200A21259 /* buster-sinon */ = { - isa = PBXGroup; - children = ( - C1EA58AE1680FE1200A21259 /* .npmignore */, - C1EA58AF1680FE1200A21259 /* .travis.yml */, - C1EA58B01680FE1200A21259 /* lib */, - C1EA58B21680FE1200A21259 /* package.json */, - C1EA58B31680FE1200A21259 /* Readme.md */, - C1EA58B41680FE1200A21259 /* run-tests */, - C1EA58B51680FE1200A21259 /* test */, - ); - path = "buster-sinon"; - sourceTree = ""; - }; - C1EA58B01680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA58B11680FE1200A21259 /* buster-sinon.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA58B51680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58B61680FE1200A21259 /* buster-sinon-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58B71680FE1200A21259 /* buster-static */ = { - isa = PBXGroup; - children = ( - C1EA58B81680FE1200A21259 /* .npmignore */, - C1EA58B91680FE1200A21259 /* .travis.yml */, - C1EA58BA1680FE1200A21259 /* autolint.json */, - C1EA58BB1680FE1200A21259 /* bin */, - C1EA58BD1680FE1200A21259 /* buster.js */, - C1EA58BE1680FE1200A21259 /* lib */, - C1EA58C21680FE1200A21259 /* node_modules */, - C1EA5A221680FE1200A21259 /* package.json */, - C1EA5A231680FE1200A21259 /* Readme.md */, - C1EA5A241680FE1200A21259 /* test */, - ); - path = "buster-static"; - sourceTree = ""; - }; - C1EA58BB1680FE1200A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA58BC1680FE1200A21259 /* buster-static */, - ); - path = bin; - sourceTree = ""; - }; - C1EA58BE1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA58BF1680FE1200A21259 /* browser-wiring.js */, - C1EA58C01680FE1200A21259 /* buster-static.js */, - C1EA58C11680FE1200A21259 /* index.html */, - ); - path = lib; - sourceTree = ""; - }; - C1EA58C21680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA58C31680FE1200A21259 /* buster-cli */, - C1EA59701680FE1200A21259 /* mkdirp */, - C1EA59871680FE1200A21259 /* ramp-resources */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA58C31680FE1200A21259 /* buster-cli */ = { - isa = PBXGroup; - children = ( - C1EA58C41680FE1200A21259 /* .npmignore */, - C1EA58C51680FE1200A21259 /* .travis.yml */, - C1EA58C61680FE1200A21259 /* autolint.json */, - C1EA58C71680FE1200A21259 /* lib */, - C1EA58CF1680FE1200A21259 /* node_modules */, - C1EA596A1680FE1200A21259 /* package.json */, - C1EA596B1680FE1200A21259 /* Readme.md */, - C1EA596C1680FE1200A21259 /* run-tests */, - C1EA596D1680FE1200A21259 /* test */, - ); - path = "buster-cli"; - sourceTree = ""; - }; - C1EA58C71680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA58C81680FE1200A21259 /* buster-cli */, - C1EA58CD1680FE1200A21259 /* buster-cli.js */, - C1EA58CE1680FE1200A21259 /* test-helper.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA58C81680FE1200A21259 /* buster-cli */ = { - isa = PBXGroup; - children = ( - C1EA58C91680FE1200A21259 /* args.js */, - C1EA58CA1680FE1200A21259 /* config.js */, - C1EA58CB1680FE1200A21259 /* help.js */, - C1EA58CC1680FE1200A21259 /* logger.js */, - ); - path = "buster-cli"; - sourceTree = ""; - }; - C1EA58CF1680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA58D01680FE1200A21259 /* buster-configuration */, - C1EA590A1680FE1200A21259 /* buster-terminal */, - C1EA591A1680FE1200A21259 /* minimatch */, - C1EA59381680FE1200A21259 /* posix-argv-parser */, - C1EA59511680FE1200A21259 /* rimraf */, - C1EA595E1680FE1200A21259 /* stream-logger */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA58D01680FE1200A21259 /* buster-configuration */ = { - isa = PBXGroup; - children = ( - C1EA58D11680FE1200A21259 /* .travis.yml */, - C1EA58D21680FE1200A21259 /* autolint.json */, - C1EA58D31680FE1200A21259 /* buster.js */, - C1EA58D41680FE1200A21259 /* lib */, - C1EA58D91680FE1200A21259 /* node_modules */, - C1EA58FA1680FE1200A21259 /* package.json */, - C1EA58FB1680FE1200A21259 /* Readme.md */, - C1EA58FC1680FE1200A21259 /* test */, - C1EA59091680FE1200A21259 /* todo.org */, - ); - path = "buster-configuration"; - sourceTree = ""; - }; - C1EA58D41680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA58D51680FE1200A21259 /* buster-configuration.js */, - C1EA58D61680FE1200A21259 /* file-loader.js */, - C1EA58D71680FE1200A21259 /* group.js */, - C1EA58D81680FE1200A21259 /* util.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA58D91680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA58DA1680FE1200A21259 /* glob */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA58DA1680FE1200A21259 /* glob */ = { - isa = PBXGroup; - children = ( - C1EA58DB1680FE1200A21259 /* .npmignore */, - C1EA58DC1680FE1200A21259 /* .travis.yml */, - C1EA58DD1680FE1200A21259 /* examples */, - C1EA58E01680FE1200A21259 /* glob.js */, - C1EA58E11680FE1200A21259 /* LICENSE */, - C1EA58E21680FE1200A21259 /* node_modules */, - C1EA58EF1680FE1200A21259 /* package.json */, - C1EA58F01680FE1200A21259 /* README.md */, - C1EA58F11680FE1200A21259 /* test */, - ); - path = glob; - sourceTree = ""; - }; - C1EA58DD1680FE1200A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA58DE1680FE1200A21259 /* g.js */, - C1EA58DF1680FE1200A21259 /* usr-local.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA58E21680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA58E31680FE1200A21259 /* graceful-fs */, - C1EA58EB1680FE1200A21259 /* inherits */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA58E31680FE1200A21259 /* graceful-fs */ = { - isa = PBXGroup; - children = ( - C1EA58E41680FE1200A21259 /* .npmignore */, - C1EA58E51680FE1200A21259 /* graceful-fs.js */, - C1EA58E61680FE1200A21259 /* LICENSE */, - C1EA58E71680FE1200A21259 /* package.json */, - C1EA58E81680FE1200A21259 /* README.md */, - C1EA58E91680FE1200A21259 /* test */, - ); - path = "graceful-fs"; - sourceTree = ""; - }; - C1EA58E91680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58EA1680FE1200A21259 /* open.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58EB1680FE1200A21259 /* inherits */ = { - isa = PBXGroup; - children = ( - C1EA58EC1680FE1200A21259 /* inherits.js */, - C1EA58ED1680FE1200A21259 /* package.json */, - C1EA58EE1680FE1200A21259 /* README.md */, - ); - path = inherits; - sourceTree = ""; - }; - C1EA58F11680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58F21680FE1200A21259 /* 00-setup.js */, - C1EA58F31680FE1200A21259 /* bash-comparison.js */, - C1EA58F41680FE1200A21259 /* cwd-test.js */, - C1EA58F51680FE1200A21259 /* mark.js */, - C1EA58F61680FE1200A21259 /* pause-resume.js */, - C1EA58F71680FE1200A21259 /* root-nomount.js */, - C1EA58F81680FE1200A21259 /* root.js */, - C1EA58F91680FE1200A21259 /* zz-cleanup.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58FC1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA58FD1680FE1200A21259 /* buster-configuration-test.js */, - C1EA58FE1680FE1200A21259 /* file-loader-test.js */, - C1EA58FF1680FE1200A21259 /* fixtures */, - C1EA59071680FE1200A21259 /* group-test.js */, - C1EA59081680FE1200A21259 /* test-helper.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA58FF1680FE1200A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA59001680FE1200A21259 /* bar.js */, - C1EA59011680FE1200A21259 /* dups */, - C1EA59041680FE1200A21259 /* foo.js */, - C1EA59051680FE1200A21259 /* test */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA59011680FE1200A21259 /* dups */ = { - isa = PBXGroup; - children = ( - C1EA59021680FE1200A21259 /* file */, - C1EA59031680FE1200A21259 /* file.js */, - ); - path = dups; - sourceTree = ""; - }; - C1EA59051680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59061680FE1200A21259 /* my-testish.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA590A1680FE1200A21259 /* buster-terminal */ = { - isa = PBXGroup; - children = ( - C1EA590B1680FE1200A21259 /* .travis.yml */, - C1EA590C1680FE1200A21259 /* AUTHORS */, - C1EA590D1680FE1200A21259 /* autolint.json */, - C1EA590E1680FE1200A21259 /* buster.js */, - C1EA590F1680FE1200A21259 /* lib */, - C1EA59131680FE1200A21259 /* package.json */, - C1EA59141680FE1200A21259 /* Readme.md */, - C1EA59151680FE1200A21259 /* test */, - ); - path = "buster-terminal"; - sourceTree = ""; - }; - C1EA590F1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA59101680FE1200A21259 /* buster-terminal.js */, - C1EA59111680FE1200A21259 /* matrix.js */, - C1EA59121680FE1200A21259 /* relative-grid.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA59151680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59161680FE1200A21259 /* buster-terminal-test.js */, - C1EA59171680FE1200A21259 /* helper.js */, - C1EA59181680FE1200A21259 /* matrix-test.js */, - C1EA59191680FE1200A21259 /* relative-grid-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA591A1680FE1200A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA591B1680FE1200A21259 /* .travis.yml */, - C1EA591C1680FE1200A21259 /* LICENSE */, - C1EA591D1680FE1200A21259 /* minimatch.js */, - C1EA591E1680FE1200A21259 /* node_modules */, - C1EA59311680FE1200A21259 /* package.json */, - C1EA59321680FE1200A21259 /* README.md */, - C1EA59331680FE1200A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA591E1680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA591F1680FE1200A21259 /* lru-cache */, - C1EA59291680FE1200A21259 /* sigmund */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA591F1680FE1200A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA59201680FE1200A21259 /* .npmignore */, - C1EA59211680FE1200A21259 /* AUTHORS */, - C1EA59221680FE1200A21259 /* lib */, - C1EA59241680FE1200A21259 /* LICENSE */, - C1EA59251680FE1200A21259 /* package.json */, - C1EA59261680FE1200A21259 /* README.md */, - C1EA59271680FE1200A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA59221680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA59231680FE1200A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA59271680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59281680FE1200A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59291680FE1200A21259 /* sigmund */ = { - isa = PBXGroup; - children = ( - C1EA592A1680FE1200A21259 /* bench.js */, - C1EA592B1680FE1200A21259 /* LICENSE */, - C1EA592C1680FE1200A21259 /* package.json */, - C1EA592D1680FE1200A21259 /* README.md */, - C1EA592E1680FE1200A21259 /* sigmund.js */, - C1EA592F1680FE1200A21259 /* test */, - ); - path = sigmund; - sourceTree = ""; - }; - C1EA592F1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59301680FE1200A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59331680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59341680FE1200A21259 /* basic.js */, - C1EA59351680FE1200A21259 /* brace-expand.js */, - C1EA59361680FE1200A21259 /* caching.js */, - C1EA59371680FE1200A21259 /* defaults.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59381680FE1200A21259 /* posix-argv-parser */ = { - isa = PBXGroup; - children = ( - C1EA59391680FE1200A21259 /* .npmignore */, - C1EA593A1680FE1200A21259 /* .travis.yml */, - C1EA593B1680FE1200A21259 /* autolint.js */, - C1EA593C1680FE1200A21259 /* buster.js */, - C1EA593D1680FE1200A21259 /* lib */, - C1EA59461680FE1200A21259 /* LICENSE */, - C1EA59471680FE1200A21259 /* package.json */, - C1EA59481680FE1200A21259 /* Readme.md */, - C1EA59491680FE1200A21259 /* test */, - ); - path = "posix-argv-parser"; - sourceTree = ""; - }; - C1EA593D1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA593E1680FE1200A21259 /* argument.js */, - C1EA593F1680FE1200A21259 /* operand.js */, - C1EA59401680FE1200A21259 /* option.js */, - C1EA59411680FE1200A21259 /* parser.js */, - C1EA59421680FE1200A21259 /* posix-argv-parser.js */, - C1EA59431680FE1200A21259 /* shorthand.js */, - C1EA59441680FE1200A21259 /* types.js */, - C1EA59451680FE1200A21259 /* validators.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA59491680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA594A1680FE1200A21259 /* operand-test.js */, - C1EA594B1680FE1200A21259 /* option-test.js */, - C1EA594C1680FE1200A21259 /* parser-test.js */, - C1EA594D1680FE1200A21259 /* posix-argv-parser-test.js */, - C1EA594E1680FE1200A21259 /* shorthand-test.js */, - C1EA594F1680FE1200A21259 /* types-test.js */, - C1EA59501680FE1200A21259 /* validators-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59511680FE1200A21259 /* rimraf */ = { - isa = PBXGroup; - children = ( - C1EA59521680FE1200A21259 /* AUTHORS */, - C1EA59531680FE1200A21259 /* fiber.js */, - C1EA59541680FE1200A21259 /* LICENSE */, - C1EA59551680FE1200A21259 /* package.json */, - C1EA59561680FE1200A21259 /* README.md */, - C1EA59571680FE1200A21259 /* rimraf.js */, - C1EA59581680FE1200A21259 /* test */, - ); - path = rimraf; - sourceTree = ""; - }; - C1EA59581680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59591680FE1200A21259 /* run.sh */, - C1EA595A1680FE1200A21259 /* setup.sh */, - C1EA595B1680FE1200A21259 /* test-async.js */, - C1EA595C1680FE1200A21259 /* test-fiber.js */, - C1EA595D1680FE1200A21259 /* test-sync.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA595E1680FE1200A21259 /* stream-logger */ = { - isa = PBXGroup; - children = ( - C1EA595F1680FE1200A21259 /* .npmignore */, - C1EA59601680FE1200A21259 /* .travis.yml */, - C1EA59611680FE1200A21259 /* autolint.json */, - C1EA59621680FE1200A21259 /* buster.js */, - C1EA59631680FE1200A21259 /* lib */, - C1EA59651680FE1200A21259 /* LICENSE */, - C1EA59661680FE1200A21259 /* package.json */, - C1EA59671680FE1200A21259 /* Readme.md */, - C1EA59681680FE1200A21259 /* test */, - ); - path = "stream-logger"; - sourceTree = ""; - }; - C1EA59631680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA59641680FE1200A21259 /* stream-logger.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA59681680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59691680FE1200A21259 /* stream-logger-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA596D1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA596E1680FE1200A21259 /* buster-cli-test.js */, - C1EA596F1680FE1200A21259 /* buster.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59701680FE1200A21259 /* mkdirp */ = { - isa = PBXGroup; - children = ( - C1EA59711680FE1200A21259 /* .npmignore */, - C1EA59721680FE1200A21259 /* .travis.yml */, - C1EA59731680FE1200A21259 /* examples */, - C1EA59751680FE1200A21259 /* index.js */, - C1EA59761680FE1200A21259 /* LICENSE */, - C1EA59771680FE1200A21259 /* package.json */, - C1EA59781680FE1200A21259 /* README.markdown */, - C1EA59791680FE1200A21259 /* test */, - ); - path = mkdirp; - sourceTree = ""; - }; - C1EA59731680FE1200A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA59741680FE1200A21259 /* pow.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA59791680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA597A1680FE1200A21259 /* chmod.js */, - C1EA597B1680FE1200A21259 /* clobber.js */, - C1EA597C1680FE1200A21259 /* mkdirp.js */, - C1EA597D1680FE1200A21259 /* perm.js */, - C1EA597E1680FE1200A21259 /* perm_sync.js */, - C1EA597F1680FE1200A21259 /* race.js */, - C1EA59801680FE1200A21259 /* rel.js */, - C1EA59811680FE1200A21259 /* return.js */, - C1EA59821680FE1200A21259 /* return_sync.js */, - C1EA59831680FE1200A21259 /* root.js */, - C1EA59841680FE1200A21259 /* sync.js */, - C1EA59851680FE1200A21259 /* umask.js */, - C1EA59861680FE1200A21259 /* umask_sync.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59871680FE1200A21259 /* ramp-resources */ = { - isa = PBXGroup; - children = ( - C1EA59881680FE1200A21259 /* .npmignore */, - C1EA59891680FE1200A21259 /* .travis.yml */, - C1EA598A1680FE1200A21259 /* autolint.js */, - C1EA598B1680FE1200A21259 /* buster.js */, - C1EA598C1680FE1200A21259 /* examples */, - C1EA59981680FE1200A21259 /* lib */, - C1EA59A61680FE1200A21259 /* node_modules */, - C1EA5A0E1680FE1200A21259 /* package.json */, - C1EA5A0F1680FE1200A21259 /* Readme.md */, - C1EA5A101680FE1200A21259 /* test */, - ); - path = "ramp-resources"; - sourceTree = ""; - }; - C1EA598C1680FE1200A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA598D1680FE1200A21259 /* webserver */, - ); - path = examples; - sourceTree = ""; - }; - C1EA598D1680FE1200A21259 /* webserver */ = { - isa = PBXGroup; - children = ( - C1EA598E1680FE1200A21259 /* fixtures */, - C1EA59931680FE1200A21259 /* medium.json */, - C1EA59941680FE1200A21259 /* publish.js */, - C1EA59951680FE1200A21259 /* README.md */, - C1EA59961680FE1200A21259 /* server.js */, - C1EA59971680FE1200A21259 /* small.json */, - ); - path = webserver; - sourceTree = ""; - }; - C1EA598E1680FE1200A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA598F1680FE1200A21259 /* 1.png */, - C1EA59901680FE1200A21259 /* 2.html */, - C1EA59911680FE1200A21259 /* 3.txt */, - C1EA59921680FE1200A21259 /* 4.tgz */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA59981680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA59991680FE1200A21259 /* file-etag.js */, - C1EA599A1680FE1200A21259 /* http-proxy.js */, - C1EA599B1680FE1200A21259 /* invalid-error.js */, - C1EA599C1680FE1200A21259 /* load-path.js */, - C1EA599D1680FE1200A21259 /* processors */, - C1EA599F1680FE1200A21259 /* ramp-resources.js */, - C1EA59A01680FE1200A21259 /* resource-combiner.js */, - C1EA59A11680FE1200A21259 /* resource-file-resolver.js */, - C1EA59A21680FE1200A21259 /* resource-middleware.js */, - C1EA59A31680FE1200A21259 /* resource-set-cache.js */, - C1EA59A41680FE1200A21259 /* resource-set.js */, - C1EA59A51680FE1200A21259 /* resource.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA599D1680FE1200A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA599E1680FE1200A21259 /* iife.js */, - ); - path = processors; - sourceTree = ""; - }; - C1EA59A61680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA59A71680FE1200A21259 /* buster-glob */, - C1EA59F11680FE1200A21259 /* mime */, - C1EA59FA1680FE1200A21259 /* minimatch */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA59A71680FE1200A21259 /* buster-glob */ = { - isa = PBXGroup; - children = ( - C1EA59A81680FE1200A21259 /* .npmignore */, - C1EA59A91680FE1200A21259 /* .travis.yml */, - C1EA59AA1680FE1200A21259 /* autolint.json */, - C1EA59AB1680FE1200A21259 /* buster.js */, - C1EA59AC1680FE1200A21259 /* lib */, - C1EA59AE1680FE1200A21259 /* node_modules */, - C1EA59ED1680FE1200A21259 /* package.json */, - C1EA59EE1680FE1200A21259 /* Readme.md */, - C1EA59EF1680FE1200A21259 /* test */, - ); - path = "buster-glob"; - sourceTree = ""; - }; - C1EA59AC1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA59AD1680FE1200A21259 /* buster-glob.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA59AE1680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA59AF1680FE1200A21259 /* glob */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA59AF1680FE1200A21259 /* glob */ = { - isa = PBXGroup; - children = ( - C1EA59B01680FE1200A21259 /* .npmignore */, - C1EA59B11680FE1200A21259 /* .travis.yml */, - C1EA59B21680FE1200A21259 /* examples */, - C1EA59B51680FE1200A21259 /* glob.js */, - C1EA59B61680FE1200A21259 /* LICENSE */, - C1EA59B71680FE1200A21259 /* node_modules */, - C1EA59E21680FE1200A21259 /* package.json */, - C1EA59E31680FE1200A21259 /* README.md */, - C1EA59E41680FE1200A21259 /* test */, - ); - path = glob; - sourceTree = ""; - }; - C1EA59B21680FE1200A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA59B31680FE1200A21259 /* g.js */, - C1EA59B41680FE1200A21259 /* usr-local.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA59B71680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA59B81680FE1200A21259 /* graceful-fs */, - C1EA59C01680FE1200A21259 /* inherits */, - C1EA59C41680FE1200A21259 /* minimatch */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA59B81680FE1200A21259 /* graceful-fs */ = { - isa = PBXGroup; - children = ( - C1EA59B91680FE1200A21259 /* .npmignore */, - C1EA59BA1680FE1200A21259 /* graceful-fs.js */, - C1EA59BB1680FE1200A21259 /* LICENSE */, - C1EA59BC1680FE1200A21259 /* package.json */, - C1EA59BD1680FE1200A21259 /* README.md */, - C1EA59BE1680FE1200A21259 /* test */, - ); - path = "graceful-fs"; - sourceTree = ""; - }; - C1EA59BE1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59BF1680FE1200A21259 /* open.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59C01680FE1200A21259 /* inherits */ = { - isa = PBXGroup; - children = ( - C1EA59C11680FE1200A21259 /* inherits.js */, - C1EA59C21680FE1200A21259 /* package.json */, - C1EA59C31680FE1200A21259 /* README.md */, - ); - path = inherits; - sourceTree = ""; - }; - C1EA59C41680FE1200A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA59C51680FE1200A21259 /* .travis.yml */, - C1EA59C61680FE1200A21259 /* LICENSE */, - C1EA59C71680FE1200A21259 /* minimatch.js */, - C1EA59C81680FE1200A21259 /* node_modules */, - C1EA59DB1680FE1200A21259 /* package.json */, - C1EA59DC1680FE1200A21259 /* README.md */, - C1EA59DD1680FE1200A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA59C81680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA59C91680FE1200A21259 /* lru-cache */, - C1EA59D31680FE1200A21259 /* sigmund */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA59C91680FE1200A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA59CA1680FE1200A21259 /* .npmignore */, - C1EA59CB1680FE1200A21259 /* AUTHORS */, - C1EA59CC1680FE1200A21259 /* lib */, - C1EA59CE1680FE1200A21259 /* LICENSE */, - C1EA59CF1680FE1200A21259 /* package.json */, - C1EA59D01680FE1200A21259 /* README.md */, - C1EA59D11680FE1200A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA59CC1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA59CD1680FE1200A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA59D11680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59D21680FE1200A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59D31680FE1200A21259 /* sigmund */ = { - isa = PBXGroup; - children = ( - C1EA59D41680FE1200A21259 /* bench.js */, - C1EA59D51680FE1200A21259 /* LICENSE */, - C1EA59D61680FE1200A21259 /* package.json */, - C1EA59D71680FE1200A21259 /* README.md */, - C1EA59D81680FE1200A21259 /* sigmund.js */, - C1EA59D91680FE1200A21259 /* test */, - ); - path = sigmund; - sourceTree = ""; - }; - C1EA59D91680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59DA1680FE1200A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59DD1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59DE1680FE1200A21259 /* basic.js */, - C1EA59DF1680FE1200A21259 /* brace-expand.js */, - C1EA59E01680FE1200A21259 /* caching.js */, - C1EA59E11680FE1200A21259 /* defaults.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59E41680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59E51680FE1200A21259 /* 00-setup.js */, - C1EA59E61680FE1200A21259 /* bash-comparison.js */, - C1EA59E71680FE1200A21259 /* cwd-test.js */, - C1EA59E81680FE1200A21259 /* mark.js */, - C1EA59E91680FE1200A21259 /* pause-resume.js */, - C1EA59EA1680FE1200A21259 /* root-nomount.js */, - C1EA59EB1680FE1200A21259 /* root.js */, - C1EA59EC1680FE1200A21259 /* zz-cleanup.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59EF1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA59F01680FE1200A21259 /* buster-glob-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA59F11680FE1200A21259 /* mime */ = { - isa = PBXGroup; - children = ( - C1EA59F21680FE1200A21259 /* LICENSE */, - C1EA59F31680FE1200A21259 /* mime.js */, - C1EA59F41680FE1200A21259 /* package.json */, - C1EA59F51680FE1200A21259 /* README.md */, - C1EA59F61680FE1200A21259 /* test.js */, - C1EA59F71680FE1200A21259 /* types */, - ); - path = mime; - sourceTree = ""; - }; - C1EA59F71680FE1200A21259 /* types */ = { - isa = PBXGroup; - children = ( - C1EA59F81680FE1200A21259 /* mime.types */, - C1EA59F91680FE1200A21259 /* node.types */, - ); - path = types; - sourceTree = ""; - }; - C1EA59FA1680FE1200A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA59FB1680FE1200A21259 /* .travis.yml */, - C1EA59FC1680FE1200A21259 /* LICENSE */, - C1EA59FD1680FE1200A21259 /* minimatch.js */, - C1EA59FE1680FE1200A21259 /* node_modules */, - C1EA5A081680FE1200A21259 /* package.json */, - C1EA5A091680FE1200A21259 /* README.md */, - C1EA5A0A1680FE1200A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA59FE1680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA59FF1680FE1200A21259 /* lru-cache */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA59FF1680FE1200A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA5A001680FE1200A21259 /* .npmignore */, - C1EA5A011680FE1200A21259 /* lib */, - C1EA5A031680FE1200A21259 /* LICENSE */, - C1EA5A041680FE1200A21259 /* package.json */, - C1EA5A051680FE1200A21259 /* README.md */, - C1EA5A061680FE1200A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA5A011680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5A021680FE1200A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5A061680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5A071680FE1200A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5A0A1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5A0B1680FE1200A21259 /* basic.js */, - C1EA5A0C1680FE1200A21259 /* brace-expand.js */, - C1EA5A0D1680FE1200A21259 /* caching.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5A101680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5A111680FE1200A21259 /* fixtures */, - C1EA5A191680FE1200A21259 /* http-proxy-test.js */, - C1EA5A1A1680FE1200A21259 /* load-path-test.js */, - C1EA5A1B1680FE1200A21259 /* processors */, - C1EA5A1D1680FE1200A21259 /* resource-middleware-test.js */, - C1EA5A1E1680FE1200A21259 /* resource-set-cache-test.js */, - C1EA5A1F1680FE1200A21259 /* resource-set-test.js */, - C1EA5A201680FE1200A21259 /* resource-test.js */, - C1EA5A211680FE1200A21259 /* test-helper.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5A111680FE1200A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA5A121680FE1200A21259 /* bar.js */, - C1EA5A131680FE1200A21259 /* foo.js */, - C1EA5A141680FE1200A21259 /* other-test */, - C1EA5A171680FE1200A21259 /* test */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA5A141680FE1200A21259 /* other-test */ = { - isa = PBXGroup; - children = ( - C1EA5A151680FE1200A21259 /* other.js */, - C1EA5A161680FE1200A21259 /* some-test.js */, - ); - path = "other-test"; - sourceTree = ""; - }; - C1EA5A171680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5A181680FE1200A21259 /* my-testish.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5A1B1680FE1200A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA5A1C1680FE1200A21259 /* iife-processor-test.js */, - ); - path = processors; - sourceTree = ""; - }; - C1EA5A241680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5A251680FE1200A21259 /* buster-static-test.js */, - C1EA5A261680FE1200A21259 /* fixtures */, - ); - path = test; - sourceTree = ""; - }; - C1EA5A261680FE1200A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA5A271680FE1200A21259 /* some-test.js */, - C1EA5A281680FE1200A21259 /* test-config.js */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA5A291680FE1200A21259 /* buster-syntax */ = { - isa = PBXGroup; - children = ( - C1EA5A2A1680FE1200A21259 /* .npmignore */, - C1EA5A2B1680FE1200A21259 /* .travis.yml */, - C1EA5A2C1680FE1200A21259 /* autolint.json */, - C1EA5A2D1680FE1200A21259 /* buster.js */, - C1EA5A2E1680FE1200A21259 /* lib */, - C1EA5A311680FE1200A21259 /* node_modules */, - C1EA5DAC1680FE1200A21259 /* package.json */, - C1EA5DAD1680FE1200A21259 /* Readme.md */, - C1EA5DAE1680FE1200A21259 /* test */, - ); - path = "buster-syntax"; - sourceTree = ""; - }; - C1EA5A2E1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5A2F1680FE1200A21259 /* buster-syntax.js */, - C1EA5A301680FE1200A21259 /* syntax.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5A311680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA5A321680FE1200A21259 /* .bin */, - C1EA5A341680FE1200A21259 /* jsdom */, - C1EA5D361680FE1200A21259 /* uglify-js */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA5A321680FE1200A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA5A331680FE1200A21259 /* uglifyjs */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA5A341680FE1200A21259 /* jsdom */ = { - isa = PBXGroup; - children = ( - C1EA5A351680FE1200A21259 /* lib */, - C1EA5A531680FE1200A21259 /* LICENSE.txt */, - C1EA5A541680FE1200A21259 /* node_modules */, - C1EA5D341680FE1200A21259 /* package.json */, - C1EA5D351680FE1200A21259 /* README.md */, - ); - path = jsdom; - sourceTree = ""; - }; - C1EA5A351680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5A361680FE1200A21259 /* jsdom */, - C1EA5A521680FE1200A21259 /* jsdom.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5A361680FE1200A21259 /* jsdom */ = { - isa = PBXGroup; - children = ( - C1EA5A371680FE1200A21259 /* browser */, - C1EA5A3D1680FE1200A21259 /* level1 */, - C1EA5A3F1680FE1200A21259 /* level2 */, - C1EA5A471680FE1200A21259 /* level3 */, - C1EA5A4E1680FE1200A21259 /* selectors */, - C1EA5A511680FE1200A21259 /* utils.js */, - ); - path = jsdom; - sourceTree = ""; - }; - C1EA5A371680FE1200A21259 /* browser */ = { - isa = PBXGroup; - children = ( - C1EA5A381680FE1200A21259 /* documentfeatures.js */, - C1EA5A391680FE1200A21259 /* domtohtml.js */, - C1EA5A3A1680FE1200A21259 /* htmlencoding.js */, - C1EA5A3B1680FE1200A21259 /* htmltodom.js */, - C1EA5A3C1680FE1200A21259 /* index.js */, - ); - path = browser; - sourceTree = ""; - }; - C1EA5A3D1680FE1200A21259 /* level1 */ = { - isa = PBXGroup; - children = ( - C1EA5A3E1680FE1200A21259 /* core.js */, - ); - path = level1; - sourceTree = ""; - }; - C1EA5A3F1680FE1200A21259 /* level2 */ = { - isa = PBXGroup; - children = ( - C1EA5A401680FE1200A21259 /* core.js */, - C1EA5A411680FE1200A21259 /* events.js */, - C1EA5A421680FE1200A21259 /* html.js */, - C1EA5A431680FE1200A21259 /* index.js */, - C1EA5A441680FE1200A21259 /* languages */, - C1EA5A461680FE1200A21259 /* style.js */, - ); - path = level2; - sourceTree = ""; - }; - C1EA5A441680FE1200A21259 /* languages */ = { - isa = PBXGroup; - children = ( - C1EA5A451680FE1200A21259 /* javascript.js */, - ); - path = languages; - sourceTree = ""; - }; - C1EA5A471680FE1200A21259 /* level3 */ = { - isa = PBXGroup; - children = ( - C1EA5A481680FE1200A21259 /* core.js */, - C1EA5A491680FE1200A21259 /* events.js */, - C1EA5A4A1680FE1200A21259 /* html.js */, - C1EA5A4B1680FE1200A21259 /* index.js */, - C1EA5A4C1680FE1200A21259 /* ls.js */, - C1EA5A4D1680FE1200A21259 /* xpath.js */, - ); - path = level3; - sourceTree = ""; - }; - C1EA5A4E1680FE1200A21259 /* selectors */ = { - isa = PBXGroup; - children = ( - C1EA5A4F1680FE1200A21259 /* index.js */, - C1EA5A501680FE1200A21259 /* sizzle.js */, - ); - path = selectors; - sourceTree = ""; - }; - C1EA5A541680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA5A551680FE1200A21259 /* contextify */, - C1EA5A7C1680FE1200A21259 /* cssom */, - C1EA5A901680FE1200A21259 /* cssstyle */, - C1EA5C251680FE1200A21259 /* htmlparser */, - C1EA5C991680FE1200A21259 /* request */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA5A551680FE1200A21259 /* contextify */ = { - isa = PBXGroup; - children = ( - C1EA5A561680FE1200A21259 /* .npmignore */, - C1EA5A571680FE1200A21259 /* binding.gyp */, - C1EA5A581680FE1200A21259 /* build */, - C1EA5A6C1680FE1200A21259 /* changelog */, - C1EA5A6D1680FE1200A21259 /* lib */, - C1EA5A6F1680FE1200A21259 /* LICENSE.txt */, - C1EA5A701680FE1200A21259 /* node_modules */, - C1EA5A751680FE1200A21259 /* package.json */, - C1EA5A761680FE1200A21259 /* README.md */, - C1EA5A771680FE1200A21259 /* src */, - C1EA5A791680FE1200A21259 /* test */, - C1EA5A7B1680FE1200A21259 /* wscript */, - ); - path = contextify; - sourceTree = ""; - }; - C1EA5A581680FE1200A21259 /* build */ = { - isa = PBXGroup; - children = ( - C1EA5A591680FE1200A21259 /* binding.Makefile */, - C1EA5A5A1680FE1200A21259 /* config.gypi */, - C1EA5A5B1680FE1200A21259 /* contextify.target.mk */, - C1EA5A5C1680FE1200A21259 /* gyp-mac-tool */, - C1EA5A5D1680FE1200A21259 /* Makefile */, - C1EA5A5E1680FE1200A21259 /* Release */, - ); - path = build; - sourceTree = ""; - }; - C1EA5A5E1680FE1200A21259 /* Release */ = { - isa = PBXGroup; - children = ( - C1EA5A5F1680FE1200A21259 /* .deps */, - C1EA5A661680FE1200A21259 /* contextify.node */, - C1EA5A671680FE1200A21259 /* linker.lock */, - C1EA5A681680FE1200A21259 /* obj.target */, - ); - path = Release; - sourceTree = ""; - }; - C1EA5A5F1680FE1200A21259 /* .deps */ = { - isa = PBXGroup; - children = ( - C1EA5A601680FE1200A21259 /* Release */, - ); - path = .deps; - sourceTree = ""; - }; - C1EA5A601680FE1200A21259 /* Release */ = { - isa = PBXGroup; - children = ( - C1EA5A611680FE1200A21259 /* contextify.node.d */, - C1EA5A621680FE1200A21259 /* obj.target */, - ); - path = Release; - sourceTree = ""; - }; - C1EA5A621680FE1200A21259 /* obj.target */ = { - isa = PBXGroup; - children = ( - C1EA5A631680FE1200A21259 /* contextify */, - ); - path = obj.target; - sourceTree = ""; - }; - C1EA5A631680FE1200A21259 /* contextify */ = { - isa = PBXGroup; - children = ( - C1EA5A641680FE1200A21259 /* src */, - ); - path = contextify; - sourceTree = ""; - }; - C1EA5A641680FE1200A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA5A651680FE1200A21259 /* contextify.o.d */, - ); - path = src; - sourceTree = ""; - }; - C1EA5A681680FE1200A21259 /* obj.target */ = { - isa = PBXGroup; - children = ( - C1EA5A691680FE1200A21259 /* contextify */, - ); - path = obj.target; - sourceTree = ""; - }; - C1EA5A691680FE1200A21259 /* contextify */ = { - isa = PBXGroup; - children = ( - C1EA5A6A1680FE1200A21259 /* src */, - ); - path = contextify; - sourceTree = ""; - }; - C1EA5A6A1680FE1200A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA5A6B1680FE1200A21259 /* contextify.o */, - ); - path = src; - sourceTree = ""; - }; - C1EA5A6D1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5A6E1680FE1200A21259 /* contextify.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5A701680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA5A711680FE1200A21259 /* bindings */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA5A711680FE1200A21259 /* bindings */ = { - isa = PBXGroup; - children = ( - C1EA5A721680FE1200A21259 /* bindings.js */, - C1EA5A731680FE1200A21259 /* package.json */, - C1EA5A741680FE1200A21259 /* README.md */, - ); - path = bindings; - sourceTree = ""; - }; - C1EA5A771680FE1200A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA5A781680FE1200A21259 /* contextify.cc */, - ); - path = src; - sourceTree = ""; - }; - C1EA5A791680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5A7A1680FE1200A21259 /* contextify.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5A7C1680FE1200A21259 /* cssom */ = { - isa = PBXGroup; - children = ( - C1EA5A7D1680FE1200A21259 /* .gitmodules */, - C1EA5A7E1680FE1200A21259 /* .npmignore */, - C1EA5A7F1680FE1200A21259 /* lib */, - C1EA5A8E1680FE1200A21259 /* package.json */, - C1EA5A8F1680FE1200A21259 /* README.mdown */, - ); - path = cssom; - sourceTree = ""; - }; - C1EA5A7F1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5A801680FE1200A21259 /* clone.js */, - C1EA5A811680FE1200A21259 /* CSSFontFaceRule.js */, - C1EA5A821680FE1200A21259 /* CSSImportRule.js */, - C1EA5A831680FE1200A21259 /* CSSKeyframeRule.js */, - C1EA5A841680FE1200A21259 /* CSSKeyframesRule.js */, - C1EA5A851680FE1200A21259 /* CSSMediaRule.js */, - C1EA5A861680FE1200A21259 /* CSSRule.js */, - C1EA5A871680FE1200A21259 /* CSSStyleDeclaration.js */, - C1EA5A881680FE1200A21259 /* CSSStyleRule.js */, - C1EA5A891680FE1200A21259 /* CSSStyleSheet.js */, - C1EA5A8A1680FE1200A21259 /* index.js */, - C1EA5A8B1680FE1200A21259 /* MediaList.js */, - C1EA5A8C1680FE1200A21259 /* parse.js */, - C1EA5A8D1680FE1200A21259 /* StyleSheet.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5A901680FE1200A21259 /* cssstyle */ = { - isa = PBXGroup; - children = ( - C1EA5A911680FE1200A21259 /* .npmignore */, - C1EA5A921680FE1200A21259 /* lib */, - C1EA5C201680FE1200A21259 /* make_properties.pl */, - C1EA5C211680FE1200A21259 /* package.json */, - C1EA5C221680FE1200A21259 /* README.md */, - C1EA5C231680FE1200A21259 /* tests */, - ); - path = cssstyle; - sourceTree = ""; - }; - C1EA5A921680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5A931680FE1200A21259 /* CSSStyleDeclaration.js */, - C1EA5A941680FE1200A21259 /* properties */, - C1EA5C1F1680FE1200A21259 /* props */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5A941680FE1200A21259 /* properties */ = { - isa = PBXGroup; - children = ( - C1EA5A951680FE1200A21259 /* alignmentBaseline.js */, - C1EA5A961680FE1200A21259 /* azimuth.js */, - C1EA5A971680FE1200A21259 /* background.js */, - C1EA5A981680FE1200A21259 /* backgroundAttachment.js */, - C1EA5A991680FE1200A21259 /* backgroundClip.js */, - C1EA5A9A1680FE1200A21259 /* backgroundColor.js */, - C1EA5A9B1680FE1200A21259 /* backgroundImage.js */, - C1EA5A9C1680FE1200A21259 /* backgroundOrigin.js */, - C1EA5A9D1680FE1200A21259 /* backgroundPosition.js */, - C1EA5A9E1680FE1200A21259 /* backgroundPositionX.js */, - C1EA5A9F1680FE1200A21259 /* backgroundPositionY.js */, - C1EA5AA01680FE1200A21259 /* backgroundRepeat.js */, - C1EA5AA11680FE1200A21259 /* backgroundRepeatX.js */, - C1EA5AA21680FE1200A21259 /* backgroundRepeatY.js */, - C1EA5AA31680FE1200A21259 /* backgroundSize.js */, - C1EA5AA41680FE1200A21259 /* baselineShift.js */, - C1EA5AA51680FE1200A21259 /* border.js */, - C1EA5AA61680FE1200A21259 /* borderBottom.js */, - C1EA5AA71680FE1200A21259 /* borderBottomColor.js */, - C1EA5AA81680FE1200A21259 /* borderBottomLeftRadius.js */, - C1EA5AA91680FE1200A21259 /* borderBottomRightRadius.js */, - C1EA5AAA1680FE1200A21259 /* borderBottomStyle.js */, - C1EA5AAB1680FE1200A21259 /* borderBottomWidth.js */, - C1EA5AAC1680FE1200A21259 /* borderCollapse.js */, - C1EA5AAD1680FE1200A21259 /* borderColor.js */, - C1EA5AAE1680FE1200A21259 /* borderImage.js */, - C1EA5AAF1680FE1200A21259 /* borderImageOutset.js */, - C1EA5AB01680FE1200A21259 /* borderImageRepeat.js */, - C1EA5AB11680FE1200A21259 /* borderImageSlice.js */, - C1EA5AB21680FE1200A21259 /* borderImageSource.js */, - C1EA5AB31680FE1200A21259 /* borderImageWidth.js */, - C1EA5AB41680FE1200A21259 /* borderLeft.js */, - C1EA5AB51680FE1200A21259 /* borderLeftColor.js */, - C1EA5AB61680FE1200A21259 /* borderLeftStyle.js */, - C1EA5AB71680FE1200A21259 /* borderLeftWidth.js */, - C1EA5AB81680FE1200A21259 /* borderRadius.js */, - C1EA5AB91680FE1200A21259 /* borderRight.js */, - C1EA5ABA1680FE1200A21259 /* borderRightColor.js */, - C1EA5ABB1680FE1200A21259 /* borderRightStyle.js */, - C1EA5ABC1680FE1200A21259 /* borderRightWidth.js */, - C1EA5ABD1680FE1200A21259 /* borderSpacing.js */, - C1EA5ABE1680FE1200A21259 /* borderStyle.js */, - C1EA5ABF1680FE1200A21259 /* borderTop.js */, - C1EA5AC01680FE1200A21259 /* borderTopColor.js */, - C1EA5AC11680FE1200A21259 /* borderTopLeftRadius.js */, - C1EA5AC21680FE1200A21259 /* borderTopRightRadius.js */, - C1EA5AC31680FE1200A21259 /* borderTopStyle.js */, - C1EA5AC41680FE1200A21259 /* borderTopWidth.js */, - C1EA5AC51680FE1200A21259 /* borderWidth.js */, - C1EA5AC61680FE1200A21259 /* bottom.js */, - C1EA5AC71680FE1200A21259 /* boxShadow.js */, - C1EA5AC81680FE1200A21259 /* boxSizing.js */, - C1EA5AC91680FE1200A21259 /* captionSide.js */, - C1EA5ACA1680FE1200A21259 /* clear.js */, - C1EA5ACB1680FE1200A21259 /* clip.js */, - C1EA5ACC1680FE1200A21259 /* clipPath.js */, - C1EA5ACD1680FE1200A21259 /* clipRule.js */, - C1EA5ACE1680FE1200A21259 /* color.js */, - C1EA5ACF1680FE1200A21259 /* colorInterpolation.js */, - C1EA5AD01680FE1200A21259 /* colorInterpolationFilters.js */, - C1EA5AD11680FE1200A21259 /* colorProfile.js */, - C1EA5AD21680FE1200A21259 /* colorRendering.js */, - C1EA5AD31680FE1200A21259 /* content.js */, - C1EA5AD41680FE1200A21259 /* counterIncrement.js */, - C1EA5AD51680FE1200A21259 /* counterReset.js */, - C1EA5AD61680FE1200A21259 /* cssFloat.js */, - C1EA5AD71680FE1200A21259 /* cue.js */, - C1EA5AD81680FE1200A21259 /* cueAfter.js */, - C1EA5AD91680FE1200A21259 /* cueBefore.js */, - C1EA5ADA1680FE1200A21259 /* cursor.js */, - C1EA5ADB1680FE1200A21259 /* direction.js */, - C1EA5ADC1680FE1200A21259 /* display.js */, - C1EA5ADD1680FE1200A21259 /* dominantBaseline.js */, - C1EA5ADE1680FE1200A21259 /* elevation.js */, - C1EA5ADF1680FE1200A21259 /* emptyCells.js */, - C1EA5AE01680FE1200A21259 /* enableBackground.js */, - C1EA5AE11680FE1200A21259 /* fill.js */, - C1EA5AE21680FE1200A21259 /* fillOpacity.js */, - C1EA5AE31680FE1200A21259 /* fillRule.js */, - C1EA5AE41680FE1200A21259 /* filter.js */, - C1EA5AE51680FE1200A21259 /* floodColor.js */, - C1EA5AE61680FE1200A21259 /* floodOpacity.js */, - C1EA5AE71680FE1200A21259 /* font.js */, - C1EA5AE81680FE1200A21259 /* fontFamily.js */, - C1EA5AE91680FE1200A21259 /* fontSize.js */, - C1EA5AEA1680FE1200A21259 /* fontSizeAdjust.js */, - C1EA5AEB1680FE1200A21259 /* fontStretch.js */, - C1EA5AEC1680FE1200A21259 /* fontStyle.js */, - C1EA5AED1680FE1200A21259 /* fontVariant.js */, - C1EA5AEE1680FE1200A21259 /* fontWeight.js */, - C1EA5AEF1680FE1200A21259 /* glyphOrientationHorizontal.js */, - C1EA5AF01680FE1200A21259 /* glyphOrientationVertical.js */, - C1EA5AF11680FE1200A21259 /* height.js */, - C1EA5AF21680FE1200A21259 /* imageRendering.js */, - C1EA5AF31680FE1200A21259 /* kerning.js */, - C1EA5AF41680FE1200A21259 /* left.js */, - C1EA5AF51680FE1200A21259 /* letterSpacing.js */, - C1EA5AF61680FE1200A21259 /* lightingColor.js */, - C1EA5AF71680FE1200A21259 /* lineHeight.js */, - C1EA5AF81680FE1200A21259 /* listStyle.js */, - C1EA5AF91680FE1200A21259 /* listStyleImage.js */, - C1EA5AFA1680FE1200A21259 /* listStylePosition.js */, - C1EA5AFB1680FE1200A21259 /* listStyleType.js */, - C1EA5AFC1680FE1200A21259 /* margin.js */, - C1EA5AFD1680FE1200A21259 /* marginBottom.js */, - C1EA5AFE1680FE1200A21259 /* marginLeft.js */, - C1EA5AFF1680FE1200A21259 /* marginRight.js */, - C1EA5B001680FE1200A21259 /* marginTop.js */, - C1EA5B011680FE1200A21259 /* marker.js */, - C1EA5B021680FE1200A21259 /* markerEnd.js */, - C1EA5B031680FE1200A21259 /* markerMid.js */, - C1EA5B041680FE1200A21259 /* markerOffset.js */, - C1EA5B051680FE1200A21259 /* markerStart.js */, - C1EA5B061680FE1200A21259 /* marks.js */, - C1EA5B071680FE1200A21259 /* mask.js */, - C1EA5B081680FE1200A21259 /* maxHeight.js */, - C1EA5B091680FE1200A21259 /* maxWidth.js */, - C1EA5B0A1680FE1200A21259 /* minHeight.js */, - C1EA5B0B1680FE1200A21259 /* minWidth.js */, - C1EA5B0C1680FE1200A21259 /* opacity.js */, - C1EA5B0D1680FE1200A21259 /* orphans.js */, - C1EA5B0E1680FE1200A21259 /* outline.js */, - C1EA5B0F1680FE1200A21259 /* outlineColor.js */, - C1EA5B101680FE1200A21259 /* outlineOffset.js */, - C1EA5B111680FE1200A21259 /* outlineStyle.js */, - C1EA5B121680FE1200A21259 /* outlineWidth.js */, - C1EA5B131680FE1200A21259 /* overflow.js */, - C1EA5B141680FE1200A21259 /* overflowX.js */, - C1EA5B151680FE1200A21259 /* overflowY.js */, - C1EA5B161680FE1200A21259 /* padding.js */, - C1EA5B171680FE1200A21259 /* paddingBottom.js */, - C1EA5B181680FE1200A21259 /* paddingLeft.js */, - C1EA5B191680FE1200A21259 /* paddingRight.js */, - C1EA5B1A1680FE1200A21259 /* paddingTop.js */, - C1EA5B1B1680FE1200A21259 /* page.js */, - C1EA5B1C1680FE1200A21259 /* pageBreakAfter.js */, - C1EA5B1D1680FE1200A21259 /* pageBreakBefore.js */, - C1EA5B1E1680FE1200A21259 /* pageBreakInside.js */, - C1EA5B1F1680FE1200A21259 /* pause.js */, - C1EA5B201680FE1200A21259 /* pauseAfter.js */, - C1EA5B211680FE1200A21259 /* pauseBefore.js */, - C1EA5B221680FE1200A21259 /* pitch.js */, - C1EA5B231680FE1200A21259 /* pitchRange.js */, - C1EA5B241680FE1200A21259 /* playDuring.js */, - C1EA5B251680FE1200A21259 /* pointerEvents.js */, - C1EA5B261680FE1200A21259 /* position.js */, - C1EA5B271680FE1200A21259 /* quotes.js */, - C1EA5B281680FE1200A21259 /* resize.js */, - C1EA5B291680FE1200A21259 /* richness.js */, - C1EA5B2A1680FE1200A21259 /* right.js */, - C1EA5B2B1680FE1200A21259 /* shapeRendering.js */, - C1EA5B2C1680FE1200A21259 /* size.js */, - C1EA5B2D1680FE1200A21259 /* speak.js */, - C1EA5B2E1680FE1200A21259 /* speakHeader.js */, - C1EA5B2F1680FE1200A21259 /* speakNumeral.js */, - C1EA5B301680FE1200A21259 /* speakPunctuation.js */, - C1EA5B311680FE1200A21259 /* speechRate.js */, - C1EA5B321680FE1200A21259 /* src.js */, - C1EA5B331680FE1200A21259 /* stopColor.js */, - C1EA5B341680FE1200A21259 /* stopOpacity.js */, - C1EA5B351680FE1200A21259 /* stress.js */, - C1EA5B361680FE1200A21259 /* stroke.js */, - C1EA5B371680FE1200A21259 /* strokeDasharray.js */, - C1EA5B381680FE1200A21259 /* strokeDashoffset.js */, - C1EA5B391680FE1200A21259 /* strokeLinecap.js */, - C1EA5B3A1680FE1200A21259 /* strokeLinejoin.js */, - C1EA5B3B1680FE1200A21259 /* strokeMiterlimit.js */, - C1EA5B3C1680FE1200A21259 /* strokeOpacity.js */, - C1EA5B3D1680FE1200A21259 /* strokeWidth.js */, - C1EA5B3E1680FE1200A21259 /* tableLayout.js */, - C1EA5B3F1680FE1200A21259 /* textAlign.js */, - C1EA5B401680FE1200A21259 /* textAnchor.js */, - C1EA5B411680FE1200A21259 /* textDecoration.js */, - C1EA5B421680FE1200A21259 /* textIndent.js */, - C1EA5B431680FE1200A21259 /* textLineThrough.js */, - C1EA5B441680FE1200A21259 /* textLineThroughColor.js */, - C1EA5B451680FE1200A21259 /* textLineThroughMode.js */, - C1EA5B461680FE1200A21259 /* textLineThroughStyle.js */, - C1EA5B471680FE1200A21259 /* textLineThroughWidth.js */, - C1EA5B481680FE1200A21259 /* textOverflow.js */, - C1EA5B491680FE1200A21259 /* textOverline.js */, - C1EA5B4A1680FE1200A21259 /* textOverlineColor.js */, - C1EA5B4B1680FE1200A21259 /* textOverlineMode.js */, - C1EA5B4C1680FE1200A21259 /* textOverlineStyle.js */, - C1EA5B4D1680FE1200A21259 /* textOverlineWidth.js */, - C1EA5B4E1680FE1200A21259 /* textRendering.js */, - C1EA5B4F1680FE1200A21259 /* textShadow.js */, - C1EA5B501680FE1200A21259 /* textTransform.js */, - C1EA5B511680FE1200A21259 /* textUnderline.js */, - C1EA5B521680FE1200A21259 /* textUnderlineColor.js */, - C1EA5B531680FE1200A21259 /* textUnderlineMode.js */, - C1EA5B541680FE1200A21259 /* textUnderlineStyle.js */, - C1EA5B551680FE1200A21259 /* textUnderlineWidth.js */, - C1EA5B561680FE1200A21259 /* top.js */, - C1EA5B571680FE1200A21259 /* unicodeBidi.js */, - C1EA5B581680FE1200A21259 /* unicodeRange.js */, - C1EA5B591680FE1200A21259 /* vectorEffect.js */, - C1EA5B5A1680FE1200A21259 /* verticalAlign.js */, - C1EA5B5B1680FE1200A21259 /* visibility.js */, - C1EA5B5C1680FE1200A21259 /* voiceFamily.js */, - C1EA5B5D1680FE1200A21259 /* volume.js */, - C1EA5B5E1680FE1200A21259 /* webkitAnimation.js */, - C1EA5B5F1680FE1200A21259 /* webkitAnimationDelay.js */, - C1EA5B601680FE1200A21259 /* webkitAnimationDirection.js */, - C1EA5B611680FE1200A21259 /* webkitAnimationDuration.js */, - C1EA5B621680FE1200A21259 /* webkitAnimationFillMode.js */, - C1EA5B631680FE1200A21259 /* webkitAnimationIterationCount.js */, - C1EA5B641680FE1200A21259 /* webkitAnimationName.js */, - C1EA5B651680FE1200A21259 /* webkitAnimationPlayState.js */, - C1EA5B661680FE1200A21259 /* webkitAnimationTimingFunction.js */, - C1EA5B671680FE1200A21259 /* webkitAppearance.js */, - C1EA5B681680FE1200A21259 /* webkitAspectRatio.js */, - C1EA5B691680FE1200A21259 /* webkitBackfaceVisibility.js */, - C1EA5B6A1680FE1200A21259 /* webkitBackgroundClip.js */, - C1EA5B6B1680FE1200A21259 /* webkitBackgroundComposite.js */, - C1EA5B6C1680FE1200A21259 /* webkitBackgroundOrigin.js */, - C1EA5B6D1680FE1200A21259 /* webkitBackgroundSize.js */, - C1EA5B6E1680FE1200A21259 /* webkitBorderAfter.js */, - C1EA5B6F1680FE1200A21259 /* webkitBorderAfterColor.js */, - C1EA5B701680FE1200A21259 /* webkitBorderAfterStyle.js */, - C1EA5B711680FE1200A21259 /* webkitBorderAfterWidth.js */, - C1EA5B721680FE1200A21259 /* webkitBorderBefore.js */, - C1EA5B731680FE1200A21259 /* webkitBorderBeforeColor.js */, - C1EA5B741680FE1200A21259 /* webkitBorderBeforeStyle.js */, - C1EA5B751680FE1200A21259 /* webkitBorderBeforeWidth.js */, - C1EA5B761680FE1200A21259 /* webkitBorderEnd.js */, - C1EA5B771680FE1200A21259 /* webkitBorderEndColor.js */, - C1EA5B781680FE1200A21259 /* webkitBorderEndStyle.js */, - C1EA5B791680FE1200A21259 /* webkitBorderEndWidth.js */, - C1EA5B7A1680FE1200A21259 /* webkitBorderFit.js */, - C1EA5B7B1680FE1200A21259 /* webkitBorderHorizontalSpacing.js */, - C1EA5B7C1680FE1200A21259 /* webkitBorderImage.js */, - C1EA5B7D1680FE1200A21259 /* webkitBorderRadius.js */, - C1EA5B7E1680FE1200A21259 /* webkitBorderStart.js */, - C1EA5B7F1680FE1200A21259 /* webkitBorderStartColor.js */, - C1EA5B801680FE1200A21259 /* webkitBorderStartStyle.js */, - C1EA5B811680FE1200A21259 /* webkitBorderStartWidth.js */, - C1EA5B821680FE1200A21259 /* webkitBorderVerticalSpacing.js */, - C1EA5B831680FE1200A21259 /* webkitBoxAlign.js */, - C1EA5B841680FE1200A21259 /* webkitBoxDirection.js */, - C1EA5B851680FE1200A21259 /* webkitBoxFlex.js */, - C1EA5B861680FE1200A21259 /* webkitBoxFlexGroup.js */, - C1EA5B871680FE1200A21259 /* webkitBoxLines.js */, - C1EA5B881680FE1200A21259 /* webkitBoxOrdinalGroup.js */, - C1EA5B891680FE1200A21259 /* webkitBoxOrient.js */, - C1EA5B8A1680FE1200A21259 /* webkitBoxPack.js */, - C1EA5B8B1680FE1200A21259 /* webkitBoxReflect.js */, - C1EA5B8C1680FE1200A21259 /* webkitBoxShadow.js */, - C1EA5B8D1680FE1200A21259 /* webkitColorCorrection.js */, - C1EA5B8E1680FE1200A21259 /* webkitColumnAxis.js */, - C1EA5B8F1680FE1200A21259 /* webkitColumnBreakAfter.js */, - C1EA5B901680FE1200A21259 /* webkitColumnBreakBefore.js */, - C1EA5B911680FE1200A21259 /* webkitColumnBreakInside.js */, - C1EA5B921680FE1200A21259 /* webkitColumnCount.js */, - C1EA5B931680FE1200A21259 /* webkitColumnGap.js */, - C1EA5B941680FE1200A21259 /* webkitColumnRule.js */, - C1EA5B951680FE1200A21259 /* webkitColumnRuleColor.js */, - C1EA5B961680FE1200A21259 /* webkitColumnRuleStyle.js */, - C1EA5B971680FE1200A21259 /* webkitColumnRuleWidth.js */, - C1EA5B981680FE1200A21259 /* webkitColumns.js */, - C1EA5B991680FE1200A21259 /* webkitColumnSpan.js */, - C1EA5B9A1680FE1200A21259 /* webkitColumnWidth.js */, - C1EA5B9B1680FE1200A21259 /* webkitFilter.js */, - C1EA5B9C1680FE1200A21259 /* webkitFlexAlign.js */, - C1EA5B9D1680FE1200A21259 /* webkitFlexDirection.js */, - C1EA5B9E1680FE1200A21259 /* webkitFlexFlow.js */, - C1EA5B9F1680FE1200A21259 /* webkitFlexItemAlign.js */, - C1EA5BA01680FE1200A21259 /* webkitFlexLinePack.js */, - C1EA5BA11680FE1200A21259 /* webkitFlexOrder.js */, - C1EA5BA21680FE1200A21259 /* webkitFlexPack.js */, - C1EA5BA31680FE1200A21259 /* webkitFlexWrap.js */, - C1EA5BA41680FE1200A21259 /* webkitFlowFrom.js */, - C1EA5BA51680FE1200A21259 /* webkitFlowInto.js */, - C1EA5BA61680FE1200A21259 /* webkitFontFeatureSettings.js */, - C1EA5BA71680FE1200A21259 /* webkitFontKerning.js */, - C1EA5BA81680FE1200A21259 /* webkitFontSizeDelta.js */, - C1EA5BA91680FE1200A21259 /* webkitFontSmoothing.js */, - C1EA5BAA1680FE1200A21259 /* webkitFontVariantLigatures.js */, - C1EA5BAB1680FE1200A21259 /* webkitHighlight.js */, - C1EA5BAC1680FE1200A21259 /* webkitHyphenateCharacter.js */, - C1EA5BAD1680FE1200A21259 /* webkitHyphenateLimitAfter.js */, - C1EA5BAE1680FE1200A21259 /* webkitHyphenateLimitBefore.js */, - C1EA5BAF1680FE1200A21259 /* webkitHyphenateLimitLines.js */, - C1EA5BB01680FE1200A21259 /* webkitHyphens.js */, - C1EA5BB11680FE1200A21259 /* webkitLineAlign.js */, - C1EA5BB21680FE1200A21259 /* webkitLineBoxContain.js */, - C1EA5BB31680FE1200A21259 /* webkitLineBreak.js */, - C1EA5BB41680FE1200A21259 /* webkitLineClamp.js */, - C1EA5BB51680FE1200A21259 /* webkitLineGrid.js */, - C1EA5BB61680FE1200A21259 /* webkitLineSnap.js */, - C1EA5BB71680FE1200A21259 /* webkitLocale.js */, - C1EA5BB81680FE1200A21259 /* webkitLogicalHeight.js */, - C1EA5BB91680FE1200A21259 /* webkitLogicalWidth.js */, - C1EA5BBA1680FE1200A21259 /* webkitMarginAfter.js */, - C1EA5BBB1680FE1200A21259 /* webkitMarginAfterCollapse.js */, - C1EA5BBC1680FE1200A21259 /* webkitMarginBefore.js */, - C1EA5BBD1680FE1200A21259 /* webkitMarginBeforeCollapse.js */, - C1EA5BBE1680FE1200A21259 /* webkitMarginBottomCollapse.js */, - C1EA5BBF1680FE1200A21259 /* webkitMarginCollapse.js */, - C1EA5BC01680FE1200A21259 /* webkitMarginEnd.js */, - C1EA5BC11680FE1200A21259 /* webkitMarginStart.js */, - C1EA5BC21680FE1200A21259 /* webkitMarginTopCollapse.js */, - C1EA5BC31680FE1200A21259 /* webkitMarquee.js */, - C1EA5BC41680FE1200A21259 /* webkitMarqueeDirection.js */, - C1EA5BC51680FE1200A21259 /* webkitMarqueeIncrement.js */, - C1EA5BC61680FE1200A21259 /* webkitMarqueeRepetition.js */, - C1EA5BC71680FE1200A21259 /* webkitMarqueeSpeed.js */, - C1EA5BC81680FE1200A21259 /* webkitMarqueeStyle.js */, - C1EA5BC91680FE1200A21259 /* webkitMask.js */, - C1EA5BCA1680FE1200A21259 /* webkitMaskAttachment.js */, - C1EA5BCB1680FE1200A21259 /* webkitMaskBoxImage.js */, - C1EA5BCC1680FE1200A21259 /* webkitMaskBoxImageOutset.js */, - C1EA5BCD1680FE1200A21259 /* webkitMaskBoxImageRepeat.js */, - C1EA5BCE1680FE1200A21259 /* webkitMaskBoxImageSlice.js */, - C1EA5BCF1680FE1200A21259 /* webkitMaskBoxImageSource.js */, - C1EA5BD01680FE1200A21259 /* webkitMaskBoxImageWidth.js */, - C1EA5BD11680FE1200A21259 /* webkitMaskClip.js */, - C1EA5BD21680FE1200A21259 /* webkitMaskComposite.js */, - C1EA5BD31680FE1200A21259 /* webkitMaskImage.js */, - C1EA5BD41680FE1200A21259 /* webkitMaskOrigin.js */, - C1EA5BD51680FE1200A21259 /* webkitMaskPosition.js */, - C1EA5BD61680FE1200A21259 /* webkitMaskPositionX.js */, - C1EA5BD71680FE1200A21259 /* webkitMaskPositionY.js */, - C1EA5BD81680FE1200A21259 /* webkitMaskRepeat.js */, - C1EA5BD91680FE1200A21259 /* webkitMaskRepeatX.js */, - C1EA5BDA1680FE1200A21259 /* webkitMaskRepeatY.js */, - C1EA5BDB1680FE1200A21259 /* webkitMaskSize.js */, - C1EA5BDC1680FE1200A21259 /* webkitMatchNearestMailBlockquoteColor.js */, - C1EA5BDD1680FE1200A21259 /* webkitMaxLogicalHeight.js */, - C1EA5BDE1680FE1200A21259 /* webkitMaxLogicalWidth.js */, - C1EA5BDF1680FE1200A21259 /* webkitMinLogicalHeight.js */, - C1EA5BE01680FE1200A21259 /* webkitMinLogicalWidth.js */, - C1EA5BE11680FE1200A21259 /* webkitNbspMode.js */, - C1EA5BE21680FE1200A21259 /* webkitOverflowScrolling.js */, - C1EA5BE31680FE1200A21259 /* webkitPaddingAfter.js */, - C1EA5BE41680FE1200A21259 /* webkitPaddingBefore.js */, - C1EA5BE51680FE1200A21259 /* webkitPaddingEnd.js */, - C1EA5BE61680FE1200A21259 /* webkitPaddingStart.js */, - C1EA5BE71680FE1200A21259 /* webkitPerspective.js */, - C1EA5BE81680FE1200A21259 /* webkitPerspectiveOrigin.js */, - C1EA5BE91680FE1200A21259 /* webkitPerspectiveOriginX.js */, - C1EA5BEA1680FE1200A21259 /* webkitPerspectiveOriginY.js */, - C1EA5BEB1680FE1200A21259 /* webkitPrintColorAdjust.js */, - C1EA5BEC1680FE1200A21259 /* webkitRegionBreakAfter.js */, - C1EA5BED1680FE1200A21259 /* webkitRegionBreakBefore.js */, - C1EA5BEE1680FE1200A21259 /* webkitRegionBreakInside.js */, - C1EA5BEF1680FE1200A21259 /* webkitRegionOverflow.js */, - C1EA5BF01680FE1200A21259 /* webkitRtlOrdering.js */, - C1EA5BF11680FE1200A21259 /* webkitSvgShadow.js */, - C1EA5BF21680FE1200A21259 /* webkitTapHighlightColor.js */, - C1EA5BF31680FE1200A21259 /* webkitTextCombine.js */, - C1EA5BF41680FE1200A21259 /* webkitTextDecorationsInEffect.js */, - C1EA5BF51680FE1200A21259 /* webkitTextEmphasis.js */, - C1EA5BF61680FE1200A21259 /* webkitTextEmphasisColor.js */, - C1EA5BF71680FE1200A21259 /* webkitTextEmphasisPosition.js */, - C1EA5BF81680FE1200A21259 /* webkitTextEmphasisStyle.js */, - C1EA5BF91680FE1200A21259 /* webkitTextFillColor.js */, - C1EA5BFA1680FE1200A21259 /* webkitTextOrientation.js */, - C1EA5BFB1680FE1200A21259 /* webkitTextSecurity.js */, - C1EA5BFC1680FE1200A21259 /* webkitTextSizeAdjust.js */, - C1EA5BFD1680FE1200A21259 /* webkitTextStroke.js */, - C1EA5BFE1680FE1200A21259 /* webkitTextStrokeColor.js */, - C1EA5BFF1680FE1200A21259 /* webkitTextStrokeWidth.js */, - C1EA5C001680FE1200A21259 /* webkitTransform.js */, - C1EA5C011680FE1200A21259 /* webkitTransformOrigin.js */, - C1EA5C021680FE1200A21259 /* webkitTransformOriginX.js */, - C1EA5C031680FE1200A21259 /* webkitTransformOriginY.js */, - C1EA5C041680FE1200A21259 /* webkitTransformOriginZ.js */, - C1EA5C051680FE1200A21259 /* webkitTransformStyle.js */, - C1EA5C061680FE1200A21259 /* webkitTransition.js */, - C1EA5C071680FE1200A21259 /* webkitTransitionDelay.js */, - C1EA5C081680FE1200A21259 /* webkitTransitionDuration.js */, - C1EA5C091680FE1200A21259 /* webkitTransitionProperty.js */, - C1EA5C0A1680FE1200A21259 /* webkitTransitionTimingFunction.js */, - C1EA5C0B1680FE1200A21259 /* webkitUserDrag.js */, - C1EA5C0C1680FE1200A21259 /* webkitUserModify.js */, - C1EA5C0D1680FE1200A21259 /* webkitUserSelect.js */, - C1EA5C0E1680FE1200A21259 /* webkitWrap.js */, - C1EA5C0F1680FE1200A21259 /* webkitWrapFlow.js */, - C1EA5C101680FE1200A21259 /* webkitWrapMargin.js */, - C1EA5C111680FE1200A21259 /* webkitWrapPadding.js */, - C1EA5C121680FE1200A21259 /* webkitWrapShapeInside.js */, - C1EA5C131680FE1200A21259 /* webkitWrapShapeOutside.js */, - C1EA5C141680FE1200A21259 /* webkitWrapThrough.js */, - C1EA5C151680FE1200A21259 /* webkitWritingMode.js */, - C1EA5C161680FE1200A21259 /* whiteSpace.js */, - C1EA5C171680FE1200A21259 /* widows.js */, - C1EA5C181680FE1200A21259 /* width.js */, - C1EA5C191680FE1200A21259 /* wordBreak.js */, - C1EA5C1A1680FE1200A21259 /* wordSpacing.js */, - C1EA5C1B1680FE1200A21259 /* wordWrap.js */, - C1EA5C1C1680FE1200A21259 /* writingMode.js */, - C1EA5C1D1680FE1200A21259 /* zIndex.js */, - C1EA5C1E1680FE1200A21259 /* zoom.js */, - ); - path = properties; - sourceTree = ""; - }; - C1EA5C231680FE1200A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA5C241680FE1200A21259 /* tests.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA5C251680FE1200A21259 /* htmlparser */ = { - isa = PBXGroup; - children = ( - C1EA5C261680FE1200A21259 /* .project */, - C1EA5C271680FE1200A21259 /* .project.bak */, - C1EA5C281680FE1200A21259 /* .settings */, - C1EA5C2D1680FE1200A21259 /* a */, - C1EA5C2E1680FE1200A21259 /* b */, - C1EA5C2F1680FE1200A21259 /* c */, - C1EA5C301680FE1200A21259 /* CHANGELOG */, - C1EA5C311680FE1200A21259 /* json2.js */, - C1EA5C321680FE1200A21259 /* lib */, - C1EA5C371680FE1200A21259 /* libxmljs.node */, - C1EA5C381680FE1200A21259 /* LICENSE */, - C1EA5C391680FE1200A21259 /* new */, - C1EA5C411680FE1200A21259 /* newparser.js */, - C1EA5C421680FE1200A21259 /* node-htmlparser.old.js */, - C1EA5C431680FE1200A21259 /* package.json */, - C1EA5C441680FE1200A21259 /* profile */, - C1EA5C451680FE1200A21259 /* profile.getelement.js */, - C1EA5C461680FE1200A21259 /* profile.getelement.txt */, - C1EA5C471680FE1200A21259 /* profile.js */, - C1EA5C481680FE1200A21259 /* profileresults.txt */, - C1EA5C491680FE1200A21259 /* pulls */, - C1EA5C701680FE1200A21259 /* README.md */, - C1EA5C711680FE1200A21259 /* rssbug.js */, - C1EA5C721680FE1200A21259 /* rssbug.rss */, - C1EA5C731680FE1200A21259 /* runtests.html */, - C1EA5C741680FE1200A21259 /* runtests.js */, - C1EA5C751680FE1200A21259 /* runtests.min.html */, - C1EA5C761680FE1200A21259 /* runtests.min.js */, - C1EA5C771680FE1200A21259 /* runtests_new.js */, - C1EA5C781680FE1200A21259 /* snippet.js */, - C1EA5C791680FE1200A21259 /* test01.js */, - C1EA5C7A1680FE1200A21259 /* testdata */, - C1EA5C7E1680FE1200A21259 /* tests */, - C1EA5C951680FE1200A21259 /* tmp */, - C1EA5C971680FE1200A21259 /* utils_example.js */, - C1EA5C981680FE1200A21259 /* v8.log */, - ); - path = htmlparser; - sourceTree = ""; - }; - C1EA5C281680FE1200A21259 /* .settings */ = { - isa = PBXGroup; - children = ( - C1EA5C291680FE1200A21259 /* .jsdtscope */, - C1EA5C2A1680FE1200A21259 /* org.eclipse.core.resources.prefs */, - C1EA5C2B1680FE1200A21259 /* org.eclipse.wst.jsdt.ui.superType.container */, - C1EA5C2C1680FE1200A21259 /* org.eclipse.wst.jsdt.ui.superType.name */, - ); - path = .settings; - sourceTree = ""; - }; - C1EA5C321680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5C331680FE1200A21259 /* htmlparser.js */, - C1EA5C341680FE1200A21259 /* htmlparser.min.js */, - C1EA5C351680FE1200A21259 /* node-htmlparser.js */, - C1EA5C361680FE1200A21259 /* node-htmlparser.min.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5C391680FE1200A21259 /* new */ = { - isa = PBXGroup; - children = ( - C1EA5C3A1680FE1200A21259 /* a */, - C1EA5C3B1680FE1200A21259 /* b */, - C1EA5C3C1680FE1200A21259 /* compat.js */, - C1EA5C3D1680FE1200A21259 /* htmlparser.js */, - C1EA5C3E1680FE1200A21259 /* parser.zip */, - C1EA5C3F1680FE1200A21259 /* test01.js */, - C1EA5C401680FE1200A21259 /* test02.js */, - ); - path = new; - sourceTree = ""; - }; - C1EA5C491680FE1200A21259 /* pulls */ = { - isa = PBXGroup; - children = ( - C1EA5C4A1680FE1200A21259 /* node-htmlparser */, - ); - path = pulls; - sourceTree = ""; - }; - C1EA5C4A1680FE1200A21259 /* node-htmlparser */ = { - isa = PBXGroup; - children = ( - C1EA5C4B1680FE1200A21259 /* CHANGELOG */, - C1EA5C4C1680FE1200A21259 /* json2.js */, - C1EA5C4D1680FE1200A21259 /* lib */, - C1EA5C501680FE1200A21259 /* LICENSE */, - C1EA5C511680FE1200A21259 /* package.json */, - C1EA5C521680FE1200A21259 /* profile.js */, - C1EA5C531680FE1200A21259 /* README.md */, - C1EA5C541680FE1200A21259 /* runtests.html */, - C1EA5C551680FE1200A21259 /* runtests.js */, - C1EA5C561680FE1200A21259 /* runtests.min.html */, - C1EA5C571680FE1200A21259 /* runtests.min.js */, - C1EA5C581680FE1200A21259 /* snippet.js */, - C1EA5C591680FE1200A21259 /* tests */, - C1EA5C6F1680FE1200A21259 /* utils_example.js */, - ); - path = "node-htmlparser"; - sourceTree = ""; - }; - C1EA5C4D1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5C4E1680FE1200A21259 /* node-htmlparser.js */, - C1EA5C4F1680FE1200A21259 /* node-htmlparser.min.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5C591680FE1200A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA5C5A1680FE1200A21259 /* 01-basic.js */, - C1EA5C5B1680FE1200A21259 /* 02-single_tag_1.js */, - C1EA5C5C1680FE1200A21259 /* 03-single_tag_2.js */, - C1EA5C5D1680FE1200A21259 /* 04-unescaped_in_script.js */, - C1EA5C5E1680FE1200A21259 /* 05-tags_in_comment.js */, - C1EA5C5F1680FE1200A21259 /* 06-comment_in_script.js */, - C1EA5C601680FE1200A21259 /* 07-unescaped_in_style.js */, - C1EA5C611680FE1200A21259 /* 08-extra_spaces_in_tag.js */, - C1EA5C621680FE1200A21259 /* 09-unquoted_attrib.js */, - C1EA5C631680FE1200A21259 /* 10-singular_attribute.js */, - C1EA5C641680FE1200A21259 /* 11-text_outside_tags.js */, - C1EA5C651680FE1200A21259 /* 12-text_only.js */, - C1EA5C661680FE1200A21259 /* 13-comment_in_text.js */, - C1EA5C671680FE1200A21259 /* 14-comment_in_text_in_script.js */, - C1EA5C681680FE1200A21259 /* 15-non-verbose.js */, - C1EA5C691680FE1200A21259 /* 16-ignore_whitespace.js */, - C1EA5C6A1680FE1200A21259 /* 17-xml_namespace.js */, - C1EA5C6B1680FE1200A21259 /* 18-enforce_empty_tags.js */, - C1EA5C6C1680FE1200A21259 /* 19-ignore_empty_tags.js */, - C1EA5C6D1680FE1200A21259 /* 20-rss.js */, - C1EA5C6E1680FE1200A21259 /* 21-atom.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA5C7A1680FE1200A21259 /* testdata */ = { - isa = PBXGroup; - children = ( - C1EA5C7B1680FE1200A21259 /* api.html */, - C1EA5C7C1680FE1200A21259 /* getelement.html */, - C1EA5C7D1680FE1200A21259 /* trackerchecker.html */, - ); - path = testdata; - sourceTree = ""; - }; - C1EA5C7E1680FE1200A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA5C7F1680FE1200A21259 /* 01-basic.js */, - C1EA5C801680FE1200A21259 /* 02-single_tag_1.js */, - C1EA5C811680FE1200A21259 /* 03-single_tag_2.js */, - C1EA5C821680FE1200A21259 /* 04-unescaped_in_script.js */, - C1EA5C831680FE1200A21259 /* 05-tags_in_comment.js */, - C1EA5C841680FE1200A21259 /* 06-comment_in_script.js */, - C1EA5C851680FE1200A21259 /* 07-unescaped_in_style.js */, - C1EA5C861680FE1200A21259 /* 08-extra_spaces_in_tag.js */, - C1EA5C871680FE1200A21259 /* 09-unquoted_attrib.js */, - C1EA5C881680FE1200A21259 /* 10-singular_attribute.js */, - C1EA5C891680FE1200A21259 /* 11-text_outside_tags.js */, - C1EA5C8A1680FE1200A21259 /* 12-text_only.js */, - C1EA5C8B1680FE1200A21259 /* 13-comment_in_text.js */, - C1EA5C8C1680FE1200A21259 /* 14-comment_in_text_in_script.js */, - C1EA5C8D1680FE1200A21259 /* 15-non-verbose.js */, - C1EA5C8E1680FE1200A21259 /* 16-ignore_whitespace.js */, - C1EA5C8F1680FE1200A21259 /* 17-xml_namespace.js */, - C1EA5C901680FE1200A21259 /* 18-enforce_empty_tags.js */, - C1EA5C911680FE1200A21259 /* 19-ignore_empty_tags.js */, - C1EA5C921680FE1200A21259 /* 20-rss.js */, - C1EA5C931680FE1200A21259 /* 21-atom.js */, - C1EA5C941680FE1200A21259 /* 22-position_data.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA5C951680FE1200A21259 /* tmp */ = { - isa = PBXGroup; - children = ( - C1EA5C961680FE1200A21259 /* snippet.js */, - ); - path = tmp; - sourceTree = ""; - }; - C1EA5C991680FE1200A21259 /* request */ = { - isa = PBXGroup; - children = ( - C1EA5C9A1680FE1200A21259 /* aws.js */, - C1EA5C9B1680FE1200A21259 /* forever.js */, - C1EA5C9C1680FE1200A21259 /* LICENSE */, - C1EA5C9D1680FE1200A21259 /* main.js */, - C1EA5C9E1680FE1200A21259 /* node_modules */, - C1EA5CFC1680FE1200A21259 /* oauth.js */, - C1EA5CFD1680FE1200A21259 /* package.json */, - C1EA5CFE1680FE1200A21259 /* README.md */, - C1EA5CFF1680FE1200A21259 /* tests */, - C1EA5D2E1680FE1200A21259 /* tunnel.js */, - C1EA5D2F1680FE1200A21259 /* uuid.js */, - C1EA5D301680FE1200A21259 /* vendor */, - ); - path = request; - sourceTree = ""; - }; - C1EA5C9E1680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA5C9F1680FE1200A21259 /* form-data */, - C1EA5CF31680FE1200A21259 /* mime */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA5C9F1680FE1200A21259 /* form-data */ = { - isa = PBXGroup; - children = ( - C1EA5CA01680FE1200A21259 /* .npmignore */, - C1EA5CA11680FE1200A21259 /* lib */, - C1EA5CA31680FE1200A21259 /* Makefile */, - C1EA5CA41680FE1200A21259 /* node-form-data.sublime-project */, - C1EA5CA51680FE1200A21259 /* node-form-data.sublime-workspace */, - C1EA5CA61680FE1200A21259 /* node_modules */, - C1EA5CE51680FE1200A21259 /* package.json */, - C1EA5CE61680FE1200A21259 /* Readme.md */, - C1EA5CE71680FE1200A21259 /* test */, - ); - path = "form-data"; - sourceTree = ""; - }; - C1EA5CA11680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5CA21680FE1200A21259 /* form_data.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5CA61680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA5CA71680FE1200A21259 /* async */, - C1EA5CBB1680FE1200A21259 /* combined-stream */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA5CA71680FE1200A21259 /* async */ = { - isa = PBXGroup; - children = ( - C1EA5CA81680FE1200A21259 /* .gitmodules */, - C1EA5CA91680FE1200A21259 /* async.min.js.gzip */, - C1EA5CAA1680FE1200A21259 /* deps */, - C1EA5CAD1680FE1200A21259 /* dist */, - C1EA5CAF1680FE1200A21259 /* index.js */, - C1EA5CB01680FE1200A21259 /* lib */, - C1EA5CB21680FE1200A21259 /* LICENSE */, - C1EA5CB31680FE1200A21259 /* Makefile */, - C1EA5CB41680FE1200A21259 /* nodelint.cfg */, - C1EA5CB51680FE1200A21259 /* package.json */, - C1EA5CB61680FE1200A21259 /* README.md */, - C1EA5CB71680FE1200A21259 /* test */, - ); - path = async; - sourceTree = ""; - }; - C1EA5CAA1680FE1200A21259 /* deps */ = { - isa = PBXGroup; - children = ( - C1EA5CAB1680FE1200A21259 /* nodeunit.css */, - C1EA5CAC1680FE1200A21259 /* nodeunit.js */, - ); - path = deps; - sourceTree = ""; - }; - C1EA5CAD1680FE1200A21259 /* dist */ = { - isa = PBXGroup; - children = ( - C1EA5CAE1680FE1200A21259 /* async.min.js */, - ); - path = dist; - sourceTree = ""; - }; - C1EA5CB01680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5CB11680FE1200A21259 /* async.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5CB71680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5CB81680FE1200A21259 /* .swp */, - C1EA5CB91680FE1200A21259 /* test-async.js */, - C1EA5CBA1680FE1200A21259 /* test.html */, - ); - path = test; - sourceTree = ""; - }; - C1EA5CBB1680FE1200A21259 /* combined-stream */ = { - isa = PBXGroup; - children = ( - C1EA5CBC1680FE1200A21259 /* .npmignore */, - C1EA5CBD1680FE1200A21259 /* lib */, - C1EA5CBF1680FE1200A21259 /* License */, - C1EA5CC01680FE1200A21259 /* Makefile */, - C1EA5CC11680FE1200A21259 /* node_modules */, - C1EA5CD61680FE1200A21259 /* package.json */, - C1EA5CD71680FE1200A21259 /* Readme.md */, - C1EA5CD81680FE1200A21259 /* test */, - ); - path = "combined-stream"; - sourceTree = ""; - }; - C1EA5CBD1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5CBE1680FE1200A21259 /* combined_stream.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5CC11680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA5CC21680FE1200A21259 /* delayed-stream */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA5CC21680FE1200A21259 /* delayed-stream */ = { - isa = PBXGroup; - children = ( - C1EA5CC31680FE1200A21259 /* .npmignore */, - C1EA5CC41680FE1200A21259 /* lib */, - C1EA5CC61680FE1200A21259 /* License */, - C1EA5CC71680FE1200A21259 /* Makefile */, - C1EA5CC81680FE1200A21259 /* package.json */, - C1EA5CC91680FE1200A21259 /* Readme.md */, - C1EA5CCA1680FE1200A21259 /* test */, - ); - path = "delayed-stream"; - sourceTree = ""; - }; - C1EA5CC41680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5CC51680FE1200A21259 /* delayed_stream.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5CCA1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5CCB1680FE1200A21259 /* common.js */, - C1EA5CCC1680FE1200A21259 /* integration */, - C1EA5CD51680FE1200A21259 /* run.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5CCC1680FE1200A21259 /* integration */ = { - isa = PBXGroup; - children = ( - C1EA5CCD1680FE1200A21259 /* test-delayed-http-upload.js */, - C1EA5CCE1680FE1200A21259 /* test-delayed-stream-auto-pause.js */, - C1EA5CCF1680FE1200A21259 /* test-delayed-stream-pause.js */, - C1EA5CD01680FE1200A21259 /* test-delayed-stream.js */, - C1EA5CD11680FE1200A21259 /* test-handle-source-errors.js */, - C1EA5CD21680FE1200A21259 /* test-max-data-size.js */, - C1EA5CD31680FE1200A21259 /* test-pipe-resumes.js */, - C1EA5CD41680FE1200A21259 /* test-proxy-readable.js */, - ); - path = integration; - sourceTree = ""; - }; - C1EA5CD81680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5CD91680FE1200A21259 /* common.js */, - C1EA5CDA1680FE1200A21259 /* fixture */, - C1EA5CDD1680FE1200A21259 /* integration */, - C1EA5CE41680FE1200A21259 /* run.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5CDA1680FE1200A21259 /* fixture */ = { - isa = PBXGroup; - children = ( - C1EA5CDB1680FE1200A21259 /* file1.txt */, - C1EA5CDC1680FE1200A21259 /* file2.txt */, - ); - path = fixture; - sourceTree = ""; - }; - C1EA5CDD1680FE1200A21259 /* integration */ = { - isa = PBXGroup; - children = ( - C1EA5CDE1680FE1200A21259 /* test-callback-streams.js */, - C1EA5CDF1680FE1200A21259 /* test-data-size.js */, - C1EA5CE01680FE1200A21259 /* test-delayed-streams-and-buffers-and-strings.js */, - C1EA5CE11680FE1200A21259 /* test-delayed-streams.js */, - C1EA5CE21680FE1200A21259 /* test-max-data-size.js */, - C1EA5CE31680FE1200A21259 /* test-unpaused-streams.js */, - ); - path = integration; - sourceTree = ""; - }; - C1EA5CE71680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5CE81680FE1200A21259 /* common.js */, - C1EA5CE91680FE1200A21259 /* fixture */, - C1EA5CEC1680FE1200A21259 /* integration */, - C1EA5CF21680FE1200A21259 /* run.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5CE91680FE1200A21259 /* fixture */ = { - isa = PBXGroup; - children = ( - C1EA5CEA1680FE1200A21259 /* bacon.txt */, - C1EA5CEB1680FE1200A21259 /* unicycle.jpg */, - ); - path = fixture; - sourceTree = ""; - }; - C1EA5CEC1680FE1200A21259 /* integration */ = { - isa = PBXGroup; - children = ( - C1EA5CED1680FE1200A21259 /* test-form-get-length.js */, - C1EA5CEE1680FE1200A21259 /* test-get-boundary.js */, - C1EA5CEF1680FE1200A21259 /* test-http-response.js */, - C1EA5CF01680FE1200A21259 /* test-pipe.js */, - C1EA5CF11680FE1200A21259 /* test-submit.js */, - ); - path = integration; - sourceTree = ""; - }; - C1EA5CF31680FE1200A21259 /* mime */ = { - isa = PBXGroup; - children = ( - C1EA5CF41680FE1200A21259 /* LICENSE */, - C1EA5CF51680FE1200A21259 /* mime.js */, - C1EA5CF61680FE1200A21259 /* package.json */, - C1EA5CF71680FE1200A21259 /* README.md */, - C1EA5CF81680FE1200A21259 /* test.js */, - C1EA5CF91680FE1200A21259 /* types */, - ); - path = mime; - sourceTree = ""; - }; - C1EA5CF91680FE1200A21259 /* types */ = { - isa = PBXGroup; - children = ( - C1EA5CFA1680FE1200A21259 /* mime.types */, - C1EA5CFB1680FE1200A21259 /* node.types */, - ); - path = types; - sourceTree = ""; - }; - C1EA5CFF1680FE1200A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA5D001680FE1200A21259 /* googledoodle.png */, - C1EA5D011680FE1200A21259 /* run.js */, - C1EA5D021680FE1200A21259 /* server.js */, - C1EA5D031680FE1200A21259 /* squid.conf */, - C1EA5D041680FE1200A21259 /* ssl */, - C1EA5D141680FE1200A21259 /* test-body.js */, - C1EA5D151680FE1200A21259 /* test-cookie.js */, - C1EA5D161680FE1200A21259 /* test-cookiejar.js */, - C1EA5D171680FE1200A21259 /* test-defaults.js */, - C1EA5D181680FE1200A21259 /* test-errors.js */, - C1EA5D191680FE1200A21259 /* test-follow-all-303.js */, - C1EA5D1A1680FE1200A21259 /* test-follow-all.js */, - C1EA5D1B1680FE1200A21259 /* test-form.js */, - C1EA5D1C1680FE1200A21259 /* test-headers.js */, - C1EA5D1D1680FE1200A21259 /* test-httpModule.js */, - C1EA5D1E1680FE1200A21259 /* test-https-strict.js */, - C1EA5D1F1680FE1200A21259 /* test-https.js */, - C1EA5D201680FE1200A21259 /* test-oauth.js */, - C1EA5D211680FE1200A21259 /* test-params.js */, - C1EA5D221680FE1200A21259 /* test-piped-redirect.js */, - C1EA5D231680FE1200A21259 /* test-pipes.js */, - C1EA5D241680FE1200A21259 /* test-pool.js */, - C1EA5D251680FE1200A21259 /* test-protocol-changing-redirect.js */, - C1EA5D261680FE1200A21259 /* test-proxy.js */, - C1EA5D271680FE1200A21259 /* test-qs.js */, - C1EA5D281680FE1200A21259 /* test-redirect.js */, - C1EA5D291680FE1200A21259 /* test-s3.js */, - C1EA5D2A1680FE1200A21259 /* test-timeout.js */, - C1EA5D2B1680FE1200A21259 /* test-toJSON.js */, - C1EA5D2C1680FE1200A21259 /* test-tunnel.js */, - C1EA5D2D1680FE1200A21259 /* unicycle.jpg */, - ); - path = tests; - sourceTree = ""; - }; - C1EA5D041680FE1200A21259 /* ssl */ = { - isa = PBXGroup; - children = ( - C1EA5D051680FE1200A21259 /* ca */, - C1EA5D111680FE1200A21259 /* npm-ca.crt */, - C1EA5D121680FE1200A21259 /* test.crt */, - C1EA5D131680FE1200A21259 /* test.key */, - ); - path = ssl; - sourceTree = ""; - }; - C1EA5D051680FE1200A21259 /* ca */ = { - isa = PBXGroup; - children = ( - C1EA5D061680FE1200A21259 /* ca.cnf */, - C1EA5D071680FE1200A21259 /* ca.crl */, - C1EA5D081680FE1200A21259 /* ca.crt */, - C1EA5D091680FE1200A21259 /* ca.csr */, - C1EA5D0A1680FE1200A21259 /* ca.key */, - C1EA5D0B1680FE1200A21259 /* ca.srl */, - C1EA5D0C1680FE1200A21259 /* server.cnf */, - C1EA5D0D1680FE1200A21259 /* server.crt */, - C1EA5D0E1680FE1200A21259 /* server.csr */, - C1EA5D0F1680FE1200A21259 /* server.js */, - C1EA5D101680FE1200A21259 /* server.key */, - ); - path = ca; - sourceTree = ""; - }; - C1EA5D301680FE1200A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA5D311680FE1200A21259 /* cookie */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA5D311680FE1200A21259 /* cookie */ = { - isa = PBXGroup; - children = ( - C1EA5D321680FE1200A21259 /* index.js */, - C1EA5D331680FE1200A21259 /* jar.js */, - ); - path = cookie; - sourceTree = ""; - }; - C1EA5D361680FE1200A21259 /* uglify-js */ = { - isa = PBXGroup; - children = ( - C1EA5D371680FE1200A21259 /* .npmignore */, - C1EA5D381680FE1200A21259 /* bin */, - C1EA5D3A1680FE1200A21259 /* docstyle.css */, - C1EA5D3B1680FE1200A21259 /* lib */, - C1EA5D411680FE1200A21259 /* package.json */, - C1EA5D421680FE1200A21259 /* README.html */, - C1EA5D431680FE1200A21259 /* README.org */, - C1EA5D441680FE1200A21259 /* test */, - C1EA5D9E1680FE1200A21259 /* tmp */, - C1EA5DAB1680FE1200A21259 /* uglify-js.js */, - ); - path = "uglify-js"; - sourceTree = ""; - }; - C1EA5D381680FE1200A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA5D391680FE1200A21259 /* uglifyjs */, - ); - path = bin; - sourceTree = ""; - }; - C1EA5D3B1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5D3C1680FE1200A21259 /* consolidator.js */, - C1EA5D3D1680FE1200A21259 /* object-ast.js */, - C1EA5D3E1680FE1200A21259 /* parse-js.js */, - C1EA5D3F1680FE1200A21259 /* process.js */, - C1EA5D401680FE1200A21259 /* squeeze-more.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5D441680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5D451680FE1200A21259 /* beautify.js */, - C1EA5D461680FE1200A21259 /* testparser.js */, - C1EA5D471680FE1200A21259 /* unit */, - ); - path = test; - sourceTree = ""; - }; - C1EA5D471680FE1200A21259 /* unit */ = { - isa = PBXGroup; - children = ( - C1EA5D481680FE1200A21259 /* compress */, - C1EA5D9D1680FE1200A21259 /* scripts.js */, - ); - path = unit; - sourceTree = ""; - }; - C1EA5D481680FE1200A21259 /* compress */ = { - isa = PBXGroup; - children = ( - C1EA5D491680FE1200A21259 /* expected */, - C1EA5D731680FE1200A21259 /* test */, - ); - path = compress; - sourceTree = ""; - }; - C1EA5D491680FE1200A21259 /* expected */ = { - isa = PBXGroup; - children = ( - C1EA5D4A1680FE1200A21259 /* array1.js */, - C1EA5D4B1680FE1200A21259 /* array2.js */, - C1EA5D4C1680FE1200A21259 /* array3.js */, - C1EA5D4D1680FE1200A21259 /* array4.js */, - C1EA5D4E1680FE1200A21259 /* assignment.js */, - C1EA5D4F1680FE1200A21259 /* concatstring.js */, - C1EA5D501680FE1200A21259 /* const.js */, - C1EA5D511680FE1200A21259 /* empty-blocks.js */, - C1EA5D521680FE1200A21259 /* forstatement.js */, - C1EA5D531680FE1200A21259 /* if.js */, - C1EA5D541680FE1200A21259 /* ifreturn.js */, - C1EA5D551680FE1200A21259 /* ifreturn2.js */, - C1EA5D561680FE1200A21259 /* issue10.js */, - C1EA5D571680FE1200A21259 /* issue11.js */, - C1EA5D581680FE1200A21259 /* issue13.js */, - C1EA5D591680FE1200A21259 /* issue14.js */, - C1EA5D5A1680FE1200A21259 /* issue16.js */, - C1EA5D5B1680FE1200A21259 /* issue17.js */, - C1EA5D5C1680FE1200A21259 /* issue20.js */, - C1EA5D5D1680FE1200A21259 /* issue21.js */, - C1EA5D5E1680FE1200A21259 /* issue25.js */, - C1EA5D5F1680FE1200A21259 /* issue27.js */, - C1EA5D601680FE1200A21259 /* issue278.js */, - C1EA5D611680FE1200A21259 /* issue28.js */, - C1EA5D621680FE1200A21259 /* issue29.js */, - C1EA5D631680FE1200A21259 /* issue30.js */, - C1EA5D641680FE1200A21259 /* issue34.js */, - C1EA5D651680FE1200A21259 /* issue4.js */, - C1EA5D661680FE1200A21259 /* issue48.js */, - C1EA5D671680FE1200A21259 /* issue50.js */, - C1EA5D681680FE1200A21259 /* issue53.js */, - C1EA5D691680FE1200A21259 /* issue54.1.js */, - C1EA5D6A1680FE1200A21259 /* issue68.js */, - C1EA5D6B1680FE1200A21259 /* issue69.js */, - C1EA5D6C1680FE1200A21259 /* issue9.js */, - C1EA5D6D1680FE1200A21259 /* mangle.js */, - C1EA5D6E1680FE1200A21259 /* null_string.js */, - C1EA5D6F1680FE1200A21259 /* strict-equals.js */, - C1EA5D701680FE1200A21259 /* var.js */, - C1EA5D711680FE1200A21259 /* whitespace.js */, - C1EA5D721680FE1200A21259 /* with.js */, - ); - path = expected; - sourceTree = ""; - }; - C1EA5D731680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5D741680FE1200A21259 /* array1.js */, - C1EA5D751680FE1200A21259 /* array2.js */, - C1EA5D761680FE1200A21259 /* array3.js */, - C1EA5D771680FE1200A21259 /* array4.js */, - C1EA5D781680FE1200A21259 /* assignment.js */, - C1EA5D791680FE1200A21259 /* concatstring.js */, - C1EA5D7A1680FE1200A21259 /* const.js */, - C1EA5D7B1680FE1200A21259 /* empty-blocks.js */, - C1EA5D7C1680FE1200A21259 /* forstatement.js */, - C1EA5D7D1680FE1200A21259 /* if.js */, - C1EA5D7E1680FE1200A21259 /* ifreturn.js */, - C1EA5D7F1680FE1200A21259 /* ifreturn2.js */, - C1EA5D801680FE1200A21259 /* issue10.js */, - C1EA5D811680FE1200A21259 /* issue11.js */, - C1EA5D821680FE1200A21259 /* issue13.js */, - C1EA5D831680FE1200A21259 /* issue14.js */, - C1EA5D841680FE1200A21259 /* issue16.js */, - C1EA5D851680FE1200A21259 /* issue17.js */, - C1EA5D861680FE1200A21259 /* issue20.js */, - C1EA5D871680FE1200A21259 /* issue21.js */, - C1EA5D881680FE1200A21259 /* issue25.js */, - C1EA5D891680FE1200A21259 /* issue27.js */, - C1EA5D8A1680FE1200A21259 /* issue278.js */, - C1EA5D8B1680FE1200A21259 /* issue28.js */, - C1EA5D8C1680FE1200A21259 /* issue29.js */, - C1EA5D8D1680FE1200A21259 /* issue30.js */, - C1EA5D8E1680FE1200A21259 /* issue34.js */, - C1EA5D8F1680FE1200A21259 /* issue4.js */, - C1EA5D901680FE1200A21259 /* issue48.js */, - C1EA5D911680FE1200A21259 /* issue50.js */, - C1EA5D921680FE1200A21259 /* issue53.js */, - C1EA5D931680FE1200A21259 /* issue54.1.js */, - C1EA5D941680FE1200A21259 /* issue68.js */, - C1EA5D951680FE1200A21259 /* issue69.js */, - C1EA5D961680FE1200A21259 /* issue9.js */, - C1EA5D971680FE1200A21259 /* mangle.js */, - C1EA5D981680FE1200A21259 /* null_string.js */, - C1EA5D991680FE1200A21259 /* strict-equals.js */, - C1EA5D9A1680FE1200A21259 /* var.js */, - C1EA5D9B1680FE1200A21259 /* whitespace.js */, - C1EA5D9C1680FE1200A21259 /* with.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5D9E1680FE1200A21259 /* tmp */ = { - isa = PBXGroup; - children = ( - C1EA5D9F1680FE1200A21259 /* 269.js */, - C1EA5DA01680FE1200A21259 /* app.js */, - C1EA5DA11680FE1200A21259 /* embed-tokens.js */, - C1EA5DA21680FE1200A21259 /* goto.js */, - C1EA5DA31680FE1200A21259 /* goto2.js */, - C1EA5DA41680FE1200A21259 /* hoist.js */, - C1EA5DA51680FE1200A21259 /* instrument.js */, - C1EA5DA61680FE1200A21259 /* instrument2.js */, - C1EA5DA71680FE1200A21259 /* liftvars.js */, - C1EA5DA81680FE1200A21259 /* test.js */, - C1EA5DA91680FE1200A21259 /* uglify-hangs.js */, - C1EA5DAA1680FE1200A21259 /* uglify-hangs2.js */, - ); - path = tmp; - sourceTree = ""; - }; - C1EA5DAE1680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5DAF1680FE1200A21259 /* buster-syntax-test.js */, - C1EA5DB01680FE1200A21259 /* syntax-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5DB11680FE1200A21259 /* buster-test */ = { - isa = PBXGroup; - children = ( - C1EA5DB21680FE1200A21259 /* .travis.yml */, - C1EA5DB31680FE1200A21259 /* AUTHORS */, - C1EA5DB41680FE1200A21259 /* autolint.json */, - C1EA5DB51680FE1200A21259 /* jsTestDriver.conf */, - C1EA5DB61680FE1200A21259 /* lib */, - C1EA5DCB1680FE1200A21259 /* LICENSE */, - C1EA5DCC1680FE1200A21259 /* node_modules */, - C1EA60DF1680FE1300A21259 /* package.json */, - C1EA60E01680FE1300A21259 /* Readme.md */, - C1EA60E11680FE1300A21259 /* resources */, - C1EA60E31680FE1300A21259 /* run-tests */, - C1EA60E41680FE1300A21259 /* test */, - ); - path = "buster-test"; - sourceTree = ""; - }; - C1EA5DB61680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5DB71680FE1200A21259 /* buster-test */, - C1EA5DCA1680FE1200A21259 /* buster-test.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5DB71680FE1200A21259 /* buster-test */ = { - isa = PBXGroup; - children = ( - C1EA5DB81680FE1200A21259 /* auto-run.js */, - C1EA5DB91680FE1200A21259 /* browser-env.js */, - C1EA5DBA1680FE1200A21259 /* reporters */, - C1EA5DC41680FE1200A21259 /* reporters.js */, - C1EA5DC51680FE1200A21259 /* spec.js */, - C1EA5DC61680FE1200A21259 /* stack-filter.js */, - C1EA5DC71680FE1200A21259 /* test-case.js */, - C1EA5DC81680FE1200A21259 /* test-context.js */, - C1EA5DC91680FE1200A21259 /* test-runner.js */, - ); - path = "buster-test"; - sourceTree = ""; - }; - C1EA5DBA1680FE1200A21259 /* reporters */ = { - isa = PBXGroup; - children = ( - C1EA5DBB1680FE1200A21259 /* console.js */, - C1EA5DBC1680FE1200A21259 /* dots.js */, - C1EA5DBD1680FE1200A21259 /* html.js */, - C1EA5DBE1680FE1200A21259 /* json-proxy.js */, - C1EA5DBF1680FE1200A21259 /* quiet.js */, - C1EA5DC01680FE1200A21259 /* specification.js */, - C1EA5DC11680FE1200A21259 /* tap.js */, - C1EA5DC21680FE1200A21259 /* teamcity.js */, - C1EA5DC31680FE1200A21259 /* xml.js */, - ); - path = reporters; - sourceTree = ""; - }; - C1EA5DCC1680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA5DCD1680FE1200A21259 /* buster-terminal */, - C1EA5DDD1680FE1200A21259 /* jsdom */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA5DCD1680FE1200A21259 /* buster-terminal */ = { - isa = PBXGroup; - children = ( - C1EA5DCE1680FE1200A21259 /* .travis.yml */, - C1EA5DCF1680FE1200A21259 /* AUTHORS */, - C1EA5DD01680FE1200A21259 /* autolint.json */, - C1EA5DD11680FE1200A21259 /* buster.js */, - C1EA5DD21680FE1200A21259 /* lib */, - C1EA5DD61680FE1200A21259 /* package.json */, - C1EA5DD71680FE1200A21259 /* Readme.md */, - C1EA5DD81680FE1200A21259 /* test */, - ); - path = "buster-terminal"; - sourceTree = ""; - }; - C1EA5DD21680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5DD31680FE1200A21259 /* buster-terminal.js */, - C1EA5DD41680FE1200A21259 /* matrix.js */, - C1EA5DD51680FE1200A21259 /* relative-grid.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5DD81680FE1200A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5DD91680FE1200A21259 /* buster-terminal-test.js */, - C1EA5DDA1680FE1200A21259 /* helper.js */, - C1EA5DDB1680FE1200A21259 /* matrix-test.js */, - C1EA5DDC1680FE1200A21259 /* relative-grid-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5DDD1680FE1200A21259 /* jsdom */ = { - isa = PBXGroup; - children = ( - C1EA5DDE1680FE1200A21259 /* lib */, - C1EA5DFC1680FE1200A21259 /* LICENSE.txt */, - C1EA5DFD1680FE1200A21259 /* node_modules */, - C1EA60DD1680FE1300A21259 /* package.json */, - C1EA60DE1680FE1300A21259 /* README.md */, - ); - path = jsdom; - sourceTree = ""; - }; - C1EA5DDE1680FE1200A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5DDF1680FE1200A21259 /* jsdom */, - C1EA5DFB1680FE1200A21259 /* jsdom.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5DDF1680FE1200A21259 /* jsdom */ = { - isa = PBXGroup; - children = ( - C1EA5DE01680FE1200A21259 /* browser */, - C1EA5DE61680FE1200A21259 /* level1 */, - C1EA5DE81680FE1200A21259 /* level2 */, - C1EA5DF01680FE1200A21259 /* level3 */, - C1EA5DF71680FE1200A21259 /* selectors */, - C1EA5DFA1680FE1200A21259 /* utils.js */, - ); - path = jsdom; - sourceTree = ""; - }; - C1EA5DE01680FE1200A21259 /* browser */ = { - isa = PBXGroup; - children = ( - C1EA5DE11680FE1200A21259 /* documentfeatures.js */, - C1EA5DE21680FE1200A21259 /* domtohtml.js */, - C1EA5DE31680FE1200A21259 /* htmlencoding.js */, - C1EA5DE41680FE1200A21259 /* htmltodom.js */, - C1EA5DE51680FE1200A21259 /* index.js */, - ); - path = browser; - sourceTree = ""; - }; - C1EA5DE61680FE1200A21259 /* level1 */ = { - isa = PBXGroup; - children = ( - C1EA5DE71680FE1200A21259 /* core.js */, - ); - path = level1; - sourceTree = ""; - }; - C1EA5DE81680FE1200A21259 /* level2 */ = { - isa = PBXGroup; - children = ( - C1EA5DE91680FE1200A21259 /* core.js */, - C1EA5DEA1680FE1200A21259 /* events.js */, - C1EA5DEB1680FE1200A21259 /* html.js */, - C1EA5DEC1680FE1200A21259 /* index.js */, - C1EA5DED1680FE1200A21259 /* languages */, - C1EA5DEF1680FE1200A21259 /* style.js */, - ); - path = level2; - sourceTree = ""; - }; - C1EA5DED1680FE1200A21259 /* languages */ = { - isa = PBXGroup; - children = ( - C1EA5DEE1680FE1200A21259 /* javascript.js */, - ); - path = languages; - sourceTree = ""; - }; - C1EA5DF01680FE1200A21259 /* level3 */ = { - isa = PBXGroup; - children = ( - C1EA5DF11680FE1200A21259 /* core.js */, - C1EA5DF21680FE1200A21259 /* events.js */, - C1EA5DF31680FE1200A21259 /* html.js */, - C1EA5DF41680FE1200A21259 /* index.js */, - C1EA5DF51680FE1200A21259 /* ls.js */, - C1EA5DF61680FE1200A21259 /* xpath.js */, - ); - path = level3; - sourceTree = ""; - }; - C1EA5DF71680FE1200A21259 /* selectors */ = { - isa = PBXGroup; - children = ( - C1EA5DF81680FE1200A21259 /* index.js */, - C1EA5DF91680FE1200A21259 /* sizzle.js */, - ); - path = selectors; - sourceTree = ""; - }; - C1EA5DFD1680FE1200A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA5DFE1680FE1200A21259 /* contextify */, - C1EA5E251680FE1300A21259 /* cssom */, - C1EA5E391680FE1300A21259 /* cssstyle */, - C1EA5FCE1680FE1300A21259 /* htmlparser */, - C1EA60421680FE1300A21259 /* request */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA5DFE1680FE1200A21259 /* contextify */ = { - isa = PBXGroup; - children = ( - C1EA5DFF1680FE1200A21259 /* .npmignore */, - C1EA5E001680FE1200A21259 /* binding.gyp */, - C1EA5E011680FE1200A21259 /* build */, - C1EA5E151680FE1300A21259 /* changelog */, - C1EA5E161680FE1300A21259 /* lib */, - C1EA5E181680FE1300A21259 /* LICENSE.txt */, - C1EA5E191680FE1300A21259 /* node_modules */, - C1EA5E1E1680FE1300A21259 /* package.json */, - C1EA5E1F1680FE1300A21259 /* README.md */, - C1EA5E201680FE1300A21259 /* src */, - C1EA5E221680FE1300A21259 /* test */, - C1EA5E241680FE1300A21259 /* wscript */, - ); - path = contextify; - sourceTree = ""; - }; - C1EA5E011680FE1200A21259 /* build */ = { - isa = PBXGroup; - children = ( - C1EA5E021680FE1200A21259 /* binding.Makefile */, - C1EA5E031680FE1200A21259 /* config.gypi */, - C1EA5E041680FE1200A21259 /* contextify.target.mk */, - C1EA5E051680FE1200A21259 /* gyp-mac-tool */, - C1EA5E061680FE1200A21259 /* Makefile */, - C1EA5E071680FE1200A21259 /* Release */, - ); - path = build; - sourceTree = ""; - }; - C1EA5E071680FE1200A21259 /* Release */ = { - isa = PBXGroup; - children = ( - C1EA5E081680FE1200A21259 /* .deps */, - C1EA5E0F1680FE1300A21259 /* contextify.node */, - C1EA5E101680FE1300A21259 /* linker.lock */, - C1EA5E111680FE1300A21259 /* obj.target */, - ); - path = Release; - sourceTree = ""; - }; - C1EA5E081680FE1200A21259 /* .deps */ = { - isa = PBXGroup; - children = ( - C1EA5E091680FE1200A21259 /* Release */, - ); - path = .deps; - sourceTree = ""; - }; - C1EA5E091680FE1200A21259 /* Release */ = { - isa = PBXGroup; - children = ( - C1EA5E0A1680FE1200A21259 /* contextify.node.d */, - C1EA5E0B1680FE1200A21259 /* obj.target */, - ); - path = Release; - sourceTree = ""; - }; - C1EA5E0B1680FE1200A21259 /* obj.target */ = { - isa = PBXGroup; - children = ( - C1EA5E0C1680FE1200A21259 /* contextify */, - ); - path = obj.target; - sourceTree = ""; - }; - C1EA5E0C1680FE1200A21259 /* contextify */ = { - isa = PBXGroup; - children = ( - C1EA5E0D1680FE1200A21259 /* src */, - ); - path = contextify; - sourceTree = ""; - }; - C1EA5E0D1680FE1200A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA5E0E1680FE1300A21259 /* contextify.o.d */, - ); - path = src; - sourceTree = ""; - }; - C1EA5E111680FE1300A21259 /* obj.target */ = { - isa = PBXGroup; - children = ( - C1EA5E121680FE1300A21259 /* contextify */, - ); - path = obj.target; - sourceTree = ""; - }; - C1EA5E121680FE1300A21259 /* contextify */ = { - isa = PBXGroup; - children = ( - C1EA5E131680FE1300A21259 /* src */, - ); - path = contextify; - sourceTree = ""; - }; - C1EA5E131680FE1300A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA5E141680FE1300A21259 /* contextify.o */, - ); - path = src; - sourceTree = ""; - }; - C1EA5E161680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5E171680FE1300A21259 /* contextify.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5E191680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA5E1A1680FE1300A21259 /* bindings */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA5E1A1680FE1300A21259 /* bindings */ = { - isa = PBXGroup; - children = ( - C1EA5E1B1680FE1300A21259 /* bindings.js */, - C1EA5E1C1680FE1300A21259 /* package.json */, - C1EA5E1D1680FE1300A21259 /* README.md */, - ); - path = bindings; - sourceTree = ""; - }; - C1EA5E201680FE1300A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA5E211680FE1300A21259 /* contextify.cc */, - ); - path = src; - sourceTree = ""; - }; - C1EA5E221680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA5E231680FE1300A21259 /* contextify.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA5E251680FE1300A21259 /* cssom */ = { - isa = PBXGroup; - children = ( - C1EA5E261680FE1300A21259 /* .gitmodules */, - C1EA5E271680FE1300A21259 /* .npmignore */, - C1EA5E281680FE1300A21259 /* lib */, - C1EA5E371680FE1300A21259 /* package.json */, - C1EA5E381680FE1300A21259 /* README.mdown */, - ); - path = cssom; - sourceTree = ""; - }; - C1EA5E281680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5E291680FE1300A21259 /* clone.js */, - C1EA5E2A1680FE1300A21259 /* CSSFontFaceRule.js */, - C1EA5E2B1680FE1300A21259 /* CSSImportRule.js */, - C1EA5E2C1680FE1300A21259 /* CSSKeyframeRule.js */, - C1EA5E2D1680FE1300A21259 /* CSSKeyframesRule.js */, - C1EA5E2E1680FE1300A21259 /* CSSMediaRule.js */, - C1EA5E2F1680FE1300A21259 /* CSSRule.js */, - C1EA5E301680FE1300A21259 /* CSSStyleDeclaration.js */, - C1EA5E311680FE1300A21259 /* CSSStyleRule.js */, - C1EA5E321680FE1300A21259 /* CSSStyleSheet.js */, - C1EA5E331680FE1300A21259 /* index.js */, - C1EA5E341680FE1300A21259 /* MediaList.js */, - C1EA5E351680FE1300A21259 /* parse.js */, - C1EA5E361680FE1300A21259 /* StyleSheet.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5E391680FE1300A21259 /* cssstyle */ = { - isa = PBXGroup; - children = ( - C1EA5E3A1680FE1300A21259 /* .npmignore */, - C1EA5E3B1680FE1300A21259 /* lib */, - C1EA5FC91680FE1300A21259 /* make_properties.pl */, - C1EA5FCA1680FE1300A21259 /* package.json */, - C1EA5FCB1680FE1300A21259 /* README.md */, - C1EA5FCC1680FE1300A21259 /* tests */, - ); - path = cssstyle; - sourceTree = ""; - }; - C1EA5E3B1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5E3C1680FE1300A21259 /* CSSStyleDeclaration.js */, - C1EA5E3D1680FE1300A21259 /* properties */, - C1EA5FC81680FE1300A21259 /* props */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5E3D1680FE1300A21259 /* properties */ = { - isa = PBXGroup; - children = ( - C1EA5E3E1680FE1300A21259 /* alignmentBaseline.js */, - C1EA5E3F1680FE1300A21259 /* azimuth.js */, - C1EA5E401680FE1300A21259 /* background.js */, - C1EA5E411680FE1300A21259 /* backgroundAttachment.js */, - C1EA5E421680FE1300A21259 /* backgroundClip.js */, - C1EA5E431680FE1300A21259 /* backgroundColor.js */, - C1EA5E441680FE1300A21259 /* backgroundImage.js */, - C1EA5E451680FE1300A21259 /* backgroundOrigin.js */, - C1EA5E461680FE1300A21259 /* backgroundPosition.js */, - C1EA5E471680FE1300A21259 /* backgroundPositionX.js */, - C1EA5E481680FE1300A21259 /* backgroundPositionY.js */, - C1EA5E491680FE1300A21259 /* backgroundRepeat.js */, - C1EA5E4A1680FE1300A21259 /* backgroundRepeatX.js */, - C1EA5E4B1680FE1300A21259 /* backgroundRepeatY.js */, - C1EA5E4C1680FE1300A21259 /* backgroundSize.js */, - C1EA5E4D1680FE1300A21259 /* baselineShift.js */, - C1EA5E4E1680FE1300A21259 /* border.js */, - C1EA5E4F1680FE1300A21259 /* borderBottom.js */, - C1EA5E501680FE1300A21259 /* borderBottomColor.js */, - C1EA5E511680FE1300A21259 /* borderBottomLeftRadius.js */, - C1EA5E521680FE1300A21259 /* borderBottomRightRadius.js */, - C1EA5E531680FE1300A21259 /* borderBottomStyle.js */, - C1EA5E541680FE1300A21259 /* borderBottomWidth.js */, - C1EA5E551680FE1300A21259 /* borderCollapse.js */, - C1EA5E561680FE1300A21259 /* borderColor.js */, - C1EA5E571680FE1300A21259 /* borderImage.js */, - C1EA5E581680FE1300A21259 /* borderImageOutset.js */, - C1EA5E591680FE1300A21259 /* borderImageRepeat.js */, - C1EA5E5A1680FE1300A21259 /* borderImageSlice.js */, - C1EA5E5B1680FE1300A21259 /* borderImageSource.js */, - C1EA5E5C1680FE1300A21259 /* borderImageWidth.js */, - C1EA5E5D1680FE1300A21259 /* borderLeft.js */, - C1EA5E5E1680FE1300A21259 /* borderLeftColor.js */, - C1EA5E5F1680FE1300A21259 /* borderLeftStyle.js */, - C1EA5E601680FE1300A21259 /* borderLeftWidth.js */, - C1EA5E611680FE1300A21259 /* borderRadius.js */, - C1EA5E621680FE1300A21259 /* borderRight.js */, - C1EA5E631680FE1300A21259 /* borderRightColor.js */, - C1EA5E641680FE1300A21259 /* borderRightStyle.js */, - C1EA5E651680FE1300A21259 /* borderRightWidth.js */, - C1EA5E661680FE1300A21259 /* borderSpacing.js */, - C1EA5E671680FE1300A21259 /* borderStyle.js */, - C1EA5E681680FE1300A21259 /* borderTop.js */, - C1EA5E691680FE1300A21259 /* borderTopColor.js */, - C1EA5E6A1680FE1300A21259 /* borderTopLeftRadius.js */, - C1EA5E6B1680FE1300A21259 /* borderTopRightRadius.js */, - C1EA5E6C1680FE1300A21259 /* borderTopStyle.js */, - C1EA5E6D1680FE1300A21259 /* borderTopWidth.js */, - C1EA5E6E1680FE1300A21259 /* borderWidth.js */, - C1EA5E6F1680FE1300A21259 /* bottom.js */, - C1EA5E701680FE1300A21259 /* boxShadow.js */, - C1EA5E711680FE1300A21259 /* boxSizing.js */, - C1EA5E721680FE1300A21259 /* captionSide.js */, - C1EA5E731680FE1300A21259 /* clear.js */, - C1EA5E741680FE1300A21259 /* clip.js */, - C1EA5E751680FE1300A21259 /* clipPath.js */, - C1EA5E761680FE1300A21259 /* clipRule.js */, - C1EA5E771680FE1300A21259 /* color.js */, - C1EA5E781680FE1300A21259 /* colorInterpolation.js */, - C1EA5E791680FE1300A21259 /* colorInterpolationFilters.js */, - C1EA5E7A1680FE1300A21259 /* colorProfile.js */, - C1EA5E7B1680FE1300A21259 /* colorRendering.js */, - C1EA5E7C1680FE1300A21259 /* content.js */, - C1EA5E7D1680FE1300A21259 /* counterIncrement.js */, - C1EA5E7E1680FE1300A21259 /* counterReset.js */, - C1EA5E7F1680FE1300A21259 /* cssFloat.js */, - C1EA5E801680FE1300A21259 /* cue.js */, - C1EA5E811680FE1300A21259 /* cueAfter.js */, - C1EA5E821680FE1300A21259 /* cueBefore.js */, - C1EA5E831680FE1300A21259 /* cursor.js */, - C1EA5E841680FE1300A21259 /* direction.js */, - C1EA5E851680FE1300A21259 /* display.js */, - C1EA5E861680FE1300A21259 /* dominantBaseline.js */, - C1EA5E871680FE1300A21259 /* elevation.js */, - C1EA5E881680FE1300A21259 /* emptyCells.js */, - C1EA5E891680FE1300A21259 /* enableBackground.js */, - C1EA5E8A1680FE1300A21259 /* fill.js */, - C1EA5E8B1680FE1300A21259 /* fillOpacity.js */, - C1EA5E8C1680FE1300A21259 /* fillRule.js */, - C1EA5E8D1680FE1300A21259 /* filter.js */, - C1EA5E8E1680FE1300A21259 /* floodColor.js */, - C1EA5E8F1680FE1300A21259 /* floodOpacity.js */, - C1EA5E901680FE1300A21259 /* font.js */, - C1EA5E911680FE1300A21259 /* fontFamily.js */, - C1EA5E921680FE1300A21259 /* fontSize.js */, - C1EA5E931680FE1300A21259 /* fontSizeAdjust.js */, - C1EA5E941680FE1300A21259 /* fontStretch.js */, - C1EA5E951680FE1300A21259 /* fontStyle.js */, - C1EA5E961680FE1300A21259 /* fontVariant.js */, - C1EA5E971680FE1300A21259 /* fontWeight.js */, - C1EA5E981680FE1300A21259 /* glyphOrientationHorizontal.js */, - C1EA5E991680FE1300A21259 /* glyphOrientationVertical.js */, - C1EA5E9A1680FE1300A21259 /* height.js */, - C1EA5E9B1680FE1300A21259 /* imageRendering.js */, - C1EA5E9C1680FE1300A21259 /* kerning.js */, - C1EA5E9D1680FE1300A21259 /* left.js */, - C1EA5E9E1680FE1300A21259 /* letterSpacing.js */, - C1EA5E9F1680FE1300A21259 /* lightingColor.js */, - C1EA5EA01680FE1300A21259 /* lineHeight.js */, - C1EA5EA11680FE1300A21259 /* listStyle.js */, - C1EA5EA21680FE1300A21259 /* listStyleImage.js */, - C1EA5EA31680FE1300A21259 /* listStylePosition.js */, - C1EA5EA41680FE1300A21259 /* listStyleType.js */, - C1EA5EA51680FE1300A21259 /* margin.js */, - C1EA5EA61680FE1300A21259 /* marginBottom.js */, - C1EA5EA71680FE1300A21259 /* marginLeft.js */, - C1EA5EA81680FE1300A21259 /* marginRight.js */, - C1EA5EA91680FE1300A21259 /* marginTop.js */, - C1EA5EAA1680FE1300A21259 /* marker.js */, - C1EA5EAB1680FE1300A21259 /* markerEnd.js */, - C1EA5EAC1680FE1300A21259 /* markerMid.js */, - C1EA5EAD1680FE1300A21259 /* markerOffset.js */, - C1EA5EAE1680FE1300A21259 /* markerStart.js */, - C1EA5EAF1680FE1300A21259 /* marks.js */, - C1EA5EB01680FE1300A21259 /* mask.js */, - C1EA5EB11680FE1300A21259 /* maxHeight.js */, - C1EA5EB21680FE1300A21259 /* maxWidth.js */, - C1EA5EB31680FE1300A21259 /* minHeight.js */, - C1EA5EB41680FE1300A21259 /* minWidth.js */, - C1EA5EB51680FE1300A21259 /* opacity.js */, - C1EA5EB61680FE1300A21259 /* orphans.js */, - C1EA5EB71680FE1300A21259 /* outline.js */, - C1EA5EB81680FE1300A21259 /* outlineColor.js */, - C1EA5EB91680FE1300A21259 /* outlineOffset.js */, - C1EA5EBA1680FE1300A21259 /* outlineStyle.js */, - C1EA5EBB1680FE1300A21259 /* outlineWidth.js */, - C1EA5EBC1680FE1300A21259 /* overflow.js */, - C1EA5EBD1680FE1300A21259 /* overflowX.js */, - C1EA5EBE1680FE1300A21259 /* overflowY.js */, - C1EA5EBF1680FE1300A21259 /* padding.js */, - C1EA5EC01680FE1300A21259 /* paddingBottom.js */, - C1EA5EC11680FE1300A21259 /* paddingLeft.js */, - C1EA5EC21680FE1300A21259 /* paddingRight.js */, - C1EA5EC31680FE1300A21259 /* paddingTop.js */, - C1EA5EC41680FE1300A21259 /* page.js */, - C1EA5EC51680FE1300A21259 /* pageBreakAfter.js */, - C1EA5EC61680FE1300A21259 /* pageBreakBefore.js */, - C1EA5EC71680FE1300A21259 /* pageBreakInside.js */, - C1EA5EC81680FE1300A21259 /* pause.js */, - C1EA5EC91680FE1300A21259 /* pauseAfter.js */, - C1EA5ECA1680FE1300A21259 /* pauseBefore.js */, - C1EA5ECB1680FE1300A21259 /* pitch.js */, - C1EA5ECC1680FE1300A21259 /* pitchRange.js */, - C1EA5ECD1680FE1300A21259 /* playDuring.js */, - C1EA5ECE1680FE1300A21259 /* pointerEvents.js */, - C1EA5ECF1680FE1300A21259 /* position.js */, - C1EA5ED01680FE1300A21259 /* quotes.js */, - C1EA5ED11680FE1300A21259 /* resize.js */, - C1EA5ED21680FE1300A21259 /* richness.js */, - C1EA5ED31680FE1300A21259 /* right.js */, - C1EA5ED41680FE1300A21259 /* shapeRendering.js */, - C1EA5ED51680FE1300A21259 /* size.js */, - C1EA5ED61680FE1300A21259 /* speak.js */, - C1EA5ED71680FE1300A21259 /* speakHeader.js */, - C1EA5ED81680FE1300A21259 /* speakNumeral.js */, - C1EA5ED91680FE1300A21259 /* speakPunctuation.js */, - C1EA5EDA1680FE1300A21259 /* speechRate.js */, - C1EA5EDB1680FE1300A21259 /* src.js */, - C1EA5EDC1680FE1300A21259 /* stopColor.js */, - C1EA5EDD1680FE1300A21259 /* stopOpacity.js */, - C1EA5EDE1680FE1300A21259 /* stress.js */, - C1EA5EDF1680FE1300A21259 /* stroke.js */, - C1EA5EE01680FE1300A21259 /* strokeDasharray.js */, - C1EA5EE11680FE1300A21259 /* strokeDashoffset.js */, - C1EA5EE21680FE1300A21259 /* strokeLinecap.js */, - C1EA5EE31680FE1300A21259 /* strokeLinejoin.js */, - C1EA5EE41680FE1300A21259 /* strokeMiterlimit.js */, - C1EA5EE51680FE1300A21259 /* strokeOpacity.js */, - C1EA5EE61680FE1300A21259 /* strokeWidth.js */, - C1EA5EE71680FE1300A21259 /* tableLayout.js */, - C1EA5EE81680FE1300A21259 /* textAlign.js */, - C1EA5EE91680FE1300A21259 /* textAnchor.js */, - C1EA5EEA1680FE1300A21259 /* textDecoration.js */, - C1EA5EEB1680FE1300A21259 /* textIndent.js */, - C1EA5EEC1680FE1300A21259 /* textLineThrough.js */, - C1EA5EED1680FE1300A21259 /* textLineThroughColor.js */, - C1EA5EEE1680FE1300A21259 /* textLineThroughMode.js */, - C1EA5EEF1680FE1300A21259 /* textLineThroughStyle.js */, - C1EA5EF01680FE1300A21259 /* textLineThroughWidth.js */, - C1EA5EF11680FE1300A21259 /* textOverflow.js */, - C1EA5EF21680FE1300A21259 /* textOverline.js */, - C1EA5EF31680FE1300A21259 /* textOverlineColor.js */, - C1EA5EF41680FE1300A21259 /* textOverlineMode.js */, - C1EA5EF51680FE1300A21259 /* textOverlineStyle.js */, - C1EA5EF61680FE1300A21259 /* textOverlineWidth.js */, - C1EA5EF71680FE1300A21259 /* textRendering.js */, - C1EA5EF81680FE1300A21259 /* textShadow.js */, - C1EA5EF91680FE1300A21259 /* textTransform.js */, - C1EA5EFA1680FE1300A21259 /* textUnderline.js */, - C1EA5EFB1680FE1300A21259 /* textUnderlineColor.js */, - C1EA5EFC1680FE1300A21259 /* textUnderlineMode.js */, - C1EA5EFD1680FE1300A21259 /* textUnderlineStyle.js */, - C1EA5EFE1680FE1300A21259 /* textUnderlineWidth.js */, - C1EA5EFF1680FE1300A21259 /* top.js */, - C1EA5F001680FE1300A21259 /* unicodeBidi.js */, - C1EA5F011680FE1300A21259 /* unicodeRange.js */, - C1EA5F021680FE1300A21259 /* vectorEffect.js */, - C1EA5F031680FE1300A21259 /* verticalAlign.js */, - C1EA5F041680FE1300A21259 /* visibility.js */, - C1EA5F051680FE1300A21259 /* voiceFamily.js */, - C1EA5F061680FE1300A21259 /* volume.js */, - C1EA5F071680FE1300A21259 /* webkitAnimation.js */, - C1EA5F081680FE1300A21259 /* webkitAnimationDelay.js */, - C1EA5F091680FE1300A21259 /* webkitAnimationDirection.js */, - C1EA5F0A1680FE1300A21259 /* webkitAnimationDuration.js */, - C1EA5F0B1680FE1300A21259 /* webkitAnimationFillMode.js */, - C1EA5F0C1680FE1300A21259 /* webkitAnimationIterationCount.js */, - C1EA5F0D1680FE1300A21259 /* webkitAnimationName.js */, - C1EA5F0E1680FE1300A21259 /* webkitAnimationPlayState.js */, - C1EA5F0F1680FE1300A21259 /* webkitAnimationTimingFunction.js */, - C1EA5F101680FE1300A21259 /* webkitAppearance.js */, - C1EA5F111680FE1300A21259 /* webkitAspectRatio.js */, - C1EA5F121680FE1300A21259 /* webkitBackfaceVisibility.js */, - C1EA5F131680FE1300A21259 /* webkitBackgroundClip.js */, - C1EA5F141680FE1300A21259 /* webkitBackgroundComposite.js */, - C1EA5F151680FE1300A21259 /* webkitBackgroundOrigin.js */, - C1EA5F161680FE1300A21259 /* webkitBackgroundSize.js */, - C1EA5F171680FE1300A21259 /* webkitBorderAfter.js */, - C1EA5F181680FE1300A21259 /* webkitBorderAfterColor.js */, - C1EA5F191680FE1300A21259 /* webkitBorderAfterStyle.js */, - C1EA5F1A1680FE1300A21259 /* webkitBorderAfterWidth.js */, - C1EA5F1B1680FE1300A21259 /* webkitBorderBefore.js */, - C1EA5F1C1680FE1300A21259 /* webkitBorderBeforeColor.js */, - C1EA5F1D1680FE1300A21259 /* webkitBorderBeforeStyle.js */, - C1EA5F1E1680FE1300A21259 /* webkitBorderBeforeWidth.js */, - C1EA5F1F1680FE1300A21259 /* webkitBorderEnd.js */, - C1EA5F201680FE1300A21259 /* webkitBorderEndColor.js */, - C1EA5F211680FE1300A21259 /* webkitBorderEndStyle.js */, - C1EA5F221680FE1300A21259 /* webkitBorderEndWidth.js */, - C1EA5F231680FE1300A21259 /* webkitBorderFit.js */, - C1EA5F241680FE1300A21259 /* webkitBorderHorizontalSpacing.js */, - C1EA5F251680FE1300A21259 /* webkitBorderImage.js */, - C1EA5F261680FE1300A21259 /* webkitBorderRadius.js */, - C1EA5F271680FE1300A21259 /* webkitBorderStart.js */, - C1EA5F281680FE1300A21259 /* webkitBorderStartColor.js */, - C1EA5F291680FE1300A21259 /* webkitBorderStartStyle.js */, - C1EA5F2A1680FE1300A21259 /* webkitBorderStartWidth.js */, - C1EA5F2B1680FE1300A21259 /* webkitBorderVerticalSpacing.js */, - C1EA5F2C1680FE1300A21259 /* webkitBoxAlign.js */, - C1EA5F2D1680FE1300A21259 /* webkitBoxDirection.js */, - C1EA5F2E1680FE1300A21259 /* webkitBoxFlex.js */, - C1EA5F2F1680FE1300A21259 /* webkitBoxFlexGroup.js */, - C1EA5F301680FE1300A21259 /* webkitBoxLines.js */, - C1EA5F311680FE1300A21259 /* webkitBoxOrdinalGroup.js */, - C1EA5F321680FE1300A21259 /* webkitBoxOrient.js */, - C1EA5F331680FE1300A21259 /* webkitBoxPack.js */, - C1EA5F341680FE1300A21259 /* webkitBoxReflect.js */, - C1EA5F351680FE1300A21259 /* webkitBoxShadow.js */, - C1EA5F361680FE1300A21259 /* webkitColorCorrection.js */, - C1EA5F371680FE1300A21259 /* webkitColumnAxis.js */, - C1EA5F381680FE1300A21259 /* webkitColumnBreakAfter.js */, - C1EA5F391680FE1300A21259 /* webkitColumnBreakBefore.js */, - C1EA5F3A1680FE1300A21259 /* webkitColumnBreakInside.js */, - C1EA5F3B1680FE1300A21259 /* webkitColumnCount.js */, - C1EA5F3C1680FE1300A21259 /* webkitColumnGap.js */, - C1EA5F3D1680FE1300A21259 /* webkitColumnRule.js */, - C1EA5F3E1680FE1300A21259 /* webkitColumnRuleColor.js */, - C1EA5F3F1680FE1300A21259 /* webkitColumnRuleStyle.js */, - C1EA5F401680FE1300A21259 /* webkitColumnRuleWidth.js */, - C1EA5F411680FE1300A21259 /* webkitColumns.js */, - C1EA5F421680FE1300A21259 /* webkitColumnSpan.js */, - C1EA5F431680FE1300A21259 /* webkitColumnWidth.js */, - C1EA5F441680FE1300A21259 /* webkitFilter.js */, - C1EA5F451680FE1300A21259 /* webkitFlexAlign.js */, - C1EA5F461680FE1300A21259 /* webkitFlexDirection.js */, - C1EA5F471680FE1300A21259 /* webkitFlexFlow.js */, - C1EA5F481680FE1300A21259 /* webkitFlexItemAlign.js */, - C1EA5F491680FE1300A21259 /* webkitFlexLinePack.js */, - C1EA5F4A1680FE1300A21259 /* webkitFlexOrder.js */, - C1EA5F4B1680FE1300A21259 /* webkitFlexPack.js */, - C1EA5F4C1680FE1300A21259 /* webkitFlexWrap.js */, - C1EA5F4D1680FE1300A21259 /* webkitFlowFrom.js */, - C1EA5F4E1680FE1300A21259 /* webkitFlowInto.js */, - C1EA5F4F1680FE1300A21259 /* webkitFontFeatureSettings.js */, - C1EA5F501680FE1300A21259 /* webkitFontKerning.js */, - C1EA5F511680FE1300A21259 /* webkitFontSizeDelta.js */, - C1EA5F521680FE1300A21259 /* webkitFontSmoothing.js */, - C1EA5F531680FE1300A21259 /* webkitFontVariantLigatures.js */, - C1EA5F541680FE1300A21259 /* webkitHighlight.js */, - C1EA5F551680FE1300A21259 /* webkitHyphenateCharacter.js */, - C1EA5F561680FE1300A21259 /* webkitHyphenateLimitAfter.js */, - C1EA5F571680FE1300A21259 /* webkitHyphenateLimitBefore.js */, - C1EA5F581680FE1300A21259 /* webkitHyphenateLimitLines.js */, - C1EA5F591680FE1300A21259 /* webkitHyphens.js */, - C1EA5F5A1680FE1300A21259 /* webkitLineAlign.js */, - C1EA5F5B1680FE1300A21259 /* webkitLineBoxContain.js */, - C1EA5F5C1680FE1300A21259 /* webkitLineBreak.js */, - C1EA5F5D1680FE1300A21259 /* webkitLineClamp.js */, - C1EA5F5E1680FE1300A21259 /* webkitLineGrid.js */, - C1EA5F5F1680FE1300A21259 /* webkitLineSnap.js */, - C1EA5F601680FE1300A21259 /* webkitLocale.js */, - C1EA5F611680FE1300A21259 /* webkitLogicalHeight.js */, - C1EA5F621680FE1300A21259 /* webkitLogicalWidth.js */, - C1EA5F631680FE1300A21259 /* webkitMarginAfter.js */, - C1EA5F641680FE1300A21259 /* webkitMarginAfterCollapse.js */, - C1EA5F651680FE1300A21259 /* webkitMarginBefore.js */, - C1EA5F661680FE1300A21259 /* webkitMarginBeforeCollapse.js */, - C1EA5F671680FE1300A21259 /* webkitMarginBottomCollapse.js */, - C1EA5F681680FE1300A21259 /* webkitMarginCollapse.js */, - C1EA5F691680FE1300A21259 /* webkitMarginEnd.js */, - C1EA5F6A1680FE1300A21259 /* webkitMarginStart.js */, - C1EA5F6B1680FE1300A21259 /* webkitMarginTopCollapse.js */, - C1EA5F6C1680FE1300A21259 /* webkitMarquee.js */, - C1EA5F6D1680FE1300A21259 /* webkitMarqueeDirection.js */, - C1EA5F6E1680FE1300A21259 /* webkitMarqueeIncrement.js */, - C1EA5F6F1680FE1300A21259 /* webkitMarqueeRepetition.js */, - C1EA5F701680FE1300A21259 /* webkitMarqueeSpeed.js */, - C1EA5F711680FE1300A21259 /* webkitMarqueeStyle.js */, - C1EA5F721680FE1300A21259 /* webkitMask.js */, - C1EA5F731680FE1300A21259 /* webkitMaskAttachment.js */, - C1EA5F741680FE1300A21259 /* webkitMaskBoxImage.js */, - C1EA5F751680FE1300A21259 /* webkitMaskBoxImageOutset.js */, - C1EA5F761680FE1300A21259 /* webkitMaskBoxImageRepeat.js */, - C1EA5F771680FE1300A21259 /* webkitMaskBoxImageSlice.js */, - C1EA5F781680FE1300A21259 /* webkitMaskBoxImageSource.js */, - C1EA5F791680FE1300A21259 /* webkitMaskBoxImageWidth.js */, - C1EA5F7A1680FE1300A21259 /* webkitMaskClip.js */, - C1EA5F7B1680FE1300A21259 /* webkitMaskComposite.js */, - C1EA5F7C1680FE1300A21259 /* webkitMaskImage.js */, - C1EA5F7D1680FE1300A21259 /* webkitMaskOrigin.js */, - C1EA5F7E1680FE1300A21259 /* webkitMaskPosition.js */, - C1EA5F7F1680FE1300A21259 /* webkitMaskPositionX.js */, - C1EA5F801680FE1300A21259 /* webkitMaskPositionY.js */, - C1EA5F811680FE1300A21259 /* webkitMaskRepeat.js */, - C1EA5F821680FE1300A21259 /* webkitMaskRepeatX.js */, - C1EA5F831680FE1300A21259 /* webkitMaskRepeatY.js */, - C1EA5F841680FE1300A21259 /* webkitMaskSize.js */, - C1EA5F851680FE1300A21259 /* webkitMatchNearestMailBlockquoteColor.js */, - C1EA5F861680FE1300A21259 /* webkitMaxLogicalHeight.js */, - C1EA5F871680FE1300A21259 /* webkitMaxLogicalWidth.js */, - C1EA5F881680FE1300A21259 /* webkitMinLogicalHeight.js */, - C1EA5F891680FE1300A21259 /* webkitMinLogicalWidth.js */, - C1EA5F8A1680FE1300A21259 /* webkitNbspMode.js */, - C1EA5F8B1680FE1300A21259 /* webkitOverflowScrolling.js */, - C1EA5F8C1680FE1300A21259 /* webkitPaddingAfter.js */, - C1EA5F8D1680FE1300A21259 /* webkitPaddingBefore.js */, - C1EA5F8E1680FE1300A21259 /* webkitPaddingEnd.js */, - C1EA5F8F1680FE1300A21259 /* webkitPaddingStart.js */, - C1EA5F901680FE1300A21259 /* webkitPerspective.js */, - C1EA5F911680FE1300A21259 /* webkitPerspectiveOrigin.js */, - C1EA5F921680FE1300A21259 /* webkitPerspectiveOriginX.js */, - C1EA5F931680FE1300A21259 /* webkitPerspectiveOriginY.js */, - C1EA5F941680FE1300A21259 /* webkitPrintColorAdjust.js */, - C1EA5F951680FE1300A21259 /* webkitRegionBreakAfter.js */, - C1EA5F961680FE1300A21259 /* webkitRegionBreakBefore.js */, - C1EA5F971680FE1300A21259 /* webkitRegionBreakInside.js */, - C1EA5F981680FE1300A21259 /* webkitRegionOverflow.js */, - C1EA5F991680FE1300A21259 /* webkitRtlOrdering.js */, - C1EA5F9A1680FE1300A21259 /* webkitSvgShadow.js */, - C1EA5F9B1680FE1300A21259 /* webkitTapHighlightColor.js */, - C1EA5F9C1680FE1300A21259 /* webkitTextCombine.js */, - C1EA5F9D1680FE1300A21259 /* webkitTextDecorationsInEffect.js */, - C1EA5F9E1680FE1300A21259 /* webkitTextEmphasis.js */, - C1EA5F9F1680FE1300A21259 /* webkitTextEmphasisColor.js */, - C1EA5FA01680FE1300A21259 /* webkitTextEmphasisPosition.js */, - C1EA5FA11680FE1300A21259 /* webkitTextEmphasisStyle.js */, - C1EA5FA21680FE1300A21259 /* webkitTextFillColor.js */, - C1EA5FA31680FE1300A21259 /* webkitTextOrientation.js */, - C1EA5FA41680FE1300A21259 /* webkitTextSecurity.js */, - C1EA5FA51680FE1300A21259 /* webkitTextSizeAdjust.js */, - C1EA5FA61680FE1300A21259 /* webkitTextStroke.js */, - C1EA5FA71680FE1300A21259 /* webkitTextStrokeColor.js */, - C1EA5FA81680FE1300A21259 /* webkitTextStrokeWidth.js */, - C1EA5FA91680FE1300A21259 /* webkitTransform.js */, - C1EA5FAA1680FE1300A21259 /* webkitTransformOrigin.js */, - C1EA5FAB1680FE1300A21259 /* webkitTransformOriginX.js */, - C1EA5FAC1680FE1300A21259 /* webkitTransformOriginY.js */, - C1EA5FAD1680FE1300A21259 /* webkitTransformOriginZ.js */, - C1EA5FAE1680FE1300A21259 /* webkitTransformStyle.js */, - C1EA5FAF1680FE1300A21259 /* webkitTransition.js */, - C1EA5FB01680FE1300A21259 /* webkitTransitionDelay.js */, - C1EA5FB11680FE1300A21259 /* webkitTransitionDuration.js */, - C1EA5FB21680FE1300A21259 /* webkitTransitionProperty.js */, - C1EA5FB31680FE1300A21259 /* webkitTransitionTimingFunction.js */, - C1EA5FB41680FE1300A21259 /* webkitUserDrag.js */, - C1EA5FB51680FE1300A21259 /* webkitUserModify.js */, - C1EA5FB61680FE1300A21259 /* webkitUserSelect.js */, - C1EA5FB71680FE1300A21259 /* webkitWrap.js */, - C1EA5FB81680FE1300A21259 /* webkitWrapFlow.js */, - C1EA5FB91680FE1300A21259 /* webkitWrapMargin.js */, - C1EA5FBA1680FE1300A21259 /* webkitWrapPadding.js */, - C1EA5FBB1680FE1300A21259 /* webkitWrapShapeInside.js */, - C1EA5FBC1680FE1300A21259 /* webkitWrapShapeOutside.js */, - C1EA5FBD1680FE1300A21259 /* webkitWrapThrough.js */, - C1EA5FBE1680FE1300A21259 /* webkitWritingMode.js */, - C1EA5FBF1680FE1300A21259 /* whiteSpace.js */, - C1EA5FC01680FE1300A21259 /* widows.js */, - C1EA5FC11680FE1300A21259 /* width.js */, - C1EA5FC21680FE1300A21259 /* wordBreak.js */, - C1EA5FC31680FE1300A21259 /* wordSpacing.js */, - C1EA5FC41680FE1300A21259 /* wordWrap.js */, - C1EA5FC51680FE1300A21259 /* writingMode.js */, - C1EA5FC61680FE1300A21259 /* zIndex.js */, - C1EA5FC71680FE1300A21259 /* zoom.js */, - ); - path = properties; - sourceTree = ""; - }; - C1EA5FCC1680FE1300A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA5FCD1680FE1300A21259 /* tests.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA5FCE1680FE1300A21259 /* htmlparser */ = { - isa = PBXGroup; - children = ( - C1EA5FCF1680FE1300A21259 /* .project */, - C1EA5FD01680FE1300A21259 /* .project.bak */, - C1EA5FD11680FE1300A21259 /* .settings */, - C1EA5FD61680FE1300A21259 /* a */, - C1EA5FD71680FE1300A21259 /* b */, - C1EA5FD81680FE1300A21259 /* c */, - C1EA5FD91680FE1300A21259 /* CHANGELOG */, - C1EA5FDA1680FE1300A21259 /* json2.js */, - C1EA5FDB1680FE1300A21259 /* lib */, - C1EA5FE01680FE1300A21259 /* libxmljs.node */, - C1EA5FE11680FE1300A21259 /* LICENSE */, - C1EA5FE21680FE1300A21259 /* new */, - C1EA5FEA1680FE1300A21259 /* newparser.js */, - C1EA5FEB1680FE1300A21259 /* node-htmlparser.old.js */, - C1EA5FEC1680FE1300A21259 /* package.json */, - C1EA5FED1680FE1300A21259 /* profile */, - C1EA5FEE1680FE1300A21259 /* profile.getelement.js */, - C1EA5FEF1680FE1300A21259 /* profile.getelement.txt */, - C1EA5FF01680FE1300A21259 /* profile.js */, - C1EA5FF11680FE1300A21259 /* profileresults.txt */, - C1EA5FF21680FE1300A21259 /* pulls */, - C1EA60191680FE1300A21259 /* README.md */, - C1EA601A1680FE1300A21259 /* rssbug.js */, - C1EA601B1680FE1300A21259 /* rssbug.rss */, - C1EA601C1680FE1300A21259 /* runtests.html */, - C1EA601D1680FE1300A21259 /* runtests.js */, - C1EA601E1680FE1300A21259 /* runtests.min.html */, - C1EA601F1680FE1300A21259 /* runtests.min.js */, - C1EA60201680FE1300A21259 /* runtests_new.js */, - C1EA60211680FE1300A21259 /* snippet.js */, - C1EA60221680FE1300A21259 /* test01.js */, - C1EA60231680FE1300A21259 /* testdata */, - C1EA60271680FE1300A21259 /* tests */, - C1EA603E1680FE1300A21259 /* tmp */, - C1EA60401680FE1300A21259 /* utils_example.js */, - C1EA60411680FE1300A21259 /* v8.log */, - ); - path = htmlparser; - sourceTree = ""; - }; - C1EA5FD11680FE1300A21259 /* .settings */ = { - isa = PBXGroup; - children = ( - C1EA5FD21680FE1300A21259 /* .jsdtscope */, - C1EA5FD31680FE1300A21259 /* org.eclipse.core.resources.prefs */, - C1EA5FD41680FE1300A21259 /* org.eclipse.wst.jsdt.ui.superType.container */, - C1EA5FD51680FE1300A21259 /* org.eclipse.wst.jsdt.ui.superType.name */, - ); - path = .settings; - sourceTree = ""; - }; - C1EA5FDB1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5FDC1680FE1300A21259 /* htmlparser.js */, - C1EA5FDD1680FE1300A21259 /* htmlparser.min.js */, - C1EA5FDE1680FE1300A21259 /* node-htmlparser.js */, - C1EA5FDF1680FE1300A21259 /* node-htmlparser.min.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA5FE21680FE1300A21259 /* new */ = { - isa = PBXGroup; - children = ( - C1EA5FE31680FE1300A21259 /* a */, - C1EA5FE41680FE1300A21259 /* b */, - C1EA5FE51680FE1300A21259 /* compat.js */, - C1EA5FE61680FE1300A21259 /* htmlparser.js */, - C1EA5FE71680FE1300A21259 /* parser.zip */, - C1EA5FE81680FE1300A21259 /* test01.js */, - C1EA5FE91680FE1300A21259 /* test02.js */, - ); - path = new; - sourceTree = ""; - }; - C1EA5FF21680FE1300A21259 /* pulls */ = { - isa = PBXGroup; - children = ( - C1EA5FF31680FE1300A21259 /* node-htmlparser */, - ); - path = pulls; - sourceTree = ""; - }; - C1EA5FF31680FE1300A21259 /* node-htmlparser */ = { - isa = PBXGroup; - children = ( - C1EA5FF41680FE1300A21259 /* CHANGELOG */, - C1EA5FF51680FE1300A21259 /* json2.js */, - C1EA5FF61680FE1300A21259 /* lib */, - C1EA5FF91680FE1300A21259 /* LICENSE */, - C1EA5FFA1680FE1300A21259 /* package.json */, - C1EA5FFB1680FE1300A21259 /* profile.js */, - C1EA5FFC1680FE1300A21259 /* README.md */, - C1EA5FFD1680FE1300A21259 /* runtests.html */, - C1EA5FFE1680FE1300A21259 /* runtests.js */, - C1EA5FFF1680FE1300A21259 /* runtests.min.html */, - C1EA60001680FE1300A21259 /* runtests.min.js */, - C1EA60011680FE1300A21259 /* snippet.js */, - C1EA60021680FE1300A21259 /* tests */, - C1EA60181680FE1300A21259 /* utils_example.js */, - ); - path = "node-htmlparser"; - sourceTree = ""; - }; - C1EA5FF61680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA5FF71680FE1300A21259 /* node-htmlparser.js */, - C1EA5FF81680FE1300A21259 /* node-htmlparser.min.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA60021680FE1300A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA60031680FE1300A21259 /* 01-basic.js */, - C1EA60041680FE1300A21259 /* 02-single_tag_1.js */, - C1EA60051680FE1300A21259 /* 03-single_tag_2.js */, - C1EA60061680FE1300A21259 /* 04-unescaped_in_script.js */, - C1EA60071680FE1300A21259 /* 05-tags_in_comment.js */, - C1EA60081680FE1300A21259 /* 06-comment_in_script.js */, - C1EA60091680FE1300A21259 /* 07-unescaped_in_style.js */, - C1EA600A1680FE1300A21259 /* 08-extra_spaces_in_tag.js */, - C1EA600B1680FE1300A21259 /* 09-unquoted_attrib.js */, - C1EA600C1680FE1300A21259 /* 10-singular_attribute.js */, - C1EA600D1680FE1300A21259 /* 11-text_outside_tags.js */, - C1EA600E1680FE1300A21259 /* 12-text_only.js */, - C1EA600F1680FE1300A21259 /* 13-comment_in_text.js */, - C1EA60101680FE1300A21259 /* 14-comment_in_text_in_script.js */, - C1EA60111680FE1300A21259 /* 15-non-verbose.js */, - C1EA60121680FE1300A21259 /* 16-ignore_whitespace.js */, - C1EA60131680FE1300A21259 /* 17-xml_namespace.js */, - C1EA60141680FE1300A21259 /* 18-enforce_empty_tags.js */, - C1EA60151680FE1300A21259 /* 19-ignore_empty_tags.js */, - C1EA60161680FE1300A21259 /* 20-rss.js */, - C1EA60171680FE1300A21259 /* 21-atom.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA60231680FE1300A21259 /* testdata */ = { - isa = PBXGroup; - children = ( - C1EA60241680FE1300A21259 /* api.html */, - C1EA60251680FE1300A21259 /* getelement.html */, - C1EA60261680FE1300A21259 /* trackerchecker.html */, - ); - path = testdata; - sourceTree = ""; - }; - C1EA60271680FE1300A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA60281680FE1300A21259 /* 01-basic.js */, - C1EA60291680FE1300A21259 /* 02-single_tag_1.js */, - C1EA602A1680FE1300A21259 /* 03-single_tag_2.js */, - C1EA602B1680FE1300A21259 /* 04-unescaped_in_script.js */, - C1EA602C1680FE1300A21259 /* 05-tags_in_comment.js */, - C1EA602D1680FE1300A21259 /* 06-comment_in_script.js */, - C1EA602E1680FE1300A21259 /* 07-unescaped_in_style.js */, - C1EA602F1680FE1300A21259 /* 08-extra_spaces_in_tag.js */, - C1EA60301680FE1300A21259 /* 09-unquoted_attrib.js */, - C1EA60311680FE1300A21259 /* 10-singular_attribute.js */, - C1EA60321680FE1300A21259 /* 11-text_outside_tags.js */, - C1EA60331680FE1300A21259 /* 12-text_only.js */, - C1EA60341680FE1300A21259 /* 13-comment_in_text.js */, - C1EA60351680FE1300A21259 /* 14-comment_in_text_in_script.js */, - C1EA60361680FE1300A21259 /* 15-non-verbose.js */, - C1EA60371680FE1300A21259 /* 16-ignore_whitespace.js */, - C1EA60381680FE1300A21259 /* 17-xml_namespace.js */, - C1EA60391680FE1300A21259 /* 18-enforce_empty_tags.js */, - C1EA603A1680FE1300A21259 /* 19-ignore_empty_tags.js */, - C1EA603B1680FE1300A21259 /* 20-rss.js */, - C1EA603C1680FE1300A21259 /* 21-atom.js */, - C1EA603D1680FE1300A21259 /* 22-position_data.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA603E1680FE1300A21259 /* tmp */ = { - isa = PBXGroup; - children = ( - C1EA603F1680FE1300A21259 /* snippet.js */, - ); - path = tmp; - sourceTree = ""; - }; - C1EA60421680FE1300A21259 /* request */ = { - isa = PBXGroup; - children = ( - C1EA60431680FE1300A21259 /* aws.js */, - C1EA60441680FE1300A21259 /* forever.js */, - C1EA60451680FE1300A21259 /* LICENSE */, - C1EA60461680FE1300A21259 /* main.js */, - C1EA60471680FE1300A21259 /* node_modules */, - C1EA60A51680FE1300A21259 /* oauth.js */, - C1EA60A61680FE1300A21259 /* package.json */, - C1EA60A71680FE1300A21259 /* README.md */, - C1EA60A81680FE1300A21259 /* tests */, - C1EA60D71680FE1300A21259 /* tunnel.js */, - C1EA60D81680FE1300A21259 /* uuid.js */, - C1EA60D91680FE1300A21259 /* vendor */, - ); - path = request; - sourceTree = ""; - }; - C1EA60471680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA60481680FE1300A21259 /* form-data */, - C1EA609C1680FE1300A21259 /* mime */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA60481680FE1300A21259 /* form-data */ = { - isa = PBXGroup; - children = ( - C1EA60491680FE1300A21259 /* .npmignore */, - C1EA604A1680FE1300A21259 /* lib */, - C1EA604C1680FE1300A21259 /* Makefile */, - C1EA604D1680FE1300A21259 /* node-form-data.sublime-project */, - C1EA604E1680FE1300A21259 /* node-form-data.sublime-workspace */, - C1EA604F1680FE1300A21259 /* node_modules */, - C1EA608E1680FE1300A21259 /* package.json */, - C1EA608F1680FE1300A21259 /* Readme.md */, - C1EA60901680FE1300A21259 /* test */, - ); - path = "form-data"; - sourceTree = ""; - }; - C1EA604A1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA604B1680FE1300A21259 /* form_data.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA604F1680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA60501680FE1300A21259 /* async */, - C1EA60641680FE1300A21259 /* combined-stream */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA60501680FE1300A21259 /* async */ = { - isa = PBXGroup; - children = ( - C1EA60511680FE1300A21259 /* .gitmodules */, - C1EA60521680FE1300A21259 /* async.min.js.gzip */, - C1EA60531680FE1300A21259 /* deps */, - C1EA60561680FE1300A21259 /* dist */, - C1EA60581680FE1300A21259 /* index.js */, - C1EA60591680FE1300A21259 /* lib */, - C1EA605B1680FE1300A21259 /* LICENSE */, - C1EA605C1680FE1300A21259 /* Makefile */, - C1EA605D1680FE1300A21259 /* nodelint.cfg */, - C1EA605E1680FE1300A21259 /* package.json */, - C1EA605F1680FE1300A21259 /* README.md */, - C1EA60601680FE1300A21259 /* test */, - ); - path = async; - sourceTree = ""; - }; - C1EA60531680FE1300A21259 /* deps */ = { - isa = PBXGroup; - children = ( - C1EA60541680FE1300A21259 /* nodeunit.css */, - C1EA60551680FE1300A21259 /* nodeunit.js */, - ); - path = deps; - sourceTree = ""; - }; - C1EA60561680FE1300A21259 /* dist */ = { - isa = PBXGroup; - children = ( - C1EA60571680FE1300A21259 /* async.min.js */, - ); - path = dist; - sourceTree = ""; - }; - C1EA60591680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA605A1680FE1300A21259 /* async.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA60601680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA60611680FE1300A21259 /* .swp */, - C1EA60621680FE1300A21259 /* test-async.js */, - C1EA60631680FE1300A21259 /* test.html */, - ); - path = test; - sourceTree = ""; - }; - C1EA60641680FE1300A21259 /* combined-stream */ = { - isa = PBXGroup; - children = ( - C1EA60651680FE1300A21259 /* .npmignore */, - C1EA60661680FE1300A21259 /* lib */, - C1EA60681680FE1300A21259 /* License */, - C1EA60691680FE1300A21259 /* Makefile */, - C1EA606A1680FE1300A21259 /* node_modules */, - C1EA607F1680FE1300A21259 /* package.json */, - C1EA60801680FE1300A21259 /* Readme.md */, - C1EA60811680FE1300A21259 /* test */, - ); - path = "combined-stream"; - sourceTree = ""; - }; - C1EA60661680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA60671680FE1300A21259 /* combined_stream.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA606A1680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA606B1680FE1300A21259 /* delayed-stream */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA606B1680FE1300A21259 /* delayed-stream */ = { - isa = PBXGroup; - children = ( - C1EA606C1680FE1300A21259 /* .npmignore */, - C1EA606D1680FE1300A21259 /* lib */, - C1EA606F1680FE1300A21259 /* License */, - C1EA60701680FE1300A21259 /* Makefile */, - C1EA60711680FE1300A21259 /* package.json */, - C1EA60721680FE1300A21259 /* Readme.md */, - C1EA60731680FE1300A21259 /* test */, - ); - path = "delayed-stream"; - sourceTree = ""; - }; - C1EA606D1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA606E1680FE1300A21259 /* delayed_stream.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA60731680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA60741680FE1300A21259 /* common.js */, - C1EA60751680FE1300A21259 /* integration */, - C1EA607E1680FE1300A21259 /* run.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA60751680FE1300A21259 /* integration */ = { - isa = PBXGroup; - children = ( - C1EA60761680FE1300A21259 /* test-delayed-http-upload.js */, - C1EA60771680FE1300A21259 /* test-delayed-stream-auto-pause.js */, - C1EA60781680FE1300A21259 /* test-delayed-stream-pause.js */, - C1EA60791680FE1300A21259 /* test-delayed-stream.js */, - C1EA607A1680FE1300A21259 /* test-handle-source-errors.js */, - C1EA607B1680FE1300A21259 /* test-max-data-size.js */, - C1EA607C1680FE1300A21259 /* test-pipe-resumes.js */, - C1EA607D1680FE1300A21259 /* test-proxy-readable.js */, - ); - path = integration; - sourceTree = ""; - }; - C1EA60811680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA60821680FE1300A21259 /* common.js */, - C1EA60831680FE1300A21259 /* fixture */, - C1EA60861680FE1300A21259 /* integration */, - C1EA608D1680FE1300A21259 /* run.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA60831680FE1300A21259 /* fixture */ = { - isa = PBXGroup; - children = ( - C1EA60841680FE1300A21259 /* file1.txt */, - C1EA60851680FE1300A21259 /* file2.txt */, - ); - path = fixture; - sourceTree = ""; - }; - C1EA60861680FE1300A21259 /* integration */ = { - isa = PBXGroup; - children = ( - C1EA60871680FE1300A21259 /* test-callback-streams.js */, - C1EA60881680FE1300A21259 /* test-data-size.js */, - C1EA60891680FE1300A21259 /* test-delayed-streams-and-buffers-and-strings.js */, - C1EA608A1680FE1300A21259 /* test-delayed-streams.js */, - C1EA608B1680FE1300A21259 /* test-max-data-size.js */, - C1EA608C1680FE1300A21259 /* test-unpaused-streams.js */, - ); - path = integration; - sourceTree = ""; - }; - C1EA60901680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA60911680FE1300A21259 /* common.js */, - C1EA60921680FE1300A21259 /* fixture */, - C1EA60951680FE1300A21259 /* integration */, - C1EA609B1680FE1300A21259 /* run.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA60921680FE1300A21259 /* fixture */ = { - isa = PBXGroup; - children = ( - C1EA60931680FE1300A21259 /* bacon.txt */, - C1EA60941680FE1300A21259 /* unicycle.jpg */, - ); - path = fixture; - sourceTree = ""; - }; - C1EA60951680FE1300A21259 /* integration */ = { - isa = PBXGroup; - children = ( - C1EA60961680FE1300A21259 /* test-form-get-length.js */, - C1EA60971680FE1300A21259 /* test-get-boundary.js */, - C1EA60981680FE1300A21259 /* test-http-response.js */, - C1EA60991680FE1300A21259 /* test-pipe.js */, - C1EA609A1680FE1300A21259 /* test-submit.js */, - ); - path = integration; - sourceTree = ""; - }; - C1EA609C1680FE1300A21259 /* mime */ = { - isa = PBXGroup; - children = ( - C1EA609D1680FE1300A21259 /* LICENSE */, - C1EA609E1680FE1300A21259 /* mime.js */, - C1EA609F1680FE1300A21259 /* package.json */, - C1EA60A01680FE1300A21259 /* README.md */, - C1EA60A11680FE1300A21259 /* test.js */, - C1EA60A21680FE1300A21259 /* types */, - ); - path = mime; - sourceTree = ""; - }; - C1EA60A21680FE1300A21259 /* types */ = { - isa = PBXGroup; - children = ( - C1EA60A31680FE1300A21259 /* mime.types */, - C1EA60A41680FE1300A21259 /* node.types */, - ); - path = types; - sourceTree = ""; - }; - C1EA60A81680FE1300A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA60A91680FE1300A21259 /* googledoodle.png */, - C1EA60AA1680FE1300A21259 /* run.js */, - C1EA60AB1680FE1300A21259 /* server.js */, - C1EA60AC1680FE1300A21259 /* squid.conf */, - C1EA60AD1680FE1300A21259 /* ssl */, - C1EA60BD1680FE1300A21259 /* test-body.js */, - C1EA60BE1680FE1300A21259 /* test-cookie.js */, - C1EA60BF1680FE1300A21259 /* test-cookiejar.js */, - C1EA60C01680FE1300A21259 /* test-defaults.js */, - C1EA60C11680FE1300A21259 /* test-errors.js */, - C1EA60C21680FE1300A21259 /* test-follow-all-303.js */, - C1EA60C31680FE1300A21259 /* test-follow-all.js */, - C1EA60C41680FE1300A21259 /* test-form.js */, - C1EA60C51680FE1300A21259 /* test-headers.js */, - C1EA60C61680FE1300A21259 /* test-httpModule.js */, - C1EA60C71680FE1300A21259 /* test-https-strict.js */, - C1EA60C81680FE1300A21259 /* test-https.js */, - C1EA60C91680FE1300A21259 /* test-oauth.js */, - C1EA60CA1680FE1300A21259 /* test-params.js */, - C1EA60CB1680FE1300A21259 /* test-piped-redirect.js */, - C1EA60CC1680FE1300A21259 /* test-pipes.js */, - C1EA60CD1680FE1300A21259 /* test-pool.js */, - C1EA60CE1680FE1300A21259 /* test-protocol-changing-redirect.js */, - C1EA60CF1680FE1300A21259 /* test-proxy.js */, - C1EA60D01680FE1300A21259 /* test-qs.js */, - C1EA60D11680FE1300A21259 /* test-redirect.js */, - C1EA60D21680FE1300A21259 /* test-s3.js */, - C1EA60D31680FE1300A21259 /* test-timeout.js */, - C1EA60D41680FE1300A21259 /* test-toJSON.js */, - C1EA60D51680FE1300A21259 /* test-tunnel.js */, - C1EA60D61680FE1300A21259 /* unicycle.jpg */, - ); - path = tests; - sourceTree = ""; - }; - C1EA60AD1680FE1300A21259 /* ssl */ = { - isa = PBXGroup; - children = ( - C1EA60AE1680FE1300A21259 /* ca */, - C1EA60BA1680FE1300A21259 /* npm-ca.crt */, - C1EA60BB1680FE1300A21259 /* test.crt */, - C1EA60BC1680FE1300A21259 /* test.key */, - ); - path = ssl; - sourceTree = ""; - }; - C1EA60AE1680FE1300A21259 /* ca */ = { - isa = PBXGroup; - children = ( - C1EA60AF1680FE1300A21259 /* ca.cnf */, - C1EA60B01680FE1300A21259 /* ca.crl */, - C1EA60B11680FE1300A21259 /* ca.crt */, - C1EA60B21680FE1300A21259 /* ca.csr */, - C1EA60B31680FE1300A21259 /* ca.key */, - C1EA60B41680FE1300A21259 /* ca.srl */, - C1EA60B51680FE1300A21259 /* server.cnf */, - C1EA60B61680FE1300A21259 /* server.crt */, - C1EA60B71680FE1300A21259 /* server.csr */, - C1EA60B81680FE1300A21259 /* server.js */, - C1EA60B91680FE1300A21259 /* server.key */, - ); - path = ca; - sourceTree = ""; - }; - C1EA60D91680FE1300A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA60DA1680FE1300A21259 /* cookie */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA60DA1680FE1300A21259 /* cookie */ = { - isa = PBXGroup; - children = ( - C1EA60DB1680FE1300A21259 /* index.js */, - C1EA60DC1680FE1300A21259 /* jar.js */, - ); - path = cookie; - sourceTree = ""; - }; - C1EA60E11680FE1300A21259 /* resources */ = { - isa = PBXGroup; - children = ( - C1EA60E21680FE1300A21259 /* buster-test.css */, - ); - path = resources; - sourceTree = ""; - }; - C1EA60E41680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA60E51680FE1300A21259 /* integration */, - C1EA60E71680FE1300A21259 /* test.html */, - C1EA60E81680FE1300A21259 /* unit */, - ); - path = test; - sourceTree = ""; - }; - C1EA60E51680FE1300A21259 /* integration */ = { - isa = PBXGroup; - children = ( - C1EA60E61680FE1300A21259 /* test-runner-test.js */, - ); - path = integration; - sourceTree = ""; - }; - C1EA60E81680FE1300A21259 /* unit */ = { - isa = PBXGroup; - children = ( - C1EA60E91680FE1300A21259 /* buster-test */, - ); - path = unit; - sourceTree = ""; - }; - C1EA60E91680FE1300A21259 /* buster-test */ = { - isa = PBXGroup; - children = ( - C1EA60EA1680FE1300A21259 /* auto-run-test.js */, - C1EA60EB1680FE1300A21259 /* browser-env-test.js */, - C1EA60EC1680FE1300A21259 /* reporters */, - C1EA60F51680FE1300A21259 /* reporters-test.js */, - C1EA60F61680FE1300A21259 /* spec-test.js */, - C1EA60F71680FE1300A21259 /* stack-filter-test.js */, - C1EA60F81680FE1300A21259 /* test-case-test.js */, - C1EA60F91680FE1300A21259 /* test-context-test.js */, - C1EA60FA1680FE1300A21259 /* test-runner-test.js */, - ); - path = "buster-test"; - sourceTree = ""; - }; - C1EA60EC1680FE1300A21259 /* reporters */ = { - isa = PBXGroup; - children = ( - C1EA60ED1680FE1300A21259 /* dots-test.js */, - C1EA60EE1680FE1300A21259 /* html-test.js */, - C1EA60EF1680FE1300A21259 /* json-proxy-test.js */, - C1EA60F01680FE1300A21259 /* specification-test.js */, - C1EA60F11680FE1300A21259 /* tap-test.js */, - C1EA60F21680FE1300A21259 /* teamcity-test.js */, - C1EA60F31680FE1300A21259 /* test-helper.js */, - C1EA60F41680FE1300A21259 /* xml-test.js */, - ); - path = reporters; - sourceTree = ""; - }; - C1EA60FB1680FE1300A21259 /* buster-test-cli */ = { - isa = PBXGroup; - children = ( - C1EA60FC1680FE1300A21259 /* .travis.yml */, - C1EA60FD1680FE1300A21259 /* AUTHORS */, - C1EA60FE1680FE1300A21259 /* autolint.js */, - C1EA60FF1680FE1300A21259 /* buster-config.js */, - C1EA61001680FE1300A21259 /* lib */, - C1EA610A1680FE1300A21259 /* LICENSE */, - C1EA610B1680FE1300A21259 /* node_modules */, - C1EA642D1680FE1300A21259 /* package.json */, - C1EA642E1680FE1300A21259 /* Readme.md */, - C1EA642F1680FE1300A21259 /* run-tests.js */, - C1EA64301680FE1300A21259 /* runners.org */, - C1EA64311680FE1300A21259 /* test */, - C1EA643B1680FE1300A21259 /* views */, - ); - path = "buster-test-cli"; - sourceTree = ""; - }; - C1EA61001680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA61011680FE1300A21259 /* run-analyzer.js */, - C1EA61021680FE1300A21259 /* runners */, - C1EA61081680FE1300A21259 /* test-cli.js */, - C1EA61091680FE1300A21259 /* tmp-file.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA61021680FE1300A21259 /* runners */ = { - isa = PBXGroup; - children = ( - C1EA61031680FE1300A21259 /* browser */, - C1EA61061680FE1300A21259 /* browser.js */, - C1EA61071680FE1300A21259 /* node.js */, - ); - path = runners; - sourceTree = ""; - }; - C1EA61031680FE1300A21259 /* browser */ = { - isa = PBXGroup; - children = ( - C1EA61041680FE1300A21259 /* progress-reporter.js */, - C1EA61051680FE1300A21259 /* remote-runner.js */, - ); - path = browser; - sourceTree = ""; - }; - C1EA610B1680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA610C1680FE1300A21259 /* .bin */, - C1EA610E1680FE1300A21259 /* ansi-colorizer */, - C1EA611B1680FE1300A21259 /* ansi-grid */, - C1EA612C1680FE1300A21259 /* bane */, - C1EA61391680FE1300A21259 /* buster-analyzer */, - C1EA61491680FE1300A21259 /* buster-cli */, - C1EA62521680FE1300A21259 /* ejs */, - C1EA62821680FE1300A21259 /* lodash */, - C1EA62BE1680FE1300A21259 /* platform */, - C1EA62C81680FE1300A21259 /* ramp */, - C1EA64211680FE1300A21259 /* stack-filter */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA610C1680FE1300A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA610D1680FE1300A21259 /* lodash */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA610E1680FE1300A21259 /* ansi-colorizer */ = { - isa = PBXGroup; - children = ( - C1EA610F1680FE1300A21259 /* .travis.yml */, - C1EA61101680FE1300A21259 /* AUTHORS */, - C1EA61111680FE1300A21259 /* autolint.js */, - C1EA61121680FE1300A21259 /* buster.js */, - C1EA61131680FE1300A21259 /* lib */, - C1EA61151680FE1300A21259 /* LICENSE */, - C1EA61161680FE1300A21259 /* package.json */, - C1EA61171680FE1300A21259 /* Readme.rst */, - C1EA61181680FE1300A21259 /* run-tests.js */, - C1EA61191680FE1300A21259 /* test */, - ); - path = "ansi-colorizer"; - sourceTree = ""; - }; - C1EA61131680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA61141680FE1300A21259 /* ansi-colorizer.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA61191680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA611A1680FE1300A21259 /* ansi-colorizer-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA611B1680FE1300A21259 /* ansi-grid */ = { - isa = PBXGroup; - children = ( - C1EA611C1680FE1300A21259 /* .travis.yml */, - C1EA611D1680FE1300A21259 /* AUTHORS */, - C1EA611E1680FE1300A21259 /* autolint.json */, - C1EA611F1680FE1300A21259 /* lib */, - C1EA61241680FE1300A21259 /* package.json */, - C1EA61251680FE1300A21259 /* Readme.md */, - C1EA61261680FE1300A21259 /* run-tests.js */, - C1EA61271680FE1300A21259 /* test */, - ); - path = "ansi-grid"; - sourceTree = ""; - }; - C1EA611F1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA61201680FE1300A21259 /* ansi-grid.js */, - C1EA61211680FE1300A21259 /* ansi.js */, - C1EA61221680FE1300A21259 /* matrix.js */, - C1EA61231680FE1300A21259 /* relative-grid.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA61271680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61281680FE1300A21259 /* ansi-test.js */, - C1EA61291680FE1300A21259 /* helper.js */, - C1EA612A1680FE1300A21259 /* matrix-test.js */, - C1EA612B1680FE1300A21259 /* relative-grid-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA612C1680FE1300A21259 /* bane */ = { - isa = PBXGroup; - children = ( - C1EA612D1680FE1300A21259 /* .npmignore */, - C1EA612E1680FE1300A21259 /* .travis.yml */, - C1EA612F1680FE1300A21259 /* AUTHORS */, - C1EA61301680FE1300A21259 /* autolint.js */, - C1EA61311680FE1300A21259 /* buster.js */, - C1EA61321680FE1300A21259 /* lib */, - C1EA61341680FE1300A21259 /* LICENSE */, - C1EA61351680FE1300A21259 /* package.json */, - C1EA61361680FE1300A21259 /* Readme.rst */, - C1EA61371680FE1300A21259 /* test */, - ); - path = bane; - sourceTree = ""; - }; - C1EA61321680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA61331680FE1300A21259 /* bane.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA61371680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61381680FE1300A21259 /* bane-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61391680FE1300A21259 /* buster-analyzer */ = { - isa = PBXGroup; - children = ( - C1EA613A1680FE1300A21259 /* .npmignore */, - C1EA613B1680FE1300A21259 /* .travis.yml */, - C1EA613C1680FE1300A21259 /* AUTHORS */, - C1EA613D1680FE1300A21259 /* autolint.js */, - C1EA613E1680FE1300A21259 /* buster.js */, - C1EA613F1680FE1300A21259 /* lib */, - C1EA61431680FE1300A21259 /* LICENSE */, - C1EA61441680FE1300A21259 /* package.json */, - C1EA61451680FE1300A21259 /* Readme.rst */, - C1EA61461680FE1300A21259 /* test */, - ); - path = "buster-analyzer"; - sourceTree = ""; - }; - C1EA613F1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA61401680FE1300A21259 /* analyzer.js */, - C1EA61411680FE1300A21259 /* buster-analyzer.js */, - C1EA61421680FE1300A21259 /* file-reporter.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA61461680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61471680FE1300A21259 /* analyzer-test.js */, - C1EA61481680FE1300A21259 /* file-reporter-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61491680FE1300A21259 /* buster-cli */ = { - isa = PBXGroup; - children = ( - C1EA614A1680FE1300A21259 /* .npmignore */, - C1EA614B1680FE1300A21259 /* .travis.yml */, - C1EA614C1680FE1300A21259 /* autolint.json */, - C1EA614D1680FE1300A21259 /* lib */, - C1EA61551680FE1300A21259 /* node_modules */, - C1EA624C1680FE1300A21259 /* package.json */, - C1EA624D1680FE1300A21259 /* Readme.md */, - C1EA624E1680FE1300A21259 /* run-tests */, - C1EA624F1680FE1300A21259 /* test */, - ); - path = "buster-cli"; - sourceTree = ""; - }; - C1EA614D1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA614E1680FE1300A21259 /* buster-cli */, - C1EA61531680FE1300A21259 /* buster-cli.js */, - C1EA61541680FE1300A21259 /* test-helper.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA614E1680FE1300A21259 /* buster-cli */ = { - isa = PBXGroup; - children = ( - C1EA614F1680FE1300A21259 /* args.js */, - C1EA61501680FE1300A21259 /* config.js */, - C1EA61511680FE1300A21259 /* help.js */, - C1EA61521680FE1300A21259 /* logger.js */, - ); - path = "buster-cli"; - sourceTree = ""; - }; - C1EA61551680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA61561680FE1300A21259 /* buster-configuration */, - C1EA61EC1680FE1300A21259 /* buster-terminal */, - C1EA61FC1680FE1300A21259 /* minimatch */, - C1EA621A1680FE1300A21259 /* posix-argv-parser */, - C1EA62331680FE1300A21259 /* rimraf */, - C1EA62401680FE1300A21259 /* stream-logger */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA61561680FE1300A21259 /* buster-configuration */ = { - isa = PBXGroup; - children = ( - C1EA61571680FE1300A21259 /* .travis.yml */, - C1EA61581680FE1300A21259 /* autolint.json */, - C1EA61591680FE1300A21259 /* buster.js */, - C1EA615A1680FE1300A21259 /* lib */, - C1EA615F1680FE1300A21259 /* node_modules */, - C1EA61DC1680FE1300A21259 /* package.json */, - C1EA61DD1680FE1300A21259 /* Readme.md */, - C1EA61DE1680FE1300A21259 /* test */, - C1EA61EB1680FE1300A21259 /* todo.org */, - ); - path = "buster-configuration"; - sourceTree = ""; - }; - C1EA615A1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA615B1680FE1300A21259 /* buster-configuration.js */, - C1EA615C1680FE1300A21259 /* file-loader.js */, - C1EA615D1680FE1300A21259 /* group.js */, - C1EA615E1680FE1300A21259 /* util.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA615F1680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA61601680FE1300A21259 /* glob */, - C1EA61801680FE1300A21259 /* ramp-resources */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA61601680FE1300A21259 /* glob */ = { - isa = PBXGroup; - children = ( - C1EA61611680FE1300A21259 /* .npmignore */, - C1EA61621680FE1300A21259 /* .travis.yml */, - C1EA61631680FE1300A21259 /* examples */, - C1EA61661680FE1300A21259 /* glob.js */, - C1EA61671680FE1300A21259 /* LICENSE */, - C1EA61681680FE1300A21259 /* node_modules */, - C1EA61751680FE1300A21259 /* package.json */, - C1EA61761680FE1300A21259 /* README.md */, - C1EA61771680FE1300A21259 /* test */, - ); - path = glob; - sourceTree = ""; - }; - C1EA61631680FE1300A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA61641680FE1300A21259 /* g.js */, - C1EA61651680FE1300A21259 /* usr-local.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA61681680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA61691680FE1300A21259 /* graceful-fs */, - C1EA61711680FE1300A21259 /* inherits */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA61691680FE1300A21259 /* graceful-fs */ = { - isa = PBXGroup; - children = ( - C1EA616A1680FE1300A21259 /* .npmignore */, - C1EA616B1680FE1300A21259 /* graceful-fs.js */, - C1EA616C1680FE1300A21259 /* LICENSE */, - C1EA616D1680FE1300A21259 /* package.json */, - C1EA616E1680FE1300A21259 /* README.md */, - C1EA616F1680FE1300A21259 /* test */, - ); - path = "graceful-fs"; - sourceTree = ""; - }; - C1EA616F1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61701680FE1300A21259 /* open.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61711680FE1300A21259 /* inherits */ = { - isa = PBXGroup; - children = ( - C1EA61721680FE1300A21259 /* inherits.js */, - C1EA61731680FE1300A21259 /* package.json */, - C1EA61741680FE1300A21259 /* README.md */, - ); - path = inherits; - sourceTree = ""; - }; - C1EA61771680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61781680FE1300A21259 /* 00-setup.js */, - C1EA61791680FE1300A21259 /* bash-comparison.js */, - C1EA617A1680FE1300A21259 /* cwd-test.js */, - C1EA617B1680FE1300A21259 /* mark.js */, - C1EA617C1680FE1300A21259 /* pause-resume.js */, - C1EA617D1680FE1300A21259 /* root-nomount.js */, - C1EA617E1680FE1300A21259 /* root.js */, - C1EA617F1680FE1300A21259 /* zz-cleanup.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61801680FE1300A21259 /* ramp-resources */ = { - isa = PBXGroup; - children = ( - C1EA61811680FE1300A21259 /* .npmignore */, - C1EA61821680FE1300A21259 /* .travis.yml */, - C1EA61831680FE1300A21259 /* autolint.js */, - C1EA61841680FE1300A21259 /* buster.js */, - C1EA61851680FE1300A21259 /* examples */, - C1EA61911680FE1300A21259 /* lib */, - C1EA619F1680FE1300A21259 /* node_modules */, - C1EA61C81680FE1300A21259 /* package.json */, - C1EA61C91680FE1300A21259 /* Readme.md */, - C1EA61CA1680FE1300A21259 /* test */, - ); - path = "ramp-resources"; - sourceTree = ""; - }; - C1EA61851680FE1300A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA61861680FE1300A21259 /* webserver */, - ); - path = examples; - sourceTree = ""; - }; - C1EA61861680FE1300A21259 /* webserver */ = { - isa = PBXGroup; - children = ( - C1EA61871680FE1300A21259 /* fixtures */, - C1EA618C1680FE1300A21259 /* medium.json */, - C1EA618D1680FE1300A21259 /* publish.js */, - C1EA618E1680FE1300A21259 /* README.md */, - C1EA618F1680FE1300A21259 /* server.js */, - C1EA61901680FE1300A21259 /* small.json */, - ); - path = webserver; - sourceTree = ""; - }; - C1EA61871680FE1300A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA61881680FE1300A21259 /* 1.png */, - C1EA61891680FE1300A21259 /* 2.html */, - C1EA618A1680FE1300A21259 /* 3.txt */, - C1EA618B1680FE1300A21259 /* 4.tgz */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA61911680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA61921680FE1300A21259 /* file-etag.js */, - C1EA61931680FE1300A21259 /* http-proxy.js */, - C1EA61941680FE1300A21259 /* invalid-error.js */, - C1EA61951680FE1300A21259 /* load-path.js */, - C1EA61961680FE1300A21259 /* processors */, - C1EA61981680FE1300A21259 /* ramp-resources.js */, - C1EA61991680FE1300A21259 /* resource-combiner.js */, - C1EA619A1680FE1300A21259 /* resource-file-resolver.js */, - C1EA619B1680FE1300A21259 /* resource-middleware.js */, - C1EA619C1680FE1300A21259 /* resource-set-cache.js */, - C1EA619D1680FE1300A21259 /* resource-set.js */, - C1EA619E1680FE1300A21259 /* resource.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA61961680FE1300A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA61971680FE1300A21259 /* iife.js */, - ); - path = processors; - sourceTree = ""; - }; - C1EA619F1680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA61A01680FE1300A21259 /* buster-glob */, - C1EA61AB1680FE1300A21259 /* mime */, - C1EA61B41680FE1300A21259 /* minimatch */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA61A01680FE1300A21259 /* buster-glob */ = { - isa = PBXGroup; - children = ( - C1EA61A11680FE1300A21259 /* .npmignore */, - C1EA61A21680FE1300A21259 /* .travis.yml */, - C1EA61A31680FE1300A21259 /* autolint.json */, - C1EA61A41680FE1300A21259 /* buster.js */, - C1EA61A51680FE1300A21259 /* lib */, - C1EA61A71680FE1300A21259 /* package.json */, - C1EA61A81680FE1300A21259 /* Readme.md */, - C1EA61A91680FE1300A21259 /* test */, - ); - path = "buster-glob"; - sourceTree = ""; - }; - C1EA61A51680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA61A61680FE1300A21259 /* buster-glob.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA61A91680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61AA1680FE1300A21259 /* buster-glob-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61AB1680FE1300A21259 /* mime */ = { - isa = PBXGroup; - children = ( - C1EA61AC1680FE1300A21259 /* LICENSE */, - C1EA61AD1680FE1300A21259 /* mime.js */, - C1EA61AE1680FE1300A21259 /* package.json */, - C1EA61AF1680FE1300A21259 /* README.md */, - C1EA61B01680FE1300A21259 /* test.js */, - C1EA61B11680FE1300A21259 /* types */, - ); - path = mime; - sourceTree = ""; - }; - C1EA61B11680FE1300A21259 /* types */ = { - isa = PBXGroup; - children = ( - C1EA61B21680FE1300A21259 /* mime.types */, - C1EA61B31680FE1300A21259 /* node.types */, - ); - path = types; - sourceTree = ""; - }; - C1EA61B41680FE1300A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA61B51680FE1300A21259 /* .travis.yml */, - C1EA61B61680FE1300A21259 /* LICENSE */, - C1EA61B71680FE1300A21259 /* minimatch.js */, - C1EA61B81680FE1300A21259 /* node_modules */, - C1EA61C21680FE1300A21259 /* package.json */, - C1EA61C31680FE1300A21259 /* README.md */, - C1EA61C41680FE1300A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA61B81680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA61B91680FE1300A21259 /* lru-cache */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA61B91680FE1300A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA61BA1680FE1300A21259 /* .npmignore */, - C1EA61BB1680FE1300A21259 /* lib */, - C1EA61BD1680FE1300A21259 /* LICENSE */, - C1EA61BE1680FE1300A21259 /* package.json */, - C1EA61BF1680FE1300A21259 /* README.md */, - C1EA61C01680FE1300A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA61BB1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA61BC1680FE1300A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA61C01680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61C11680FE1300A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61C41680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61C51680FE1300A21259 /* basic.js */, - C1EA61C61680FE1300A21259 /* brace-expand.js */, - C1EA61C71680FE1300A21259 /* caching.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61CA1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61CB1680FE1300A21259 /* fixtures */, - C1EA61D31680FE1300A21259 /* http-proxy-test.js */, - C1EA61D41680FE1300A21259 /* load-path-test.js */, - C1EA61D51680FE1300A21259 /* processors */, - C1EA61D71680FE1300A21259 /* resource-middleware-test.js */, - C1EA61D81680FE1300A21259 /* resource-set-cache-test.js */, - C1EA61D91680FE1300A21259 /* resource-set-test.js */, - C1EA61DA1680FE1300A21259 /* resource-test.js */, - C1EA61DB1680FE1300A21259 /* test-helper.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61CB1680FE1300A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA61CC1680FE1300A21259 /* bar.js */, - C1EA61CD1680FE1300A21259 /* foo.js */, - C1EA61CE1680FE1300A21259 /* other-test */, - C1EA61D11680FE1300A21259 /* test */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA61CE1680FE1300A21259 /* other-test */ = { - isa = PBXGroup; - children = ( - C1EA61CF1680FE1300A21259 /* other.js */, - C1EA61D01680FE1300A21259 /* some-test.js */, - ); - path = "other-test"; - sourceTree = ""; - }; - C1EA61D11680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61D21680FE1300A21259 /* my-testish.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61D51680FE1300A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA61D61680FE1300A21259 /* iife-processor-test.js */, - ); - path = processors; - sourceTree = ""; - }; - C1EA61DE1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61DF1680FE1300A21259 /* buster-configuration-test.js */, - C1EA61E01680FE1300A21259 /* file-loader-test.js */, - C1EA61E11680FE1300A21259 /* fixtures */, - C1EA61E91680FE1300A21259 /* group-test.js */, - C1EA61EA1680FE1300A21259 /* test-helper.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61E11680FE1300A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA61E21680FE1300A21259 /* bar.js */, - C1EA61E31680FE1300A21259 /* dups */, - C1EA61E61680FE1300A21259 /* foo.js */, - C1EA61E71680FE1300A21259 /* test */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA61E31680FE1300A21259 /* dups */ = { - isa = PBXGroup; - children = ( - C1EA61E41680FE1300A21259 /* file */, - C1EA61E51680FE1300A21259 /* file.js */, - ); - path = dups; - sourceTree = ""; - }; - C1EA61E71680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61E81680FE1300A21259 /* my-testish.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61EC1680FE1300A21259 /* buster-terminal */ = { - isa = PBXGroup; - children = ( - C1EA61ED1680FE1300A21259 /* .travis.yml */, - C1EA61EE1680FE1300A21259 /* AUTHORS */, - C1EA61EF1680FE1300A21259 /* autolint.json */, - C1EA61F01680FE1300A21259 /* buster.js */, - C1EA61F11680FE1300A21259 /* lib */, - C1EA61F51680FE1300A21259 /* package.json */, - C1EA61F61680FE1300A21259 /* Readme.md */, - C1EA61F71680FE1300A21259 /* test */, - ); - path = "buster-terminal"; - sourceTree = ""; - }; - C1EA61F11680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA61F21680FE1300A21259 /* buster-terminal.js */, - C1EA61F31680FE1300A21259 /* matrix.js */, - C1EA61F41680FE1300A21259 /* relative-grid.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA61F71680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA61F81680FE1300A21259 /* buster-terminal-test.js */, - C1EA61F91680FE1300A21259 /* helper.js */, - C1EA61FA1680FE1300A21259 /* matrix-test.js */, - C1EA61FB1680FE1300A21259 /* relative-grid-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA61FC1680FE1300A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA61FD1680FE1300A21259 /* .travis.yml */, - C1EA61FE1680FE1300A21259 /* LICENSE */, - C1EA61FF1680FE1300A21259 /* minimatch.js */, - C1EA62001680FE1300A21259 /* node_modules */, - C1EA62131680FE1300A21259 /* package.json */, - C1EA62141680FE1300A21259 /* README.md */, - C1EA62151680FE1300A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA62001680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA62011680FE1300A21259 /* lru-cache */, - C1EA620B1680FE1300A21259 /* sigmund */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA62011680FE1300A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA62021680FE1300A21259 /* .npmignore */, - C1EA62031680FE1300A21259 /* AUTHORS */, - C1EA62041680FE1300A21259 /* lib */, - C1EA62061680FE1300A21259 /* LICENSE */, - C1EA62071680FE1300A21259 /* package.json */, - C1EA62081680FE1300A21259 /* README.md */, - C1EA62091680FE1300A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA62041680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA62051680FE1300A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA62091680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA620A1680FE1300A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA620B1680FE1300A21259 /* sigmund */ = { - isa = PBXGroup; - children = ( - C1EA620C1680FE1300A21259 /* bench.js */, - C1EA620D1680FE1300A21259 /* LICENSE */, - C1EA620E1680FE1300A21259 /* package.json */, - C1EA620F1680FE1300A21259 /* README.md */, - C1EA62101680FE1300A21259 /* sigmund.js */, - C1EA62111680FE1300A21259 /* test */, - ); - path = sigmund; - sourceTree = ""; - }; - C1EA62111680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA62121680FE1300A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA62151680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA62161680FE1300A21259 /* basic.js */, - C1EA62171680FE1300A21259 /* brace-expand.js */, - C1EA62181680FE1300A21259 /* caching.js */, - C1EA62191680FE1300A21259 /* defaults.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA621A1680FE1300A21259 /* posix-argv-parser */ = { - isa = PBXGroup; - children = ( - C1EA621B1680FE1300A21259 /* .npmignore */, - C1EA621C1680FE1300A21259 /* .travis.yml */, - C1EA621D1680FE1300A21259 /* autolint.js */, - C1EA621E1680FE1300A21259 /* buster.js */, - C1EA621F1680FE1300A21259 /* lib */, - C1EA62281680FE1300A21259 /* LICENSE */, - C1EA62291680FE1300A21259 /* package.json */, - C1EA622A1680FE1300A21259 /* Readme.md */, - C1EA622B1680FE1300A21259 /* test */, - ); - path = "posix-argv-parser"; - sourceTree = ""; - }; - C1EA621F1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA62201680FE1300A21259 /* argument.js */, - C1EA62211680FE1300A21259 /* operand.js */, - C1EA62221680FE1300A21259 /* option.js */, - C1EA62231680FE1300A21259 /* parser.js */, - C1EA62241680FE1300A21259 /* posix-argv-parser.js */, - C1EA62251680FE1300A21259 /* shorthand.js */, - C1EA62261680FE1300A21259 /* types.js */, - C1EA62271680FE1300A21259 /* validators.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA622B1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA622C1680FE1300A21259 /* operand-test.js */, - C1EA622D1680FE1300A21259 /* option-test.js */, - C1EA622E1680FE1300A21259 /* parser-test.js */, - C1EA622F1680FE1300A21259 /* posix-argv-parser-test.js */, - C1EA62301680FE1300A21259 /* shorthand-test.js */, - C1EA62311680FE1300A21259 /* types-test.js */, - C1EA62321680FE1300A21259 /* validators-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA62331680FE1300A21259 /* rimraf */ = { - isa = PBXGroup; - children = ( - C1EA62341680FE1300A21259 /* AUTHORS */, - C1EA62351680FE1300A21259 /* fiber.js */, - C1EA62361680FE1300A21259 /* LICENSE */, - C1EA62371680FE1300A21259 /* package.json */, - C1EA62381680FE1300A21259 /* README.md */, - C1EA62391680FE1300A21259 /* rimraf.js */, - C1EA623A1680FE1300A21259 /* test */, - ); - path = rimraf; - sourceTree = ""; - }; - C1EA623A1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA623B1680FE1300A21259 /* run.sh */, - C1EA623C1680FE1300A21259 /* setup.sh */, - C1EA623D1680FE1300A21259 /* test-async.js */, - C1EA623E1680FE1300A21259 /* test-fiber.js */, - C1EA623F1680FE1300A21259 /* test-sync.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA62401680FE1300A21259 /* stream-logger */ = { - isa = PBXGroup; - children = ( - C1EA62411680FE1300A21259 /* .npmignore */, - C1EA62421680FE1300A21259 /* .travis.yml */, - C1EA62431680FE1300A21259 /* autolint.json */, - C1EA62441680FE1300A21259 /* buster.js */, - C1EA62451680FE1300A21259 /* lib */, - C1EA62471680FE1300A21259 /* LICENSE */, - C1EA62481680FE1300A21259 /* package.json */, - C1EA62491680FE1300A21259 /* Readme.md */, - C1EA624A1680FE1300A21259 /* test */, - ); - path = "stream-logger"; - sourceTree = ""; - }; - C1EA62451680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA62461680FE1300A21259 /* stream-logger.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA624A1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA624B1680FE1300A21259 /* stream-logger-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA624F1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA62501680FE1300A21259 /* buster-cli-test.js */, - C1EA62511680FE1300A21259 /* buster.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA62521680FE1300A21259 /* ejs */ = { - isa = PBXGroup; - children = ( - C1EA62531680FE1300A21259 /* .gitmodules */, - C1EA62541680FE1300A21259 /* .npmignore */, - C1EA62551680FE1300A21259 /* benchmark.js */, - C1EA62561680FE1300A21259 /* ejs.js */, - C1EA62571680FE1300A21259 /* ejs.min.js */, - C1EA62581680FE1300A21259 /* examples */, - C1EA625C1680FE1300A21259 /* History.md */, - C1EA625D1680FE1300A21259 /* index.js */, - C1EA625E1680FE1300A21259 /* lib */, - C1EA62621680FE1300A21259 /* Makefile */, - C1EA62631680FE1300A21259 /* package.json */, - C1EA62641680FE1300A21259 /* Readme.md */, - C1EA62651680FE1300A21259 /* support */, - C1EA62801680FE1300A21259 /* test */, - ); - path = ejs; - sourceTree = ""; - }; - C1EA62581680FE1300A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA62591680FE1300A21259 /* client.html */, - C1EA625A1680FE1300A21259 /* list.ejs */, - C1EA625B1680FE1300A21259 /* list.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA625E1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA625F1680FE1300A21259 /* ejs.js */, - C1EA62601680FE1300A21259 /* filters.js */, - C1EA62611680FE1300A21259 /* utils.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA62651680FE1300A21259 /* support */ = { - isa = PBXGroup; - children = ( - C1EA62661680FE1300A21259 /* compile.js */, - C1EA62671680FE1300A21259 /* expresso */, - ); - path = support; - sourceTree = ""; - }; - C1EA62671680FE1300A21259 /* expresso */ = { - isa = PBXGroup; - children = ( - C1EA62681680FE1300A21259 /* .gitmodules */, - C1EA62691680FE1300A21259 /* .npmignore */, - C1EA626A1680FE1300A21259 /* bin */, - C1EA626C1680FE1300A21259 /* docs */, - C1EA62731680FE1300A21259 /* History.md */, - C1EA62741680FE1300A21259 /* lib */, - C1EA62771680FE1300A21259 /* Makefile */, - C1EA62781680FE1300A21259 /* package.json */, - C1EA62791680FE1300A21259 /* Readme.md */, - C1EA627A1680FE1300A21259 /* test */, - ); - path = expresso; - sourceTree = ""; - }; - C1EA626A1680FE1300A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA626B1680FE1300A21259 /* expresso */, - ); - path = bin; - sourceTree = ""; - }; - C1EA626C1680FE1300A21259 /* docs */ = { - isa = PBXGroup; - children = ( - C1EA626D1680FE1300A21259 /* api.html */, - C1EA626E1680FE1300A21259 /* index.html */, - C1EA626F1680FE1300A21259 /* index.md */, - C1EA62701680FE1300A21259 /* layout */, - ); - path = docs; - sourceTree = ""; - }; - C1EA62701680FE1300A21259 /* layout */ = { - isa = PBXGroup; - children = ( - C1EA62711680FE1300A21259 /* foot.html */, - C1EA62721680FE1300A21259 /* head.html */, - ); - path = layout; - sourceTree = ""; - }; - C1EA62741680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA62751680FE1300A21259 /* bar.js */, - C1EA62761680FE1300A21259 /* foo.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA627A1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA627B1680FE1300A21259 /* assert.test.js */, - C1EA627C1680FE1300A21259 /* async.test.js */, - C1EA627D1680FE1300A21259 /* bar.test.js */, - C1EA627E1680FE1300A21259 /* foo.test.js */, - C1EA627F1680FE1300A21259 /* http.test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA62801680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA62811680FE1300A21259 /* ejs.test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA62821680FE1300A21259 /* lodash */ = { - isa = PBXGroup; - children = ( - C1EA62831680FE1300A21259 /* build */, - C1EA62871680FE1300A21259 /* build.js */, - C1EA62881680FE1300A21259 /* doc */, - C1EA628A1680FE1300A21259 /* index.js */, - C1EA628B1680FE1300A21259 /* LICENSE.txt */, - C1EA628C1680FE1300A21259 /* lodash.js */, - C1EA628D1680FE1300A21259 /* lodash.min.js */, - C1EA628E1680FE1300A21259 /* lodash.underscore.min.js */, - C1EA628F1680FE1300A21259 /* package.json */, - C1EA62901680FE1300A21259 /* perf */, - C1EA62921680FE1300A21259 /* README.md */, - C1EA62931680FE1300A21259 /* test */, - C1EA629A1680FE1300A21259 /* vendor */, - ); - path = lodash; - sourceTree = ""; - }; - C1EA62831680FE1300A21259 /* build */ = { - isa = PBXGroup; - children = ( - C1EA62841680FE1300A21259 /* minify.js */, - C1EA62851680FE1300A21259 /* post-compile.js */, - C1EA62861680FE1300A21259 /* pre-compile.js */, - ); - path = build; - sourceTree = ""; - }; - C1EA62881680FE1300A21259 /* doc */ = { - isa = PBXGroup; - children = ( - C1EA62891680FE1300A21259 /* README.md */, - ); - path = doc; - sourceTree = ""; - }; - C1EA62901680FE1300A21259 /* perf */ = { - isa = PBXGroup; - children = ( - C1EA62911680FE1300A21259 /* perf.js */, - ); - path = perf; - sourceTree = ""; - }; - C1EA62931680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA62941680FE1300A21259 /* template */, - C1EA62981680FE1300A21259 /* test-build.js */, - C1EA62991680FE1300A21259 /* test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA62941680FE1300A21259 /* template */ = { - isa = PBXGroup; - children = ( - C1EA62951680FE1300A21259 /* a.jst */, - C1EA62961680FE1300A21259 /* b.jst */, - C1EA62971680FE1300A21259 /* c.tpl */, - ); - path = template; - sourceTree = ""; - }; - C1EA629A1680FE1300A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA629B1680FE1300A21259 /* benchmark.js */, - C1EA62A01680FE1300A21259 /* closure-compiler */, - C1EA62A41680FE1300A21259 /* platform.js */, - C1EA62A81680FE1300A21259 /* qunit */, - C1EA62AD1680FE1300A21259 /* qunit-clib */, - C1EA62B11680FE1300A21259 /* uglifyjs */, - C1EA62B91680FE1300A21259 /* underscore */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA629B1680FE1300A21259 /* benchmark.js */ = { - isa = PBXGroup; - children = ( - C1EA629C1680FE1300A21259 /* benchmark.js */, - C1EA629D1680FE1300A21259 /* LICENSE.txt */, - C1EA629E1680FE1300A21259 /* nano.jar */, - C1EA629F1680FE1300A21259 /* README.md */, - ); - path = benchmark.js; - sourceTree = ""; - }; - C1EA62A01680FE1300A21259 /* closure-compiler */ = { - isa = PBXGroup; - children = ( - C1EA62A11680FE1300A21259 /* compiler.jar */, - C1EA62A21680FE1300A21259 /* COPYING */, - C1EA62A31680FE1300A21259 /* README */, - ); - path = "closure-compiler"; - sourceTree = ""; - }; - C1EA62A41680FE1300A21259 /* platform.js */ = { - isa = PBXGroup; - children = ( - C1EA62A51680FE1300A21259 /* LICENSE.txt */, - C1EA62A61680FE1300A21259 /* platform.js */, - C1EA62A71680FE1300A21259 /* README.md */, - ); - path = platform.js; - sourceTree = ""; - }; - C1EA62A81680FE1300A21259 /* qunit */ = { - isa = PBXGroup; - children = ( - C1EA62A91680FE1300A21259 /* qunit */, - C1EA62AC1680FE1300A21259 /* README.md */, - ); - path = qunit; - sourceTree = ""; - }; - C1EA62A91680FE1300A21259 /* qunit */ = { - isa = PBXGroup; - children = ( - C1EA62AA1680FE1300A21259 /* qunit-1.8.0.js */, - C1EA62AB1680FE1300A21259 /* qunit.js */, - ); - path = qunit; - sourceTree = ""; - }; - C1EA62AD1680FE1300A21259 /* qunit-clib */ = { - isa = PBXGroup; - children = ( - C1EA62AE1680FE1300A21259 /* LICENSE.txt */, - C1EA62AF1680FE1300A21259 /* qunit-clib.js */, - C1EA62B01680FE1300A21259 /* README.md */, - ); - path = "qunit-clib"; - sourceTree = ""; - }; - C1EA62B11680FE1300A21259 /* uglifyjs */ = { - isa = PBXGroup; - children = ( - C1EA62B21680FE1300A21259 /* lib */, - C1EA62B71680FE1300A21259 /* README.org */, - C1EA62B81680FE1300A21259 /* uglify-js.js */, - ); - path = uglifyjs; - sourceTree = ""; - }; - C1EA62B21680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA62B31680FE1300A21259 /* consolidator.js */, - C1EA62B41680FE1300A21259 /* parse-js.js */, - C1EA62B51680FE1300A21259 /* process.js */, - C1EA62B61680FE1300A21259 /* squeeze-more.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA62B91680FE1300A21259 /* underscore */ = { - isa = PBXGroup; - children = ( - C1EA62BA1680FE1300A21259 /* LICENSE */, - C1EA62BB1680FE1300A21259 /* README.md */, - C1EA62BC1680FE1300A21259 /* underscore-min.js */, - C1EA62BD1680FE1300A21259 /* underscore.js */, - ); - path = underscore; - sourceTree = ""; - }; - C1EA62BE1680FE1300A21259 /* platform */ = { - isa = PBXGroup; - children = ( - C1EA62BF1680FE1300A21259 /* doc */, - C1EA62C11680FE1300A21259 /* LICENSE.txt */, - C1EA62C21680FE1300A21259 /* package.json */, - C1EA62C31680FE1300A21259 /* platform.js */, - C1EA62C41680FE1300A21259 /* README.md */, - C1EA62C51680FE1300A21259 /* test */, - ); - path = platform; - sourceTree = ""; - }; - C1EA62BF1680FE1300A21259 /* doc */ = { - isa = PBXGroup; - children = ( - C1EA62C01680FE1300A21259 /* README.md */, - ); - path = doc; - sourceTree = ""; - }; - C1EA62C51680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA62C61680FE1300A21259 /* run-test.sh */, - C1EA62C71680FE1300A21259 /* test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA62C81680FE1300A21259 /* ramp */ = { - isa = PBXGroup; - children = ( - C1EA62C91680FE1300A21259 /* .travis.yml */, - C1EA62CA1680FE1300A21259 /* autolint.js */, - C1EA62CB1680FE1300A21259 /* lib */, - C1EA62DD1680FE1300A21259 /* node_modules */, - C1EA64081680FE1300A21259 /* package.json */, - C1EA64091680FE1300A21259 /* Readme.md */, - C1EA640A1680FE1300A21259 /* run-tests.js */, - C1EA640B1680FE1300A21259 /* test */, - C1EA64191680FE1300A21259 /* vendor */, - ); - path = ramp; - sourceTree = ""; - }; - C1EA62CB1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA62CC1680FE1300A21259 /* http-server-request-listener-proxy.js */, - C1EA62CD1680FE1300A21259 /* prison-init.js */, - C1EA62CE1680FE1300A21259 /* prison-session-initializer.js */, - C1EA62CF1680FE1300A21259 /* prison-util.js */, - C1EA62D01680FE1300A21259 /* prison.js */, - C1EA62D11680FE1300A21259 /* pubsub-client.js */, - C1EA62D21680FE1300A21259 /* pubsub-server.js */, - C1EA62D31680FE1300A21259 /* ramp.js */, - C1EA62D41680FE1300A21259 /* server-client.js */, - C1EA62D51680FE1300A21259 /* server.js */, - C1EA62D61680FE1300A21259 /* session-client.js */, - C1EA62D71680FE1300A21259 /* session-queue.js */, - C1EA62D81680FE1300A21259 /* session.js */, - C1EA62D91680FE1300A21259 /* slave.js */, - C1EA62DA1680FE1300A21259 /* templates */, - C1EA62DC1680FE1300A21259 /* test-helper.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA62DA1680FE1300A21259 /* templates */ = { - isa = PBXGroup; - children = ( - C1EA62DB1680FE1300A21259 /* slave_prison.html */, - ); - path = templates; - sourceTree = ""; - }; - C1EA62DD1680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA62DE1680FE1300A21259 /* bane */, - C1EA62EB1680FE1300A21259 /* faye */, - C1EA63211680FE1300A21259 /* node-uuid */, - C1EA63311680FE1300A21259 /* ramp-resources */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA62DE1680FE1300A21259 /* bane */ = { - isa = PBXGroup; - children = ( - C1EA62DF1680FE1300A21259 /* .npmignore */, - C1EA62E01680FE1300A21259 /* AUTHORS */, - C1EA62E11680FE1300A21259 /* autolint.js */, - C1EA62E21680FE1300A21259 /* buster.js */, - C1EA62E31680FE1300A21259 /* lib */, - C1EA62E51680FE1300A21259 /* LICENSE */, - C1EA62E61680FE1300A21259 /* package.json */, - C1EA62E71680FE1300A21259 /* Readme.rst */, - C1EA62E81680FE1300A21259 /* test */, - C1EA62EA1680FE1300A21259 /* todo.org */, - ); - path = bane; - sourceTree = ""; - }; - C1EA62E31680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA62E41680FE1300A21259 /* bane.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA62E81680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA62E91680FE1300A21259 /* bane-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA62EB1680FE1300A21259 /* faye */ = { - isa = PBXGroup; - children = ( - C1EA62EC1680FE1300A21259 /* browser */, - C1EA62F01680FE1300A21259 /* History.txt */, - C1EA62F11680FE1300A21259 /* node */, - C1EA62F31680FE1300A21259 /* node_modules */, - C1EA631F1680FE1300A21259 /* package.json */, - C1EA63201680FE1300A21259 /* README.txt */, - ); - path = faye; - sourceTree = ""; - }; - C1EA62EC1680FE1300A21259 /* browser */ = { - isa = PBXGroup; - children = ( - C1EA62ED1680FE1300A21259 /* faye-browser-min.js */, - C1EA62EE1680FE1300A21259 /* faye-browser-min.js.map */, - C1EA62EF1680FE1300A21259 /* faye-browser.js */, - ); - path = browser; - sourceTree = ""; - }; - C1EA62F11680FE1300A21259 /* node */ = { - isa = PBXGroup; - children = ( - C1EA62F21680FE1300A21259 /* faye-node.js */, - ); - path = node; - sourceTree = ""; - }; - C1EA62F31680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA62F41680FE1300A21259 /* cookiejar */, - C1EA62FA1680FE1300A21259 /* faye-websocket */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA62F41680FE1300A21259 /* cookiejar */ = { - isa = PBXGroup; - children = ( - C1EA62F51680FE1300A21259 /* cookiejar.js */, - C1EA62F61680FE1300A21259 /* package.json */, - C1EA62F71680FE1300A21259 /* readme.md */, - C1EA62F81680FE1300A21259 /* tests */, - ); - path = cookiejar; - sourceTree = ""; - }; - C1EA62F81680FE1300A21259 /* tests */ = { - isa = PBXGroup; - children = ( - C1EA62F91680FE1300A21259 /* test.js */, - ); - path = tests; - sourceTree = ""; - }; - C1EA62FA1680FE1300A21259 /* faye-websocket */ = { - isa = PBXGroup; - children = ( - C1EA62FB1680FE1300A21259 /* CHANGELOG.txt */, - C1EA62FC1680FE1300A21259 /* examples */, - C1EA63031680FE1300A21259 /* lib */, - C1EA63131680FE1300A21259 /* package.json */, - C1EA63141680FE1300A21259 /* README.markdown */, - C1EA63151680FE1300A21259 /* spec */, - ); - path = "faye-websocket"; - sourceTree = ""; - }; - C1EA62FC1680FE1300A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA62FD1680FE1300A21259 /* autobahn_client.js */, - C1EA62FE1680FE1300A21259 /* client.js */, - C1EA62FF1680FE1300A21259 /* haproxy.conf */, - C1EA63001680FE1300A21259 /* server.js */, - C1EA63011680FE1300A21259 /* sse.html */, - C1EA63021680FE1300A21259 /* ws.html */, - ); - path = examples; - sourceTree = ""; - }; - C1EA63031680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA63041680FE1300A21259 /* faye */, - ); - path = lib; - sourceTree = ""; - }; - C1EA63041680FE1300A21259 /* faye */ = { - isa = PBXGroup; - children = ( - C1EA63051680FE1300A21259 /* eventsource.js */, - C1EA63061680FE1300A21259 /* websocket */, - C1EA63121680FE1300A21259 /* websocket.js */, - ); - path = faye; - sourceTree = ""; - }; - C1EA63061680FE1300A21259 /* websocket */ = { - isa = PBXGroup; - children = ( - C1EA63071680FE1300A21259 /* api */, - C1EA630A1680FE1300A21259 /* api.js */, - C1EA630B1680FE1300A21259 /* client.js */, - C1EA630C1680FE1300A21259 /* draft75_parser.js */, - C1EA630D1680FE1300A21259 /* draft76_parser.js */, - C1EA630E1680FE1300A21259 /* hybi_parser */, - C1EA63111680FE1300A21259 /* hybi_parser.js */, - ); - path = websocket; - sourceTree = ""; - }; - C1EA63071680FE1300A21259 /* api */ = { - isa = PBXGroup; - children = ( - C1EA63081680FE1300A21259 /* event.js */, - C1EA63091680FE1300A21259 /* event_target.js */, - ); - path = api; - sourceTree = ""; - }; - C1EA630E1680FE1300A21259 /* hybi_parser */ = { - isa = PBXGroup; - children = ( - C1EA630F1680FE1300A21259 /* handshake.js */, - C1EA63101680FE1300A21259 /* stream_reader.js */, - ); - path = hybi_parser; - sourceTree = ""; - }; - C1EA63151680FE1300A21259 /* spec */ = { - isa = PBXGroup; - children = ( - C1EA63161680FE1300A21259 /* faye */, - C1EA631C1680FE1300A21259 /* runner.js */, - C1EA631D1680FE1300A21259 /* server.crt */, - C1EA631E1680FE1300A21259 /* server.key */, - ); - path = spec; - sourceTree = ""; - }; - C1EA63161680FE1300A21259 /* faye */ = { - isa = PBXGroup; - children = ( - C1EA63171680FE1300A21259 /* websocket */, - ); - path = faye; - sourceTree = ""; - }; - C1EA63171680FE1300A21259 /* websocket */ = { - isa = PBXGroup; - children = ( - C1EA63181680FE1300A21259 /* client_spec.js */, - C1EA63191680FE1300A21259 /* draft75parser_spec.js */, - C1EA631A1680FE1300A21259 /* draft76parser_spec.js */, - C1EA631B1680FE1300A21259 /* hybi_parser_spec.js */, - ); - path = websocket; - sourceTree = ""; - }; - C1EA63211680FE1300A21259 /* node-uuid */ = { - isa = PBXGroup; - children = ( - C1EA63221680FE1300A21259 /* .npmignore */, - C1EA63231680FE1300A21259 /* benchmark */, - C1EA63291680FE1300A21259 /* LICENSE.md */, - C1EA632A1680FE1300A21259 /* package.json */, - C1EA632B1680FE1300A21259 /* README.md */, - C1EA632C1680FE1300A21259 /* test */, - C1EA63301680FE1300A21259 /* uuid.js */, - ); - path = "node-uuid"; - sourceTree = ""; - }; - C1EA63231680FE1300A21259 /* benchmark */ = { - isa = PBXGroup; - children = ( - C1EA63241680FE1300A21259 /* bench.gnu */, - C1EA63251680FE1300A21259 /* bench.sh */, - C1EA63261680FE1300A21259 /* benchmark-native.c */, - C1EA63271680FE1300A21259 /* benchmark.js */, - C1EA63281680FE1300A21259 /* README.md */, - ); - path = benchmark; - sourceTree = ""; - }; - C1EA632C1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA632D1680FE1300A21259 /* compare_v1.js */, - C1EA632E1680FE1300A21259 /* test.html */, - C1EA632F1680FE1300A21259 /* test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63311680FE1300A21259 /* ramp-resources */ = { - isa = PBXGroup; - children = ( - C1EA63321680FE1300A21259 /* .npmignore */, - C1EA63331680FE1300A21259 /* .travis.yml */, - C1EA63341680FE1300A21259 /* AUTHORS */, - C1EA63351680FE1300A21259 /* autolint.js */, - C1EA63361680FE1300A21259 /* buster.js */, - C1EA63371680FE1300A21259 /* examples */, - C1EA63441680FE1300A21259 /* lib */, - C1EA63521680FE1300A21259 /* LICENSE */, - C1EA63531680FE1300A21259 /* node_modules */, - C1EA63F41680FE1300A21259 /* package.json */, - C1EA63F51680FE1300A21259 /* Readme.rst */, - C1EA63F61680FE1300A21259 /* test */, - ); - path = "ramp-resources"; - sourceTree = ""; - }; - C1EA63371680FE1300A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA63381680FE1300A21259 /* webserver */, - ); - path = examples; - sourceTree = ""; - }; - C1EA63381680FE1300A21259 /* webserver */ = { - isa = PBXGroup; - children = ( - C1EA63391680FE1300A21259 /* alternatives.json */, - C1EA633A1680FE1300A21259 /* fixtures */, - C1EA633F1680FE1300A21259 /* medium.json */, - C1EA63401680FE1300A21259 /* publish.js */, - C1EA63411680FE1300A21259 /* README.rst */, - C1EA63421680FE1300A21259 /* server.js */, - C1EA63431680FE1300A21259 /* small.json */, - ); - path = webserver; - sourceTree = ""; - }; - C1EA633A1680FE1300A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA633B1680FE1300A21259 /* 1.png */, - C1EA633C1680FE1300A21259 /* 2.html */, - C1EA633D1680FE1300A21259 /* 3.txt */, - C1EA633E1680FE1300A21259 /* 4.tgz */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA63441680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA63451680FE1300A21259 /* file-etag.js */, - C1EA63461680FE1300A21259 /* http-proxy.js */, - C1EA63471680FE1300A21259 /* invalid-error.js */, - C1EA63481680FE1300A21259 /* load-path.js */, - C1EA63491680FE1300A21259 /* processors */, - C1EA634B1680FE1300A21259 /* ramp-resources.js */, - C1EA634C1680FE1300A21259 /* resource-combiner.js */, - C1EA634D1680FE1300A21259 /* resource-file-resolver.js */, - C1EA634E1680FE1300A21259 /* resource-middleware.js */, - C1EA634F1680FE1300A21259 /* resource-set-cache.js */, - C1EA63501680FE1300A21259 /* resource-set.js */, - C1EA63511680FE1300A21259 /* resource.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA63491680FE1300A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA634A1680FE1300A21259 /* iife.js */, - ); - path = processors; - sourceTree = ""; - }; - C1EA63531680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA63541680FE1300A21259 /* .bin */, - C1EA63561680FE1300A21259 /* lodash */, - C1EA638B1680FE1300A21259 /* mime */, - C1EA63941680FE1300A21259 /* minimatch */, - C1EA63A81680FE1300A21259 /* multi-glob */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA63541680FE1300A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA63551680FE1300A21259 /* lodash */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA63561680FE1300A21259 /* lodash */ = { - isa = PBXGroup; - children = ( - C1EA63571680FE1300A21259 /* build */, - C1EA635B1680FE1300A21259 /* build.js */, - C1EA635C1680FE1300A21259 /* doc */, - C1EA635E1680FE1300A21259 /* LICENSE.txt */, - C1EA635F1680FE1300A21259 /* lodash.js */, - C1EA63601680FE1300A21259 /* lodash.min.js */, - C1EA63611680FE1300A21259 /* package.json */, - C1EA63621680FE1300A21259 /* perf */, - C1EA63641680FE1300A21259 /* README.md */, - C1EA63651680FE1300A21259 /* test */, - C1EA63671680FE1300A21259 /* vendor */, - ); - path = lodash; - sourceTree = ""; - }; - C1EA63571680FE1300A21259 /* build */ = { - isa = PBXGroup; - children = ( - C1EA63581680FE1300A21259 /* minify.js */, - C1EA63591680FE1300A21259 /* post-compile.js */, - C1EA635A1680FE1300A21259 /* pre-compile.js */, - ); - path = build; - sourceTree = ""; - }; - C1EA635C1680FE1300A21259 /* doc */ = { - isa = PBXGroup; - children = ( - C1EA635D1680FE1300A21259 /* README.md */, - ); - path = doc; - sourceTree = ""; - }; - C1EA63621680FE1300A21259 /* perf */ = { - isa = PBXGroup; - children = ( - C1EA63631680FE1300A21259 /* perf.js */, - ); - path = perf; - sourceTree = ""; - }; - C1EA63651680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63661680FE1300A21259 /* test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63671680FE1300A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA63681680FE1300A21259 /* benchmark.js */, - C1EA636D1680FE1300A21259 /* closure-compiler */, - C1EA63711680FE1300A21259 /* platform.js */, - C1EA63751680FE1300A21259 /* qunit */, - C1EA637A1680FE1300A21259 /* qunit-clib */, - C1EA637E1680FE1300A21259 /* uglifyjs */, - C1EA63861680FE1300A21259 /* underscore */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA63681680FE1300A21259 /* benchmark.js */ = { - isa = PBXGroup; - children = ( - C1EA63691680FE1300A21259 /* benchmark.js */, - C1EA636A1680FE1300A21259 /* LICENSE.txt */, - C1EA636B1680FE1300A21259 /* nano.jar */, - C1EA636C1680FE1300A21259 /* README.md */, - ); - path = benchmark.js; - sourceTree = ""; - }; - C1EA636D1680FE1300A21259 /* closure-compiler */ = { - isa = PBXGroup; - children = ( - C1EA636E1680FE1300A21259 /* compiler.jar */, - C1EA636F1680FE1300A21259 /* COPYING */, - C1EA63701680FE1300A21259 /* README */, - ); - path = "closure-compiler"; - sourceTree = ""; - }; - C1EA63711680FE1300A21259 /* platform.js */ = { - isa = PBXGroup; - children = ( - C1EA63721680FE1300A21259 /* LICENSE.txt */, - C1EA63731680FE1300A21259 /* platform.js */, - C1EA63741680FE1300A21259 /* README.md */, - ); - path = platform.js; - sourceTree = ""; - }; - C1EA63751680FE1300A21259 /* qunit */ = { - isa = PBXGroup; - children = ( - C1EA63761680FE1300A21259 /* qunit */, - C1EA63791680FE1300A21259 /* README.md */, - ); - path = qunit; - sourceTree = ""; - }; - C1EA63761680FE1300A21259 /* qunit */ = { - isa = PBXGroup; - children = ( - C1EA63771680FE1300A21259 /* qunit-1.8.0.js */, - C1EA63781680FE1300A21259 /* qunit.js */, - ); - path = qunit; - sourceTree = ""; - }; - C1EA637A1680FE1300A21259 /* qunit-clib */ = { - isa = PBXGroup; - children = ( - C1EA637B1680FE1300A21259 /* LICENSE.txt */, - C1EA637C1680FE1300A21259 /* qunit-clib.js */, - C1EA637D1680FE1300A21259 /* README.md */, - ); - path = "qunit-clib"; - sourceTree = ""; - }; - C1EA637E1680FE1300A21259 /* uglifyjs */ = { - isa = PBXGroup; - children = ( - C1EA637F1680FE1300A21259 /* lib */, - C1EA63841680FE1300A21259 /* README.org */, - C1EA63851680FE1300A21259 /* uglify-js.js */, - ); - path = uglifyjs; - sourceTree = ""; - }; - C1EA637F1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA63801680FE1300A21259 /* consolidator.js */, - C1EA63811680FE1300A21259 /* parse-js.js */, - C1EA63821680FE1300A21259 /* process.js */, - C1EA63831680FE1300A21259 /* squeeze-more.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA63861680FE1300A21259 /* underscore */ = { - isa = PBXGroup; - children = ( - C1EA63871680FE1300A21259 /* LICENSE */, - C1EA63881680FE1300A21259 /* README.md */, - C1EA63891680FE1300A21259 /* underscore-min.js */, - C1EA638A1680FE1300A21259 /* underscore.js */, - ); - path = underscore; - sourceTree = ""; - }; - C1EA638B1680FE1300A21259 /* mime */ = { - isa = PBXGroup; - children = ( - C1EA638C1680FE1300A21259 /* LICENSE */, - C1EA638D1680FE1300A21259 /* mime.js */, - C1EA638E1680FE1300A21259 /* package.json */, - C1EA638F1680FE1300A21259 /* README.md */, - C1EA63901680FE1300A21259 /* test.js */, - C1EA63911680FE1300A21259 /* types */, - ); - path = mime; - sourceTree = ""; - }; - C1EA63911680FE1300A21259 /* types */ = { - isa = PBXGroup; - children = ( - C1EA63921680FE1300A21259 /* mime.types */, - C1EA63931680FE1300A21259 /* node.types */, - ); - path = types; - sourceTree = ""; - }; - C1EA63941680FE1300A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA63951680FE1300A21259 /* .travis.yml */, - C1EA63961680FE1300A21259 /* LICENSE */, - C1EA63971680FE1300A21259 /* minimatch.js */, - C1EA63981680FE1300A21259 /* node_modules */, - C1EA63A21680FE1300A21259 /* package.json */, - C1EA63A31680FE1300A21259 /* README.md */, - C1EA63A41680FE1300A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA63981680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA63991680FE1300A21259 /* lru-cache */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA63991680FE1300A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA639A1680FE1300A21259 /* .npmignore */, - C1EA639B1680FE1300A21259 /* lib */, - C1EA639D1680FE1300A21259 /* LICENSE */, - C1EA639E1680FE1300A21259 /* package.json */, - C1EA639F1680FE1300A21259 /* README.md */, - C1EA63A01680FE1300A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA639B1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA639C1680FE1300A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA63A01680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63A11680FE1300A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63A41680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63A51680FE1300A21259 /* basic.js */, - C1EA63A61680FE1300A21259 /* brace-expand.js */, - C1EA63A71680FE1300A21259 /* caching.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63A81680FE1300A21259 /* multi-glob */ = { - isa = PBXGroup; - children = ( - C1EA63A91680FE1300A21259 /* .npmignore */, - C1EA63AA1680FE1300A21259 /* .travis.yml */, - C1EA63AB1680FE1300A21259 /* AUTHORS */, - C1EA63AC1680FE1300A21259 /* autolint.js */, - C1EA63AD1680FE1300A21259 /* buster.js */, - C1EA63AE1680FE1300A21259 /* lib */, - C1EA63B01680FE1300A21259 /* LICENSE */, - C1EA63B11680FE1300A21259 /* node_modules */, - C1EA63F01680FE1300A21259 /* package.json */, - C1EA63F11680FE1300A21259 /* Readme.rst */, - C1EA63F21680FE1300A21259 /* test */, - ); - path = "multi-glob"; - sourceTree = ""; - }; - C1EA63AE1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA63AF1680FE1300A21259 /* multi-glob.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA63B11680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA63B21680FE1300A21259 /* glob */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA63B21680FE1300A21259 /* glob */ = { - isa = PBXGroup; - children = ( - C1EA63B31680FE1300A21259 /* .npmignore */, - C1EA63B41680FE1300A21259 /* .travis.yml */, - C1EA63B51680FE1300A21259 /* examples */, - C1EA63B81680FE1300A21259 /* glob.js */, - C1EA63B91680FE1300A21259 /* LICENSE */, - C1EA63BA1680FE1300A21259 /* node_modules */, - C1EA63E51680FE1300A21259 /* package.json */, - C1EA63E61680FE1300A21259 /* README.md */, - C1EA63E71680FE1300A21259 /* test */, - ); - path = glob; - sourceTree = ""; - }; - C1EA63B51680FE1300A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA63B61680FE1300A21259 /* g.js */, - C1EA63B71680FE1300A21259 /* usr-local.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA63BA1680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA63BB1680FE1300A21259 /* graceful-fs */, - C1EA63C31680FE1300A21259 /* inherits */, - C1EA63C71680FE1300A21259 /* minimatch */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA63BB1680FE1300A21259 /* graceful-fs */ = { - isa = PBXGroup; - children = ( - C1EA63BC1680FE1300A21259 /* .npmignore */, - C1EA63BD1680FE1300A21259 /* graceful-fs.js */, - C1EA63BE1680FE1300A21259 /* LICENSE */, - C1EA63BF1680FE1300A21259 /* package.json */, - C1EA63C01680FE1300A21259 /* README.md */, - C1EA63C11680FE1300A21259 /* test */, - ); - path = "graceful-fs"; - sourceTree = ""; - }; - C1EA63C11680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63C21680FE1300A21259 /* open.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63C31680FE1300A21259 /* inherits */ = { - isa = PBXGroup; - children = ( - C1EA63C41680FE1300A21259 /* inherits.js */, - C1EA63C51680FE1300A21259 /* package.json */, - C1EA63C61680FE1300A21259 /* README.md */, - ); - path = inherits; - sourceTree = ""; - }; - C1EA63C71680FE1300A21259 /* minimatch */ = { - isa = PBXGroup; - children = ( - C1EA63C81680FE1300A21259 /* .travis.yml */, - C1EA63C91680FE1300A21259 /* LICENSE */, - C1EA63CA1680FE1300A21259 /* minimatch.js */, - C1EA63CB1680FE1300A21259 /* node_modules */, - C1EA63DE1680FE1300A21259 /* package.json */, - C1EA63DF1680FE1300A21259 /* README.md */, - C1EA63E01680FE1300A21259 /* test */, - ); - path = minimatch; - sourceTree = ""; - }; - C1EA63CB1680FE1300A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA63CC1680FE1300A21259 /* lru-cache */, - C1EA63D61680FE1300A21259 /* sigmund */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA63CC1680FE1300A21259 /* lru-cache */ = { - isa = PBXGroup; - children = ( - C1EA63CD1680FE1300A21259 /* .npmignore */, - C1EA63CE1680FE1300A21259 /* AUTHORS */, - C1EA63CF1680FE1300A21259 /* lib */, - C1EA63D11680FE1300A21259 /* LICENSE */, - C1EA63D21680FE1300A21259 /* package.json */, - C1EA63D31680FE1300A21259 /* README.md */, - C1EA63D41680FE1300A21259 /* test */, - ); - path = "lru-cache"; - sourceTree = ""; - }; - C1EA63CF1680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA63D01680FE1300A21259 /* lru-cache.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA63D41680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63D51680FE1300A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63D61680FE1300A21259 /* sigmund */ = { - isa = PBXGroup; - children = ( - C1EA63D71680FE1300A21259 /* bench.js */, - C1EA63D81680FE1300A21259 /* LICENSE */, - C1EA63D91680FE1300A21259 /* package.json */, - C1EA63DA1680FE1300A21259 /* README.md */, - C1EA63DB1680FE1300A21259 /* sigmund.js */, - C1EA63DC1680FE1300A21259 /* test */, - ); - path = sigmund; - sourceTree = ""; - }; - C1EA63DC1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63DD1680FE1300A21259 /* basic.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63E01680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63E11680FE1300A21259 /* basic.js */, - C1EA63E21680FE1300A21259 /* brace-expand.js */, - C1EA63E31680FE1300A21259 /* caching.js */, - C1EA63E41680FE1300A21259 /* defaults.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63E71680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63E81680FE1300A21259 /* 00-setup.js */, - C1EA63E91680FE1300A21259 /* bash-comparison.js */, - C1EA63EA1680FE1300A21259 /* cwd-test.js */, - C1EA63EB1680FE1300A21259 /* mark.js */, - C1EA63EC1680FE1300A21259 /* pause-resume.js */, - C1EA63ED1680FE1300A21259 /* root-nomount.js */, - C1EA63EE1680FE1300A21259 /* root.js */, - C1EA63EF1680FE1300A21259 /* zz-cleanup.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63F21680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63F31680FE1300A21259 /* multi-glob-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63F61680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63F71680FE1300A21259 /* fixtures */, - C1EA63FF1680FE1300A21259 /* http-proxy-test.js */, - C1EA64001680FE1300A21259 /* load-path-test.js */, - C1EA64011680FE1300A21259 /* processors */, - C1EA64031680FE1300A21259 /* resource-middleware-test.js */, - C1EA64041680FE1300A21259 /* resource-set-cache-test.js */, - C1EA64051680FE1300A21259 /* resource-set-test.js */, - C1EA64061680FE1300A21259 /* resource-test.js */, - C1EA64071680FE1300A21259 /* test-helper.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA63F71680FE1300A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA63F81680FE1300A21259 /* bar.js */, - C1EA63F91680FE1300A21259 /* foo.js */, - C1EA63FA1680FE1300A21259 /* other-test */, - C1EA63FD1680FE1300A21259 /* test */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA63FA1680FE1300A21259 /* other-test */ = { - isa = PBXGroup; - children = ( - C1EA63FB1680FE1300A21259 /* other.js */, - C1EA63FC1680FE1300A21259 /* some-test.js */, - ); - path = "other-test"; - sourceTree = ""; - }; - C1EA63FD1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA63FE1680FE1300A21259 /* my-testish.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA64011680FE1300A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA64021680FE1300A21259 /* iife-processor-test.js */, - ); - path = processors; - sourceTree = ""; - }; - C1EA640B1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA640C1680FE1300A21259 /* cache-test.js */, - C1EA640D1680FE1300A21259 /* events-test.js */, - C1EA640E1680FE1300A21259 /* helpers */, - C1EA64131680FE1300A21259 /* joinable-and-unjoinable-test.js */, - C1EA64141680FE1300A21259 /* main-test-session-client.js */, - C1EA64151680FE1300A21259 /* main-test.js */, - C1EA64161680FE1300A21259 /* session-lifecycle-test.js */, - C1EA64171680FE1300A21259 /* slave-header-test.js */, - C1EA64181680FE1300A21259 /* test-helper-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA640E1680FE1300A21259 /* helpers */ = { - isa = PBXGroup; - children = ( - C1EA640F1680FE1300A21259 /* phantom-factory.js */, - C1EA64101680FE1300A21259 /* phantom.js */, - C1EA64111680FE1300A21259 /* server-loader.js */, - C1EA64121680FE1300A21259 /* test-helper.js */, - ); - path = helpers; - sourceTree = ""; - }; - C1EA64191680FE1300A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA641A1680FE1300A21259 /* json */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA641A1680FE1300A21259 /* json */ = { - isa = PBXGroup; - children = ( - C1EA641B1680FE1300A21259 /* cycle.js */, - C1EA641C1680FE1300A21259 /* json.js */, - C1EA641D1680FE1300A21259 /* json2.js */, - C1EA641E1680FE1300A21259 /* json_parse.js */, - C1EA641F1680FE1300A21259 /* json_parse_state.js */, - C1EA64201680FE1300A21259 /* README */, - ); - path = json; - sourceTree = ""; - }; - C1EA64211680FE1300A21259 /* stack-filter */ = { - isa = PBXGroup; - children = ( - C1EA64221680FE1300A21259 /* .npmignore */, - C1EA64231680FE1300A21259 /* AUTHORS */, - C1EA64241680FE1300A21259 /* autolint.js */, - C1EA64251680FE1300A21259 /* buster.js */, - C1EA64261680FE1300A21259 /* lib */, - C1EA64281680FE1300A21259 /* LICENSE */, - C1EA64291680FE1300A21259 /* package.json */, - C1EA642A1680FE1300A21259 /* Readme.rst */, - C1EA642B1680FE1300A21259 /* test */, - ); - path = "stack-filter"; - sourceTree = ""; - }; - C1EA64261680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA64271680FE1300A21259 /* stack-filter.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA642B1680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA642C1680FE1300A21259 /* stack-filter-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA64311680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA64321680FE1300A21259 /* progress-reporter-integration-test.js */, - C1EA64331680FE1300A21259 /* run-analyzer-test.js */, - C1EA64341680FE1300A21259 /* runners */, - C1EA643A1680FE1300A21259 /* test-cli-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA64341680FE1300A21259 /* runners */ = { - isa = PBXGroup; - children = ( - C1EA64351680FE1300A21259 /* browser */, - C1EA64381680FE1300A21259 /* browser-test.js */, - C1EA64391680FE1300A21259 /* node-test.js */, - ); - path = runners; - sourceTree = ""; - }; - C1EA64351680FE1300A21259 /* browser */ = { - isa = PBXGroup; - children = ( - C1EA64361680FE1300A21259 /* progress-reporter-test.js */, - C1EA64371680FE1300A21259 /* remote-runner-test.js */, - ); - path = browser; - sourceTree = ""; - }; - C1EA643B1680FE1300A21259 /* views */ = { - isa = PBXGroup; - children = ( - C1EA643C1680FE1300A21259 /* help-reporters.ejs */, - ); - path = views; - sourceTree = ""; - }; - C1EA643D1680FE1300A21259 /* sinon */ = { - isa = PBXGroup; - children = ( - C1EA643E1680FE1300A21259 /* .npmignore */, - C1EA643F1680FE1300A21259 /* .travis.yml */, - C1EA64401680FE1300A21259 /* AUTHORS */, - C1EA64411680FE1300A21259 /* build */, - C1EA64421680FE1300A21259 /* Changelog.txt */, - C1EA64431680FE1300A21259 /* GPATH */, - C1EA64441680FE1300A21259 /* GRTAGS */, - C1EA64451680FE1300A21259 /* GSYMS */, - C1EA64461680FE1300A21259 /* GTAGS */, - C1EA64471680FE1300A21259 /* jsl.conf */, - C1EA64481680FE1300A21259 /* lib */, - C1EA645C1680FE1300A21259 /* LICENSE */, - C1EA645D1680FE1300A21259 /* package.json */, - C1EA645E1680FE1300A21259 /* README.md */, - C1EA645F1680FE1300A21259 /* release.sh */, - C1EA64601680FE1300A21259 /* test */, - ); - path = sinon; - sourceTree = ""; - }; - C1EA64481680FE1300A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA64491680FE1300A21259 /* sinon */, - C1EA645B1680FE1300A21259 /* sinon.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA64491680FE1300A21259 /* sinon */ = { - isa = PBXGroup; - children = ( - C1EA644A1680FE1300A21259 /* assert.js */, - C1EA644B1680FE1300A21259 /* collection.js */, - C1EA644C1680FE1300A21259 /* match.js */, - C1EA644D1680FE1300A21259 /* mock.js */, - C1EA644E1680FE1300A21259 /* sandbox.js */, - C1EA644F1680FE1300A21259 /* spy.js */, - C1EA64501680FE1300A21259 /* stub.js */, - C1EA64511680FE1300A21259 /* test.js */, - C1EA64521680FE1300A21259 /* test_case.js */, - C1EA64531680FE1300A21259 /* util */, - ); - path = sinon; - sourceTree = ""; - }; - C1EA64531680FE1300A21259 /* util */ = { - isa = PBXGroup; - children = ( - C1EA64541680FE1300A21259 /* event.js */, - C1EA64551680FE1300A21259 /* fake_server.js */, - C1EA64561680FE1300A21259 /* fake_server_with_clock.js */, - C1EA64571680FE1300A21259 /* fake_timers.js */, - C1EA64581680FE1300A21259 /* fake_xml_http_request.js */, - C1EA64591680FE1300A21259 /* timers_ie.js */, - C1EA645A1680FE1300A21259 /* xhr_ie.js */, - ); - path = util; - sourceTree = ""; - }; - C1EA64601680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA64611680FE1300A21259 /* node */, - C1EA64631680FE1300A21259 /* resources */, - C1EA64651680FE1300A21259 /* rhino */, - C1EA64681680FE1300A21259 /* runner.js */, - C1EA64691680FE1300A21259 /* sinon */, - C1EA64791680FE1300A21259 /* sinon-dist.html */, - C1EA647A1680FE1300A21259 /* sinon.html */, - C1EA647B1680FE1300A21259 /* sinon_test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA64611680FE1300A21259 /* node */ = { - isa = PBXGroup; - children = ( - C1EA64621680FE1300A21259 /* run.js */, - ); - path = node; - sourceTree = ""; - }; - C1EA64631680FE1300A21259 /* resources */ = { - isa = PBXGroup; - children = ( - C1EA64641680FE1300A21259 /* xhr_target.txt */, - ); - path = resources; - sourceTree = ""; - }; - C1EA64651680FE1300A21259 /* rhino */ = { - isa = PBXGroup; - children = ( - C1EA64661680FE1300A21259 /* env.rhino.1.2.js */, - C1EA64671680FE1300A21259 /* run.js */, - ); - path = rhino; - sourceTree = ""; - }; - C1EA64691680FE1300A21259 /* sinon */ = { - isa = PBXGroup; - children = ( - C1EA646A1680FE1300A21259 /* assert_test.js */, - C1EA646B1680FE1300A21259 /* collection_test.js */, - C1EA646C1680FE1300A21259 /* match_test.js */, - C1EA646D1680FE1300A21259 /* mock_test.js */, - C1EA646E1680FE1300A21259 /* sandbox_test.js */, - C1EA646F1680FE1300A21259 /* spy_test.js */, - C1EA64701680FE1300A21259 /* stub_test.js */, - C1EA64711680FE1300A21259 /* test_case_test.js */, - C1EA64721680FE1300A21259 /* test_test.js */, - C1EA64731680FE1300A21259 /* util */, - ); - path = sinon; - sourceTree = ""; - }; - C1EA64731680FE1300A21259 /* util */ = { - isa = PBXGroup; - children = ( - C1EA64741680FE1300A21259 /* event_test.js */, - C1EA64751680FE1300A21259 /* fake_server_test.js */, - C1EA64761680FE1300A21259 /* fake_server_with_clock_test.js */, - C1EA64771680FE1300A21259 /* fake_timers_test.js */, - C1EA64781680FE1300A21259 /* fake_xml_http_request_test.js */, - ); - path = util; - sourceTree = ""; - }; - C1EA647C1680FE1300A21259 /* when */ = { - isa = PBXGroup; - children = ( - C1EA647D1680FE1300A21259 /* .gitmodules */, - C1EA647E1680FE1300A21259 /* .npmignore */, - C1EA647F1680FE1300A21259 /* .travis.yml */, - C1EA64801680FE1300A21259 /* apply.js */, - C1EA64811680FE1300A21259 /* cancelable.js */, - C1EA64821680FE1300A21259 /* debug.js */, - C1EA64831680FE1300A21259 /* delay.js */, - C1EA64841680FE1300A21259 /* LICENSE.txt */, - C1EA64851680FE1300A21259 /* package.json */, - C1EA64861680FE1300A21259 /* README.md */, - C1EA64871680FE1300A21259 /* test */, - C1EA64981680FE1300A21259 /* timed.js */, - C1EA64991680FE1300A21259 /* timeout.js */, - C1EA649A1680FE1300A21259 /* when.js */, - ); - path = when; - sourceTree = ""; - }; - C1EA64871680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA64881680FE1300A21259 /* all.js */, - C1EA64891680FE1300A21259 /* any.js */, - C1EA648A1680FE1300A21259 /* apply.js */, - C1EA648B1680FE1300A21259 /* buster.js */, - C1EA648C1680FE1300A21259 /* cancelable.js */, - C1EA648D1680FE1300A21259 /* chain.js */, - C1EA648E1680FE1300A21259 /* defer.js */, - C1EA648F1680FE1300A21259 /* delay.js */, - C1EA64901680FE1300A21259 /* isPromise.js */, - C1EA64911680FE1300A21259 /* map.js */, - C1EA64921680FE1300A21259 /* promise.js */, - C1EA64931680FE1300A21259 /* reduce.js */, - C1EA64941680FE1300A21259 /* reject.js */, - C1EA64951680FE1300A21259 /* some.js */, - C1EA64961680FE1300A21259 /* timeout.js */, - C1EA64971680FE1300A21259 /* when.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA649D1680FE1300A21259 /* resources */ = { - isa = PBXGroup; - children = ( - C1EA649E1680FE1300A21259 /* buster-test.css */, - ); - path = resources; - sourceTree = ""; - }; - C1EA64A01680FE1300A21259 /* script */ = { - isa = PBXGroup; - children = ( - C1EA64A11680FE1300A21259 /* phantom.js */, - ); - path = script; - sourceTree = ""; - }; - C1EA64A21680FE1300A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA64A31680FE1300A21259 /* browser */, - C1EA64A51680FE1300A21259 /* buster-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA64A31680FE1300A21259 /* browser */ = { - isa = PBXGroup; - children = ( - C1EA64A41680FE1300A21259 /* browser-wiring-test.js */, - ); - path = browser; - sourceTree = ""; - }; - C1EA64A61680FE1300A21259 /* extend */ = { - isa = PBXGroup; - children = ( - C1EA64A71680FE1300A21259 /* .npmignore */, - C1EA64A81680FE1300A21259 /* index.js */, - C1EA64A91680FE1300A21259 /* package.json */, - C1EA64AA1680FE1300A21259 /* README.md */, - ); - path = extend; - sourceTree = ""; - }; - C1EA64AB1680FE1300A21259 /* webpack */ = { - isa = PBXGroup; - children = ( - C1EA64AC1680FE1400A21259 /* .gitattributes */, - C1EA64AD1680FE1400A21259 /* .npmignore */, - C1EA64AE1680FE1400A21259 /* .travis.yml */, - C1EA64AF1680FE1400A21259 /* api */, - C1EA64B11680FE1400A21259 /* bin */, - C1EA64B31680FE1400A21259 /* bm.js */, - C1EA64B41680FE1400A21259 /* buildin */, - C1EA64C81680FE1400A21259 /* lib */, - C1EA64D41680FE1400A21259 /* LICENSE */, - C1EA64D51680FE1400A21259 /* node_modules */, - C1EA6DB81680FE1500A21259 /* package.json */, - C1EA6DB91680FE1500A21259 /* README.md */, - C1EA6DBA1680FE1500A21259 /* templates */, - C1EA6DC01680FE1500A21259 /* test */, - ); - path = webpack; - sourceTree = ""; - }; - C1EA64AF1680FE1400A21259 /* api */ = { - isa = PBXGroup; - children = ( - C1EA64B01680FE1400A21259 /* getPublicPrefix.js */, - ); - path = api; - sourceTree = ""; - }; - C1EA64B11680FE1400A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA64B21680FE1400A21259 /* webpack.js */, - ); - path = bin; - sourceTree = ""; - }; - C1EA64B41680FE1400A21259 /* buildin */ = { - isa = PBXGroup; - children = ( - C1EA64B51680FE1400A21259 /* __webpack_amd_define.js */, - C1EA64B61680FE1400A21259 /* __webpack_amd_require.js */, - C1EA64B71680FE1400A21259 /* __webpack_console.js */, - C1EA64B81680FE1400A21259 /* __webpack_dirname.js */, - C1EA64B91680FE1400A21259 /* __webpack_filename.js */, - C1EA64BA1680FE1400A21259 /* __webpack_global.js */, - C1EA64BB1680FE1400A21259 /* __webpack_module.js */, - C1EA64BC1680FE1400A21259 /* __webpack_options_amd.loader.js */, - C1EA64BD1680FE1400A21259 /* __webpack_process.js */, - C1EA64BE1680FE1400A21259 /* web_modules */, - ); - path = buildin; - sourceTree = ""; - }; - C1EA64BE1680FE1400A21259 /* web_modules */ = { - isa = PBXGroup; - children = ( - C1EA64BF1680FE1400A21259 /* assert.js */, - C1EA64C01680FE1400A21259 /* buffer.js */, - C1EA64C11680FE1400A21259 /* child_process.js */, - C1EA64C21680FE1400A21259 /* events.js */, - C1EA64C31680FE1400A21259 /* path.js */, - C1EA64C41680FE1400A21259 /* punycode.js */, - C1EA64C51680FE1400A21259 /* querystring.js */, - C1EA64C61680FE1400A21259 /* url.js */, - C1EA64C71680FE1400A21259 /* util.js */, - ); - path = web_modules; - sourceTree = ""; - }; - C1EA64C81680FE1400A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA64C91680FE1400A21259 /* buildDeps.js */, - C1EA64CA1680FE1400A21259 /* buildModule.js */, - C1EA64CB1680FE1400A21259 /* Cache.js */, - C1EA64CC1680FE1400A21259 /* createFilenameShortener.js */, - C1EA64CD1680FE1400A21259 /* formatOutput.js */, - C1EA64CE1680FE1400A21259 /* parse.js */, - C1EA64CF1680FE1400A21259 /* webpack.js */, - C1EA64D01680FE1400A21259 /* worker.js */, - C1EA64D11680FE1400A21259 /* Workers.js */, - C1EA64D21680FE1400A21259 /* writeChunk.js */, - C1EA64D31680FE1400A21259 /* writeSource.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA64D51680FE1400A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA64D61680FE1400A21259 /* .bin */, - C1EA64D91680FE1400A21259 /* bundle-loader */, - C1EA64DE1680FE1400A21259 /* coffee-loader */, - C1EA65041680FE1400A21259 /* css-loader */, - C1EA6A521680FE1400A21259 /* enhanced-require */, - C1EA6A901680FE1400A21259 /* enhanced-resolve */, - C1EA6AB81680FE1400A21259 /* esprima */, - C1EA6B021680FE1400A21259 /* file-loader */, - C1EA6B0F1680FE1400A21259 /* jade-loader */, - C1EA6BD81680FE1500A21259 /* json-loader */, - C1EA6BDC1680FE1500A21259 /* less-loader */, - C1EA6CA01680FE1500A21259 /* optimist */, - C1EA6CCA1680FE1500A21259 /* raw-loader */, - C1EA6CCE1680FE1500A21259 /* script-loader */, - C1EA6D2F1680FE1500A21259 /* sprintf */, - C1EA6D341680FE1500A21259 /* style-loader */, - C1EA6D3A1680FE1500A21259 /* uglify-js */, - C1EA6DB01680FE1500A21259 /* val-loader */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA64D61680FE1400A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA64D71680FE1400A21259 /* esparse */, - C1EA64D81680FE1400A21259 /* uglifyjs */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA64D91680FE1400A21259 /* bundle-loader */ = { - isa = PBXGroup; - children = ( - C1EA64DA1680FE1400A21259 /* index.js */, - C1EA64DB1680FE1400A21259 /* lazy.js */, - C1EA64DC1680FE1400A21259 /* package.json */, - C1EA64DD1680FE1400A21259 /* README.md */, - ); - path = "bundle-loader"; - sourceTree = ""; - }; - C1EA64DE1680FE1400A21259 /* coffee-loader */ = { - isa = PBXGroup; - children = ( - C1EA64DF1680FE1400A21259 /* .npmignore */, - C1EA64E01680FE1400A21259 /* index.js */, - C1EA64E11680FE1400A21259 /* node_modules */, - C1EA65021680FE1400A21259 /* package.json */, - C1EA65031680FE1400A21259 /* README.md */, - ); - path = "coffee-loader"; - sourceTree = ""; - }; - C1EA64E11680FE1400A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA64E21680FE1400A21259 /* .bin */, - C1EA64E51680FE1400A21259 /* coffee-script */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA64E21680FE1400A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA64E31680FE1400A21259 /* cake */, - C1EA64E41680FE1400A21259 /* coffee */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA64E51680FE1400A21259 /* coffee-script */ = { - isa = PBXGroup; - children = ( - C1EA64E61680FE1400A21259 /* .npmignore */, - C1EA64E71680FE1400A21259 /* bin */, - C1EA64EA1680FE1400A21259 /* CNAME */, - C1EA64EB1680FE1400A21259 /* CONTRIBUTING.md */, - C1EA64EC1680FE1400A21259 /* extras */, - C1EA64EE1680FE1400A21259 /* lib */, - C1EA64FE1680FE1400A21259 /* LICENSE */, - C1EA64FF1680FE1400A21259 /* package.json */, - C1EA65001680FE1400A21259 /* Rakefile */, - C1EA65011680FE1400A21259 /* README */, - ); - path = "coffee-script"; - sourceTree = ""; - }; - C1EA64E71680FE1400A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA64E81680FE1400A21259 /* cake */, - C1EA64E91680FE1400A21259 /* coffee */, - ); - path = bin; - sourceTree = ""; - }; - C1EA64EC1680FE1400A21259 /* extras */ = { - isa = PBXGroup; - children = ( - C1EA64ED1680FE1400A21259 /* jsl.conf */, - ); - path = extras; - sourceTree = ""; - }; - C1EA64EE1680FE1400A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA64EF1680FE1400A21259 /* coffee-script */, - ); - path = lib; - sourceTree = ""; - }; - C1EA64EF1680FE1400A21259 /* coffee-script */ = { - isa = PBXGroup; - children = ( - C1EA64F01680FE1400A21259 /* browser.js */, - C1EA64F11680FE1400A21259 /* cake.js */, - C1EA64F21680FE1400A21259 /* coffee-script.js */, - C1EA64F31680FE1400A21259 /* command.js */, - C1EA64F41680FE1400A21259 /* grammar.js */, - C1EA64F51680FE1400A21259 /* helpers.js */, - C1EA64F61680FE1400A21259 /* index.js */, - C1EA64F71680FE1400A21259 /* lexer.js */, - C1EA64F81680FE1400A21259 /* nodes.js */, - C1EA64F91680FE1400A21259 /* optparse.js */, - C1EA64FA1680FE1400A21259 /* parser.js */, - C1EA64FB1680FE1400A21259 /* repl.js */, - C1EA64FC1680FE1400A21259 /* rewriter.js */, - C1EA64FD1680FE1400A21259 /* scope.js */, - ); - path = "coffee-script"; - sourceTree = ""; - }; - C1EA65041680FE1400A21259 /* css-loader */ = { - isa = PBXGroup; - children = ( - C1EA65051680FE1400A21259 /* .npmignore */, - C1EA65061680FE1400A21259 /* index.js */, - C1EA65071680FE1400A21259 /* node_modules */, - C1EA6A501680FE1400A21259 /* package.json */, - C1EA6A511680FE1400A21259 /* README.md */, - ); - path = "css-loader"; - sourceTree = ""; - }; - C1EA65071680FE1400A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA65081680FE1400A21259 /* .bin */, - C1EA650A1680FE1400A21259 /* csso */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA65081680FE1400A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA65091680FE1400A21259 /* csso */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA650A1680FE1400A21259 /* csso */ = { - isa = PBXGroup; - children = ( - C1EA650B1680FE1400A21259 /* bin */, - C1EA650D1680FE1400A21259 /* doc */, - C1EA65101680FE1400A21259 /* GNUmakefile */, - C1EA65111680FE1400A21259 /* lib */, - C1EA65181680FE1400A21259 /* MANUAL.en.md */, - C1EA65191680FE1400A21259 /* MANUAL.ru.md */, - C1EA651A1680FE1400A21259 /* MIT-LICENSE.txt */, - C1EA651B1680FE1400A21259 /* package.json */, - C1EA651C1680FE1400A21259 /* README.md */, - C1EA651D1680FE1400A21259 /* README.ru.md */, - C1EA651E1680FE1400A21259 /* src */, - C1EA652A1680FE1400A21259 /* test */, - C1EA6A4A1680FE1400A21259 /* USAGE */, - C1EA6A4B1680FE1400A21259 /* VERSION */, - C1EA6A4C1680FE1400A21259 /* web */, - ); - path = csso; - sourceTree = ""; - }; - C1EA650B1680FE1400A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA650C1680FE1400A21259 /* csso */, - ); - path = bin; - sourceTree = ""; - }; - C1EA650D1680FE1400A21259 /* doc */ = { - isa = PBXGroup; - children = ( - C1EA650E1680FE1400A21259 /* compressflow.graphml */, - C1EA650F1680FE1400A21259 /* compressflow.png */, - ); - path = doc; - sourceTree = ""; - }; - C1EA65111680FE1400A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA65121680FE1400A21259 /* compressor.js */, - C1EA65131680FE1400A21259 /* csso.js */, - C1EA65141680FE1400A21259 /* cssoapi.js */, - C1EA65151680FE1400A21259 /* parser.js */, - C1EA65161680FE1400A21259 /* translator.js */, - C1EA65171680FE1400A21259 /* util.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA651E1680FE1400A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA651F1680FE1400A21259 /* compressor.node.js */, - C1EA65201680FE1400A21259 /* compressor.shared.js */, - C1EA65211680FE1400A21259 /* compressor.web.js */, - C1EA65221680FE1400A21259 /* csso.other.js */, - C1EA65231680FE1400A21259 /* csso.pecode */, - C1EA65241680FE1400A21259 /* parser.node.js */, - C1EA65251680FE1400A21259 /* translator.node.js */, - C1EA65261680FE1400A21259 /* translator.shared.js */, - C1EA65271680FE1400A21259 /* trbl.js */, - C1EA65281680FE1400A21259 /* util.node.js */, - C1EA65291680FE1400A21259 /* util.shared.js */, - ); - path = src; - sourceTree = ""; - }; - C1EA652A1680FE1400A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA652B1680FE1400A21259 /* data */, - C1EA6A491680FE1400A21259 /* test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA652B1680FE1400A21259 /* data */ = { - isa = PBXGroup; - children = ( - C1EA652C1680FE1400A21259 /* test_atkeyword */, - C1EA65331680FE1400A21259 /* test_atruleb */, - C1EA654F1680FE1400A21259 /* test_atruler */, - C1EA656E1680FE1400A21259 /* test_atrules */, - C1EA65841680FE1400A21259 /* test_attrib */, - C1EA65991680FE1400A21259 /* test_attrselector */, - C1EA65A91680FE1400A21259 /* test_block */, - C1EA65D71680FE1400A21259 /* test_braces */, - C1EA66231680FE1400A21259 /* test_clazz */, - C1EA66271680FE1400A21259 /* test_combinator */, - C1EA66311680FE1400A21259 /* test_comment */, - C1EA66351680FE1400A21259 /* test_declaration */, - C1EA66541680FE1400A21259 /* test_decldelim */, - C1EA66581680FE1400A21259 /* test_delim */, - C1EA665C1680FE1400A21259 /* test_dimension */, - C1EA66661680FE1400A21259 /* test_filter */, - C1EA66851680FE1400A21259 /* test_functionExpression */, - C1EA669E1680FE1400A21259 /* test_funktion */, - C1EA66D51680FE1400A21259 /* test_ident */, - C1EA66E81680FE1400A21259 /* test_important */, - C1EA66F21680FE1400A21259 /* test_nth */, - C1EA67021680FE1400A21259 /* test_nthselector */, - C1EA67151680FE1400A21259 /* test_number */, - C1EA67291680FE1400A21259 /* test_operator */, - C1EA67361680FE1400A21259 /* test_percentage */, - C1EA67401680FE1400A21259 /* test_property */, - C1EA67471680FE1400A21259 /* test_pseudoc */, - C1EA674E1680FE1400A21259 /* test_pseudoe */, - C1EA67551680FE1400A21259 /* test_ruleset */, - C1EA678A1680FE1400A21259 /* test_selector */, - C1EA67911680FE1400A21259 /* test_shash */, - C1EA67981680FE1400A21259 /* test_simpleselector */, - C1EA67DF1680FE1400A21259 /* test_string */, - C1EA67EC1680FE1400A21259 /* test_stylesheet */, - C1EA69FD1680FE1400A21259 /* test_unary */, - C1EA6A041680FE1400A21259 /* test_unknown */, - C1EA6A0B1680FE1400A21259 /* test_uri */, - C1EA6A1E1680FE1400A21259 /* test_value */, - C1EA6A421680FE1400A21259 /* test_vhash */, - ); - path = data; - sourceTree = ""; - }; - C1EA652C1680FE1400A21259 /* test_atkeyword */ = { - isa = PBXGroup; - children = ( - C1EA652D1680FE1400A21259 /* atkeyword.0.css */, - C1EA652E1680FE1400A21259 /* atkeyword.0.l */, - C1EA652F1680FE1400A21259 /* atkeyword.0.p */, - C1EA65301680FE1400A21259 /* atkeyword.1.css */, - C1EA65311680FE1400A21259 /* atkeyword.1.l */, - C1EA65321680FE1400A21259 /* atkeyword.1.p */, - ); - path = test_atkeyword; - sourceTree = ""; - }; - C1EA65331680FE1400A21259 /* test_atruleb */ = { - isa = PBXGroup; - children = ( - C1EA65341680FE1400A21259 /* atruleb.0.css */, - C1EA65351680FE1400A21259 /* atruleb.0.l */, - C1EA65361680FE1400A21259 /* atruleb.0.p */, - C1EA65371680FE1400A21259 /* atruleb.1.css */, - C1EA65381680FE1400A21259 /* atruleb.1.l */, - C1EA65391680FE1400A21259 /* atruleb.1.p */, - C1EA653A1680FE1400A21259 /* atruleb.2.css */, - C1EA653B1680FE1400A21259 /* atruleb.2.l */, - C1EA653C1680FE1400A21259 /* atruleb.2.p */, - C1EA653D1680FE1400A21259 /* atruleb.c.0.css */, - C1EA653E1680FE1400A21259 /* atruleb.c.0.l */, - C1EA653F1680FE1400A21259 /* atruleb.c.0.p */, - C1EA65401680FE1400A21259 /* atruleb.c.1.css */, - C1EA65411680FE1400A21259 /* atruleb.c.1.l */, - C1EA65421680FE1400A21259 /* atruleb.c.1.p */, - C1EA65431680FE1400A21259 /* atruleb.c.2.css */, - C1EA65441680FE1400A21259 /* atruleb.c.2.l */, - C1EA65451680FE1400A21259 /* atruleb.c.2.p */, - C1EA65461680FE1400A21259 /* atruleb.s.0.css */, - C1EA65471680FE1400A21259 /* atruleb.s.0.l */, - C1EA65481680FE1400A21259 /* atruleb.s.0.p */, - C1EA65491680FE1400A21259 /* atruleb.s.1.css */, - C1EA654A1680FE1400A21259 /* atruleb.s.1.l */, - C1EA654B1680FE1400A21259 /* atruleb.s.1.p */, - C1EA654C1680FE1400A21259 /* atruleb.s.2.css */, - C1EA654D1680FE1400A21259 /* atruleb.s.2.l */, - C1EA654E1680FE1400A21259 /* atruleb.s.2.p */, - ); - path = test_atruleb; - sourceTree = ""; - }; - C1EA654F1680FE1400A21259 /* test_atruler */ = { - isa = PBXGroup; - children = ( - C1EA65501680FE1400A21259 /* atruler.0.css */, - C1EA65511680FE1400A21259 /* atruler.0.l */, - C1EA65521680FE1400A21259 /* atruler.0.p */, - C1EA65531680FE1400A21259 /* atruler.1.css */, - C1EA65541680FE1400A21259 /* atruler.1.l */, - C1EA65551680FE1400A21259 /* atruler.1.p */, - C1EA65561680FE1400A21259 /* atruler.2.css */, - C1EA65571680FE1400A21259 /* atruler.2.l */, - C1EA65581680FE1400A21259 /* atruler.2.p */, - C1EA65591680FE1400A21259 /* atruler.c.0.css */, - C1EA655A1680FE1400A21259 /* atruler.c.0.l */, - C1EA655B1680FE1400A21259 /* atruler.c.0.p */, - C1EA655C1680FE1400A21259 /* atruler.c.1.css */, - C1EA655D1680FE1400A21259 /* atruler.c.1.l */, - C1EA655E1680FE1400A21259 /* atruler.c.1.p */, - C1EA655F1680FE1400A21259 /* atruler.c.2.css */, - C1EA65601680FE1400A21259 /* atruler.c.2.l */, - C1EA65611680FE1400A21259 /* atruler.c.2.p */, - C1EA65621680FE1400A21259 /* atruler.s.0.css */, - C1EA65631680FE1400A21259 /* atruler.s.0.l */, - C1EA65641680FE1400A21259 /* atruler.s.0.p */, - C1EA65651680FE1400A21259 /* atruler.s.1.css */, - C1EA65661680FE1400A21259 /* atruler.s.1.l */, - C1EA65671680FE1400A21259 /* atruler.s.1.p */, - C1EA65681680FE1400A21259 /* atruler.s.2.css */, - C1EA65691680FE1400A21259 /* atruler.s.2.l */, - C1EA656A1680FE1400A21259 /* atruler.s.2.p */, - C1EA656B1680FE1400A21259 /* webkit.keyfraymes.0.css */, - C1EA656C1680FE1400A21259 /* webkit.keyfraymes.0.l */, - C1EA656D1680FE1400A21259 /* webkit.keyfraymes.0.p */, - ); - path = test_atruler; - sourceTree = ""; - }; - C1EA656E1680FE1400A21259 /* test_atrules */ = { - isa = PBXGroup; - children = ( - C1EA656F1680FE1400A21259 /* atrules.0.css */, - C1EA65701680FE1400A21259 /* atrules.0.l */, - C1EA65711680FE1400A21259 /* atrules.0.p */, - C1EA65721680FE1400A21259 /* atrules.1.css */, - C1EA65731680FE1400A21259 /* atrules.1.l */, - C1EA65741680FE1400A21259 /* atrules.1.p */, - C1EA65751680FE1400A21259 /* atrules.2.css */, - C1EA65761680FE1400A21259 /* atrules.2.l */, - C1EA65771680FE1400A21259 /* atrules.2.p */, - C1EA65781680FE1400A21259 /* atrules.c.0.css */, - C1EA65791680FE1400A21259 /* atrules.c.0.l */, - C1EA657A1680FE1400A21259 /* atrules.c.0.p */, - C1EA657B1680FE1400A21259 /* atrules.c.1.css */, - C1EA657C1680FE1400A21259 /* atrules.c.1.l */, - C1EA657D1680FE1400A21259 /* atrules.c.1.p */, - C1EA657E1680FE1400A21259 /* atrules.s.0.css */, - C1EA657F1680FE1400A21259 /* atrules.s.0.l */, - C1EA65801680FE1400A21259 /* atrules.s.0.p */, - C1EA65811680FE1400A21259 /* atrules.s.1.css */, - C1EA65821680FE1400A21259 /* atrules.s.1.l */, - C1EA65831680FE1400A21259 /* atrules.s.1.p */, - ); - path = test_atrules; - sourceTree = ""; - }; - C1EA65841680FE1400A21259 /* test_attrib */ = { - isa = PBXGroup; - children = ( - C1EA65851680FE1400A21259 /* attrib.0.css */, - C1EA65861680FE1400A21259 /* attrib.0.l */, - C1EA65871680FE1400A21259 /* attrib.0.p */, - C1EA65881680FE1400A21259 /* attrib.1.css */, - C1EA65891680FE1400A21259 /* attrib.1.l */, - C1EA658A1680FE1400A21259 /* attrib.1.p */, - C1EA658B1680FE1400A21259 /* attrib.2.css */, - C1EA658C1680FE1400A21259 /* attrib.2.l */, - C1EA658D1680FE1400A21259 /* attrib.c.0.css */, - C1EA658E1680FE1400A21259 /* attrib.c.0.l */, - C1EA658F1680FE1400A21259 /* attrib.c.0.p */, - C1EA65901680FE1400A21259 /* attrib.c.1.css */, - C1EA65911680FE1400A21259 /* attrib.c.1.l */, - C1EA65921680FE1400A21259 /* attrib.c.1.p */, - C1EA65931680FE1400A21259 /* attrib.s.0.css */, - C1EA65941680FE1400A21259 /* attrib.s.0.l */, - C1EA65951680FE1400A21259 /* attrib.s.0.p */, - C1EA65961680FE1400A21259 /* attrib.s.1.css */, - C1EA65971680FE1400A21259 /* attrib.s.1.l */, - C1EA65981680FE1400A21259 /* attrib.s.1.p */, - ); - path = test_attrib; - sourceTree = ""; - }; - C1EA65991680FE1400A21259 /* test_attrselector */ = { - isa = PBXGroup; - children = ( - C1EA659A1680FE1400A21259 /* attrselector.0.css */, - C1EA659B1680FE1400A21259 /* attrselector.0.l */, - C1EA659C1680FE1400A21259 /* attrselector.0.p */, - C1EA659D1680FE1400A21259 /* attrselector.1.css */, - C1EA659E1680FE1400A21259 /* attrselector.1.l */, - C1EA659F1680FE1400A21259 /* attrselector.1.p */, - C1EA65A01680FE1400A21259 /* attrselector.2.css */, - C1EA65A11680FE1400A21259 /* attrselector.2.l */, - C1EA65A21680FE1400A21259 /* attrselector.2.p */, - C1EA65A31680FE1400A21259 /* attrselector.3.css */, - C1EA65A41680FE1400A21259 /* attrselector.3.l */, - C1EA65A51680FE1400A21259 /* attrselector.3.p */, - C1EA65A61680FE1400A21259 /* attrselector.4.css */, - C1EA65A71680FE1400A21259 /* attrselector.4.l */, - C1EA65A81680FE1400A21259 /* attrselector.4.p */, - ); - path = test_attrselector; - sourceTree = ""; - }; - C1EA65A91680FE1400A21259 /* test_block */ = { - isa = PBXGroup; - children = ( - C1EA65AA1680FE1400A21259 /* block.0.css */, - C1EA65AB1680FE1400A21259 /* block.0.l */, - C1EA65AC1680FE1400A21259 /* block.0.p */, - C1EA65AD1680FE1400A21259 /* block.1.css */, - C1EA65AE1680FE1400A21259 /* block.1.l */, - C1EA65AF1680FE1400A21259 /* block.1.p */, - C1EA65B01680FE1400A21259 /* block.2.css */, - C1EA65B11680FE1400A21259 /* block.2.l */, - C1EA65B21680FE1400A21259 /* block.2.p */, - C1EA65B31680FE1400A21259 /* block.3.css */, - C1EA65B41680FE1400A21259 /* block.3.l */, - C1EA65B51680FE1400A21259 /* block.3.p */, - C1EA65B61680FE1400A21259 /* block.4.css */, - C1EA65B71680FE1400A21259 /* block.4.l */, - C1EA65B81680FE1400A21259 /* block.4.p */, - C1EA65B91680FE1400A21259 /* block.c.0.css */, - C1EA65BA1680FE1400A21259 /* block.c.0.l */, - C1EA65BB1680FE1400A21259 /* block.c.0.p */, - C1EA65BC1680FE1400A21259 /* block.c.1.css */, - C1EA65BD1680FE1400A21259 /* block.c.1.l */, - C1EA65BE1680FE1400A21259 /* block.c.1.p */, - C1EA65BF1680FE1400A21259 /* block.c.2.css */, - C1EA65C01680FE1400A21259 /* block.c.2.l */, - C1EA65C11680FE1400A21259 /* block.c.2.p */, - C1EA65C21680FE1400A21259 /* block.c.3.css */, - C1EA65C31680FE1400A21259 /* block.c.3.l */, - C1EA65C41680FE1400A21259 /* block.c.3.p */, - C1EA65C51680FE1400A21259 /* block.c.4.css */, - C1EA65C61680FE1400A21259 /* block.c.4.l */, - C1EA65C71680FE1400A21259 /* block.c.4.p */, - C1EA65C81680FE1400A21259 /* block.s.0.css */, - C1EA65C91680FE1400A21259 /* block.s.0.l */, - C1EA65CA1680FE1400A21259 /* block.s.0.p */, - C1EA65CB1680FE1400A21259 /* block.s.1.css */, - C1EA65CC1680FE1400A21259 /* block.s.1.l */, - C1EA65CD1680FE1400A21259 /* block.s.1.p */, - C1EA65CE1680FE1400A21259 /* block.s.2.css */, - C1EA65CF1680FE1400A21259 /* block.s.2.l */, - C1EA65D01680FE1400A21259 /* block.s.2.p */, - C1EA65D11680FE1400A21259 /* block.s.3.css */, - C1EA65D21680FE1400A21259 /* block.s.3.l */, - C1EA65D31680FE1400A21259 /* block.s.3.p */, - C1EA65D41680FE1400A21259 /* block.s.4.css */, - C1EA65D51680FE1400A21259 /* block.s.4.l */, - C1EA65D61680FE1400A21259 /* block.s.4.p */, - ); - path = test_block; - sourceTree = ""; - }; - C1EA65D71680FE1400A21259 /* test_braces */ = { - isa = PBXGroup; - children = ( - C1EA65D81680FE1400A21259 /* braces.0.css */, - C1EA65D91680FE1400A21259 /* braces.0.l */, - C1EA65DA1680FE1400A21259 /* braces.0.p */, - C1EA65DB1680FE1400A21259 /* braces.1.css */, - C1EA65DC1680FE1400A21259 /* braces.1.l */, - C1EA65DD1680FE1400A21259 /* braces.1.p */, - C1EA65DE1680FE1400A21259 /* braces.2.css */, - C1EA65DF1680FE1400A21259 /* braces.2.l */, - C1EA65E01680FE1400A21259 /* braces.2.p */, - C1EA65E11680FE1400A21259 /* braces.3.css */, - C1EA65E21680FE1400A21259 /* braces.3.l */, - C1EA65E31680FE1400A21259 /* braces.3.p */, - C1EA65E41680FE1400A21259 /* braces.4.css */, - C1EA65E51680FE1400A21259 /* braces.4.l */, - C1EA65E61680FE1400A21259 /* braces.4.p */, - C1EA65E71680FE1400A21259 /* braces.5.css */, - C1EA65E81680FE1400A21259 /* braces.5.l */, - C1EA65E91680FE1400A21259 /* braces.5.p */, - C1EA65EA1680FE1400A21259 /* braces.6.css */, - C1EA65EB1680FE1400A21259 /* braces.6.l */, - C1EA65EC1680FE1400A21259 /* braces.6.p */, - C1EA65ED1680FE1400A21259 /* braces.7.css */, - C1EA65EE1680FE1400A21259 /* braces.7.l */, - C1EA65EF1680FE1400A21259 /* braces.7.p */, - C1EA65F01680FE1400A21259 /* braces.8.css */, - C1EA65F11680FE1400A21259 /* braces.8.l */, - C1EA65F21680FE1400A21259 /* braces.8.p */, - C1EA65F31680FE1400A21259 /* braces.c.0.css */, - C1EA65F41680FE1400A21259 /* braces.c.0.l */, - C1EA65F51680FE1400A21259 /* braces.c.0.p */, - C1EA65F61680FE1400A21259 /* braces.c.1.css */, - C1EA65F71680FE1400A21259 /* braces.c.1.l */, - C1EA65F81680FE1400A21259 /* braces.c.1.p */, - C1EA65F91680FE1400A21259 /* braces.c.2.css */, - C1EA65FA1680FE1400A21259 /* braces.c.2.l */, - C1EA65FB1680FE1400A21259 /* braces.c.2.p */, - C1EA65FC1680FE1400A21259 /* braces.c.3.css */, - C1EA65FD1680FE1400A21259 /* braces.c.3.l */, - C1EA65FE1680FE1400A21259 /* braces.c.3.p */, - C1EA65FF1680FE1400A21259 /* braces.c.4.css */, - C1EA66001680FE1400A21259 /* braces.c.4.l */, - C1EA66011680FE1400A21259 /* braces.c.4.p */, - C1EA66021680FE1400A21259 /* braces.c.5.css */, - C1EA66031680FE1400A21259 /* braces.c.5.l */, - C1EA66041680FE1400A21259 /* braces.c.5.p */, - C1EA66051680FE1400A21259 /* braces.c.6.css */, - C1EA66061680FE1400A21259 /* braces.c.6.l */, - C1EA66071680FE1400A21259 /* braces.c.6.p */, - C1EA66081680FE1400A21259 /* braces.c.7.css */, - C1EA66091680FE1400A21259 /* braces.c.7.l */, - C1EA660A1680FE1400A21259 /* braces.c.7.p */, - C1EA660B1680FE1400A21259 /* braces.s.0.css */, - C1EA660C1680FE1400A21259 /* braces.s.0.l */, - C1EA660D1680FE1400A21259 /* braces.s.0.p */, - C1EA660E1680FE1400A21259 /* braces.s.1.css */, - C1EA660F1680FE1400A21259 /* braces.s.1.l */, - C1EA66101680FE1400A21259 /* braces.s.1.p */, - C1EA66111680FE1400A21259 /* braces.s.2.css */, - C1EA66121680FE1400A21259 /* braces.s.2.l */, - C1EA66131680FE1400A21259 /* braces.s.2.p */, - C1EA66141680FE1400A21259 /* braces.s.3.css */, - C1EA66151680FE1400A21259 /* braces.s.3.l */, - C1EA66161680FE1400A21259 /* braces.s.3.p */, - C1EA66171680FE1400A21259 /* braces.s.4.css */, - C1EA66181680FE1400A21259 /* braces.s.4.l */, - C1EA66191680FE1400A21259 /* braces.s.4.p */, - C1EA661A1680FE1400A21259 /* braces.s.5.css */, - C1EA661B1680FE1400A21259 /* braces.s.5.l */, - C1EA661C1680FE1400A21259 /* braces.s.5.p */, - C1EA661D1680FE1400A21259 /* braces.s.6.css */, - C1EA661E1680FE1400A21259 /* braces.s.6.l */, - C1EA661F1680FE1400A21259 /* braces.s.6.p */, - C1EA66201680FE1400A21259 /* braces.s.7.css */, - C1EA66211680FE1400A21259 /* braces.s.7.l */, - C1EA66221680FE1400A21259 /* braces.s.7.p */, - ); - path = test_braces; - sourceTree = ""; - }; - C1EA66231680FE1400A21259 /* test_clazz */ = { - isa = PBXGroup; - children = ( - C1EA66241680FE1400A21259 /* clazz.0.css */, - C1EA66251680FE1400A21259 /* clazz.0.l */, - C1EA66261680FE1400A21259 /* clazz.0.p */, - ); - path = test_clazz; - sourceTree = ""; - }; - C1EA66271680FE1400A21259 /* test_combinator */ = { - isa = PBXGroup; - children = ( - C1EA66281680FE1400A21259 /* combinator.0.css */, - C1EA66291680FE1400A21259 /* combinator.0.l */, - C1EA662A1680FE1400A21259 /* combinator.0.p */, - C1EA662B1680FE1400A21259 /* combinator.1.css */, - C1EA662C1680FE1400A21259 /* combinator.1.l */, - C1EA662D1680FE1400A21259 /* combinator.1.p */, - C1EA662E1680FE1400A21259 /* combinator.2.css */, - C1EA662F1680FE1400A21259 /* combinator.2.l */, - C1EA66301680FE1400A21259 /* combinator.2.p */, - ); - path = test_combinator; - sourceTree = ""; - }; - C1EA66311680FE1400A21259 /* test_comment */ = { - isa = PBXGroup; - children = ( - C1EA66321680FE1400A21259 /* comment.0.css */, - C1EA66331680FE1400A21259 /* comment.0.l */, - C1EA66341680FE1400A21259 /* comment.0.p */, - ); - path = test_comment; - sourceTree = ""; - }; - C1EA66351680FE1400A21259 /* test_declaration */ = { - isa = PBXGroup; - children = ( - C1EA66361680FE1400A21259 /* declaration.0.css */, - C1EA66371680FE1400A21259 /* declaration.0.l */, - C1EA66381680FE1400A21259 /* declaration.0.p */, - C1EA66391680FE1400A21259 /* declaration.1.css */, - C1EA663A1680FE1400A21259 /* declaration.1.l */, - C1EA663B1680FE1400A21259 /* declaration.1.p */, - C1EA663C1680FE1400A21259 /* declaration.c.0.css */, - C1EA663D1680FE1400A21259 /* declaration.c.0.l */, - C1EA663E1680FE1400A21259 /* declaration.c.0.p */, - C1EA663F1680FE1400A21259 /* declaration.c.1.css */, - C1EA66401680FE1400A21259 /* declaration.c.1.l */, - C1EA66411680FE1400A21259 /* declaration.c.1.p */, - C1EA66421680FE1400A21259 /* declaration.c.2.css */, - C1EA66431680FE1400A21259 /* declaration.c.2.l */, - C1EA66441680FE1400A21259 /* declaration.c.2.p */, - C1EA66451680FE1400A21259 /* declaration.c.3.css */, - C1EA66461680FE1400A21259 /* declaration.c.3.l */, - C1EA66471680FE1400A21259 /* declaration.c.3.p */, - C1EA66481680FE1400A21259 /* declaration.s.0.css */, - C1EA66491680FE1400A21259 /* declaration.s.0.l */, - C1EA664A1680FE1400A21259 /* declaration.s.0.p */, - C1EA664B1680FE1400A21259 /* declaration.s.1.css */, - C1EA664C1680FE1400A21259 /* declaration.s.1.l */, - C1EA664D1680FE1400A21259 /* declaration.s.1.p */, - C1EA664E1680FE1400A21259 /* declaration.s.2.css */, - C1EA664F1680FE1400A21259 /* declaration.s.2.l */, - C1EA66501680FE1400A21259 /* declaration.s.2.p */, - C1EA66511680FE1400A21259 /* declaration.s.3.css */, - C1EA66521680FE1400A21259 /* declaration.s.3.l */, - C1EA66531680FE1400A21259 /* declaration.s.3.p */, - ); - path = test_declaration; - sourceTree = ""; - }; - C1EA66541680FE1400A21259 /* test_decldelim */ = { - isa = PBXGroup; - children = ( - C1EA66551680FE1400A21259 /* decldelim.0.css */, - C1EA66561680FE1400A21259 /* decldelim.0.l */, - C1EA66571680FE1400A21259 /* decldelim.0.p */, - ); - path = test_decldelim; - sourceTree = ""; - }; - C1EA66581680FE1400A21259 /* test_delim */ = { - isa = PBXGroup; - children = ( - C1EA66591680FE1400A21259 /* delim.0.css */, - C1EA665A1680FE1400A21259 /* delim.0.l */, - C1EA665B1680FE1400A21259 /* delim.0.p */, - ); - path = test_delim; - sourceTree = ""; - }; - C1EA665C1680FE1400A21259 /* test_dimension */ = { - isa = PBXGroup; - children = ( - C1EA665D1680FE1400A21259 /* dimension.0.css */, - C1EA665E1680FE1400A21259 /* dimension.0.l */, - C1EA665F1680FE1400A21259 /* dimension.0.p */, - C1EA66601680FE1400A21259 /* dimension.1.css */, - C1EA66611680FE1400A21259 /* dimension.1.l */, - C1EA66621680FE1400A21259 /* dimension.1.p */, - C1EA66631680FE1400A21259 /* dimension.2.css */, - C1EA66641680FE1400A21259 /* dimension.2.l */, - C1EA66651680FE1400A21259 /* dimension.2.p */, - ); - path = test_dimension; - sourceTree = ""; - }; - C1EA66661680FE1400A21259 /* test_filter */ = { - isa = PBXGroup; - children = ( - C1EA66671680FE1400A21259 /* filter.0.css */, - C1EA66681680FE1400A21259 /* filter.0.l */, - C1EA66691680FE1400A21259 /* filter.0.p */, - C1EA666A1680FE1400A21259 /* filter.1.css */, - C1EA666B1680FE1400A21259 /* filter.1.l */, - C1EA666C1680FE1400A21259 /* filter.1.p */, - C1EA666D1680FE1400A21259 /* filter.2.css */, - C1EA666E1680FE1400A21259 /* filter.2.l */, - C1EA666F1680FE1400A21259 /* filter.2.p */, - C1EA66701680FE1400A21259 /* filter.3.css */, - C1EA66711680FE1400A21259 /* filter.3.l */, - C1EA66721680FE1400A21259 /* filter.3.p */, - C1EA66731680FE1400A21259 /* filter.4.css */, - C1EA66741680FE1400A21259 /* filter.4.l */, - C1EA66751680FE1400A21259 /* filter.4.p */, - C1EA66761680FE1400A21259 /* filter.5.css */, - C1EA66771680FE1400A21259 /* filter.5.l */, - C1EA66781680FE1400A21259 /* filter.5.p */, - C1EA66791680FE1400A21259 /* filter.c.0.css */, - C1EA667A1680FE1400A21259 /* filter.c.0.l */, - C1EA667B1680FE1400A21259 /* filter.c.0.p */, - C1EA667C1680FE1400A21259 /* filter.c.1.css */, - C1EA667D1680FE1400A21259 /* filter.c.1.l */, - C1EA667E1680FE1400A21259 /* filter.c.1.p */, - C1EA667F1680FE1400A21259 /* filter.s.0.css */, - C1EA66801680FE1400A21259 /* filter.s.0.l */, - C1EA66811680FE1400A21259 /* filter.s.0.p */, - C1EA66821680FE1400A21259 /* filter.s.1.css */, - C1EA66831680FE1400A21259 /* filter.s.1.l */, - C1EA66841680FE1400A21259 /* filter.s.1.p */, - ); - path = test_filter; - sourceTree = ""; - }; - C1EA66851680FE1400A21259 /* test_functionExpression */ = { - isa = PBXGroup; - children = ( - C1EA66861680FE1400A21259 /* functionExpression.0.css */, - C1EA66871680FE1400A21259 /* functionExpression.0.l */, - C1EA66881680FE1400A21259 /* functionExpression.0.p */, - C1EA66891680FE1400A21259 /* functionExpression.1.css */, - C1EA668A1680FE1400A21259 /* functionExpression.1.l */, - C1EA668B1680FE1400A21259 /* functionExpression.1.p */, - C1EA668C1680FE1400A21259 /* functionExpression.2.css */, - C1EA668D1680FE1400A21259 /* functionExpression.2.l */, - C1EA668E1680FE1400A21259 /* functionExpression.2.p */, - C1EA668F1680FE1400A21259 /* functionExpression.3.css */, - C1EA66901680FE1400A21259 /* functionExpression.3.l */, - C1EA66911680FE1400A21259 /* functionExpression.3.p */, - C1EA66921680FE1400A21259 /* functionExpression.4.css */, - C1EA66931680FE1400A21259 /* functionExpression.4.l */, - C1EA66941680FE1400A21259 /* functionExpression.4.p */, - C1EA66951680FE1400A21259 /* functionExpression.5.css */, - C1EA66961680FE1400A21259 /* functionExpression.5.l */, - C1EA66971680FE1400A21259 /* functionExpression.5.p */, - C1EA66981680FE1400A21259 /* functionExpression.6.css */, - C1EA66991680FE1400A21259 /* functionExpression.6.l */, - C1EA669A1680FE1400A21259 /* functionExpression.6.p */, - C1EA669B1680FE1400A21259 /* functionExpression.7.css */, - C1EA669C1680FE1400A21259 /* functionExpression.7.l */, - C1EA669D1680FE1400A21259 /* functionExpression.7.p */, - ); - path = test_functionExpression; - sourceTree = ""; - }; - C1EA669E1680FE1400A21259 /* test_funktion */ = { - isa = PBXGroup; - children = ( - C1EA669F1680FE1400A21259 /* function.0.css */, - C1EA66A01680FE1400A21259 /* function.0.l */, - C1EA66A11680FE1400A21259 /* function.0.p */, - C1EA66A21680FE1400A21259 /* function.1.css */, - C1EA66A31680FE1400A21259 /* function.1.l */, - C1EA66A41680FE1400A21259 /* function.1.p */, - C1EA66A51680FE1400A21259 /* function.2.css */, - C1EA66A61680FE1400A21259 /* function.2.l */, - C1EA66A71680FE1400A21259 /* function.2.p */, - C1EA66A81680FE1400A21259 /* function.3.css */, - C1EA66A91680FE1400A21259 /* function.3.l */, - C1EA66AA1680FE1400A21259 /* function.3.p */, - C1EA66AB1680FE1400A21259 /* function.4.css */, - C1EA66AC1680FE1400A21259 /* function.4.l */, - C1EA66AD1680FE1400A21259 /* function.4.p */, - C1EA66AE1680FE1400A21259 /* function.5.css */, - C1EA66AF1680FE1400A21259 /* function.5.l */, - C1EA66B01680FE1400A21259 /* function.5.p */, - C1EA66B11680FE1400A21259 /* function.c.0.css */, - C1EA66B21680FE1400A21259 /* function.c.0.l */, - C1EA66B31680FE1400A21259 /* function.c.0.p */, - C1EA66B41680FE1400A21259 /* function.c.1.css */, - C1EA66B51680FE1400A21259 /* function.c.1.l */, - C1EA66B61680FE1400A21259 /* function.c.1.p */, - C1EA66B71680FE1400A21259 /* function.c.2.css */, - C1EA66B81680FE1400A21259 /* function.c.2.l */, - C1EA66B91680FE1400A21259 /* function.c.2.p */, - C1EA66BA1680FE1400A21259 /* function.c.3.css */, - C1EA66BB1680FE1400A21259 /* function.c.3.l */, - C1EA66BC1680FE1400A21259 /* function.c.3.p */, - C1EA66BD1680FE1400A21259 /* function.c.4.css */, - C1EA66BE1680FE1400A21259 /* function.c.4.l */, - C1EA66BF1680FE1400A21259 /* function.c.4.p */, - C1EA66C01680FE1400A21259 /* function.c.5.css */, - C1EA66C11680FE1400A21259 /* function.c.5.l */, - C1EA66C21680FE1400A21259 /* function.c.5.p */, - C1EA66C31680FE1400A21259 /* function.s.0.css */, - C1EA66C41680FE1400A21259 /* function.s.0.l */, - C1EA66C51680FE1400A21259 /* function.s.0.p */, - C1EA66C61680FE1400A21259 /* function.s.1.css */, - C1EA66C71680FE1400A21259 /* function.s.1.l */, - C1EA66C81680FE1400A21259 /* function.s.1.p */, - C1EA66C91680FE1400A21259 /* function.s.2.css */, - C1EA66CA1680FE1400A21259 /* function.s.2.l */, - C1EA66CB1680FE1400A21259 /* function.s.2.p */, - C1EA66CC1680FE1400A21259 /* function.s.3.css */, - C1EA66CD1680FE1400A21259 /* function.s.3.l */, - C1EA66CE1680FE1400A21259 /* function.s.3.p */, - C1EA66CF1680FE1400A21259 /* function.s.4.css */, - C1EA66D01680FE1400A21259 /* function.s.4.l */, - C1EA66D11680FE1400A21259 /* function.s.4.p */, - C1EA66D21680FE1400A21259 /* function.s.5.css */, - C1EA66D31680FE1400A21259 /* function.s.5.l */, - C1EA66D41680FE1400A21259 /* function.s.5.p */, - ); - path = test_funktion; - sourceTree = ""; - }; - C1EA66D51680FE1400A21259 /* test_ident */ = { - isa = PBXGroup; - children = ( - C1EA66D61680FE1400A21259 /* ident.0.css */, - C1EA66D71680FE1400A21259 /* ident.0.l */, - C1EA66D81680FE1400A21259 /* ident.0.p */, - C1EA66D91680FE1400A21259 /* ident.1.css */, - C1EA66DA1680FE1400A21259 /* ident.1.l */, - C1EA66DB1680FE1400A21259 /* ident.1.p */, - C1EA66DC1680FE1400A21259 /* ident.2.css */, - C1EA66DD1680FE1400A21259 /* ident.2.l */, - C1EA66DE1680FE1400A21259 /* ident.2.p */, - C1EA66DF1680FE1400A21259 /* ident.3.css */, - C1EA66E01680FE1400A21259 /* ident.3.l */, - C1EA66E11680FE1400A21259 /* ident.3.p */, - C1EA66E21680FE1400A21259 /* ident.4.css */, - C1EA66E31680FE1400A21259 /* ident.4.l */, - C1EA66E41680FE1400A21259 /* ident.4.p */, - C1EA66E51680FE1400A21259 /* ident.5.css */, - C1EA66E61680FE1400A21259 /* ident.5.l */, - C1EA66E71680FE1400A21259 /* ident.5.p */, - ); - path = test_ident; - sourceTree = ""; - }; - C1EA66E81680FE1400A21259 /* test_important */ = { - isa = PBXGroup; - children = ( - C1EA66E91680FE1400A21259 /* important.0.css */, - C1EA66EA1680FE1400A21259 /* important.0.l */, - C1EA66EB1680FE1400A21259 /* important.0.p */, - C1EA66EC1680FE1400A21259 /* important.c.0.css */, - C1EA66ED1680FE1400A21259 /* important.c.0.l */, - C1EA66EE1680FE1400A21259 /* important.c.0.p */, - C1EA66EF1680FE1400A21259 /* important.s.0.css */, - C1EA66F01680FE1400A21259 /* important.s.0.l */, - C1EA66F11680FE1400A21259 /* important.s.0.p */, - ); - path = test_important; - sourceTree = ""; - }; - C1EA66F21680FE1400A21259 /* test_nth */ = { - isa = PBXGroup; - children = ( - C1EA66F31680FE1400A21259 /* nth.0.css */, - C1EA66F41680FE1400A21259 /* nth.0.l */, - C1EA66F51680FE1400A21259 /* nth.0.p */, - C1EA66F61680FE1400A21259 /* nth.1.css */, - C1EA66F71680FE1400A21259 /* nth.1.l */, - C1EA66F81680FE1400A21259 /* nth.1.p */, - C1EA66F91680FE1400A21259 /* nth.2.css */, - C1EA66FA1680FE1400A21259 /* nth.2.l */, - C1EA66FB1680FE1400A21259 /* nth.2.p */, - C1EA66FC1680FE1400A21259 /* nth.3.css */, - C1EA66FD1680FE1400A21259 /* nth.3.l */, - C1EA66FE1680FE1400A21259 /* nth.3.p */, - C1EA66FF1680FE1400A21259 /* nth.4.css */, - C1EA67001680FE1400A21259 /* nth.4.l */, - C1EA67011680FE1400A21259 /* nth.4.p */, - ); - path = test_nth; - sourceTree = ""; - }; - C1EA67021680FE1400A21259 /* test_nthselector */ = { - isa = PBXGroup; - children = ( - C1EA67031680FE1400A21259 /* nthselector.0.css */, - C1EA67041680FE1400A21259 /* nthselector.0.l */, - C1EA67051680FE1400A21259 /* nthselector.0.p */, - C1EA67061680FE1400A21259 /* nthselector.1.css */, - C1EA67071680FE1400A21259 /* nthselector.1.l */, - C1EA67081680FE1400A21259 /* nthselector.1.p */, - C1EA67091680FE1400A21259 /* nthselector.c.0.css */, - C1EA670A1680FE1400A21259 /* nthselector.c.0.l */, - C1EA670B1680FE1400A21259 /* nthselector.c.0.p */, - C1EA670C1680FE1400A21259 /* nthselector.c.1.css */, - C1EA670D1680FE1400A21259 /* nthselector.c.1.l */, - C1EA670E1680FE1400A21259 /* nthselector.c.1.p */, - C1EA670F1680FE1400A21259 /* nthselector.s.0.css */, - C1EA67101680FE1400A21259 /* nthselector.s.0.l */, - C1EA67111680FE1400A21259 /* nthselector.s.0.p */, - C1EA67121680FE1400A21259 /* nthselector.s.1.css */, - C1EA67131680FE1400A21259 /* nthselector.s.1.l */, - C1EA67141680FE1400A21259 /* nthselector.s.1.p */, - ); - path = test_nthselector; - sourceTree = ""; - }; - C1EA67151680FE1400A21259 /* test_number */ = { - isa = PBXGroup; - children = ( - C1EA67161680FE1400A21259 /* number.0.css */, - C1EA67171680FE1400A21259 /* number.0.l */, - C1EA67181680FE1400A21259 /* number.0.p */, - C1EA67191680FE1400A21259 /* number.1.css */, - C1EA671A1680FE1400A21259 /* number.1.l */, - C1EA671B1680FE1400A21259 /* number.1.p */, - C1EA671C1680FE1400A21259 /* number.2.css */, - C1EA671D1680FE1400A21259 /* number.2.l */, - C1EA671E1680FE1400A21259 /* number.2.p */, - C1EA671F1680FE1400A21259 /* number.3.css */, - C1EA67201680FE1400A21259 /* number.3.l */, - C1EA67211680FE1400A21259 /* number.4.css */, - C1EA67221680FE1400A21259 /* number.4.l */, - C1EA67231680FE1400A21259 /* number.5.css */, - C1EA67241680FE1400A21259 /* number.5.l */, - C1EA67251680FE1400A21259 /* number.6.css */, - C1EA67261680FE1400A21259 /* number.6.l */, - C1EA67271680FE1400A21259 /* number.7.css */, - C1EA67281680FE1400A21259 /* number.7.l */, - ); - path = test_number; - sourceTree = ""; - }; - C1EA67291680FE1400A21259 /* test_operator */ = { - isa = PBXGroup; - children = ( - C1EA672A1680FE1400A21259 /* operator.0.css */, - C1EA672B1680FE1400A21259 /* operator.0.l */, - C1EA672C1680FE1400A21259 /* operator.0.p */, - C1EA672D1680FE1400A21259 /* operator.1.css */, - C1EA672E1680FE1400A21259 /* operator.1.l */, - C1EA672F1680FE1400A21259 /* operator.1.p */, - C1EA67301680FE1400A21259 /* operator.2.css */, - C1EA67311680FE1400A21259 /* operator.2.l */, - C1EA67321680FE1400A21259 /* operator.2.p */, - C1EA67331680FE1400A21259 /* operator.3.css */, - C1EA67341680FE1400A21259 /* operator.3.l */, - C1EA67351680FE1400A21259 /* operator.3.p */, - ); - path = test_operator; - sourceTree = ""; - }; - C1EA67361680FE1400A21259 /* test_percentage */ = { - isa = PBXGroup; - children = ( - C1EA67371680FE1400A21259 /* percentage.0.css */, - C1EA67381680FE1400A21259 /* percentage.0.l */, - C1EA67391680FE1400A21259 /* percentage.0.p */, - C1EA673A1680FE1400A21259 /* percentage.1.css */, - C1EA673B1680FE1400A21259 /* percentage.1.l */, - C1EA673C1680FE1400A21259 /* percentage.1.p */, - C1EA673D1680FE1400A21259 /* percentage.2.css */, - C1EA673E1680FE1400A21259 /* percentage.2.l */, - C1EA673F1680FE1400A21259 /* percentage.2.p */, - ); - path = test_percentage; - sourceTree = ""; - }; - C1EA67401680FE1400A21259 /* test_property */ = { - isa = PBXGroup; - children = ( - C1EA67411680FE1400A21259 /* property.0.css */, - C1EA67421680FE1400A21259 /* property.0.l */, - C1EA67431680FE1400A21259 /* property.0.p */, - C1EA67441680FE1400A21259 /* property.1.css */, - C1EA67451680FE1400A21259 /* property.1.l */, - C1EA67461680FE1400A21259 /* property.1.p */, - ); - path = test_property; - sourceTree = ""; - }; - C1EA67471680FE1400A21259 /* test_pseudoc */ = { - isa = PBXGroup; - children = ( - C1EA67481680FE1400A21259 /* pseudoc.0.css */, - C1EA67491680FE1400A21259 /* pseudoc.0.l */, - C1EA674A1680FE1400A21259 /* pseudoc.0.p */, - C1EA674B1680FE1400A21259 /* pseudoc.1.css */, - C1EA674C1680FE1400A21259 /* pseudoc.1.l */, - C1EA674D1680FE1400A21259 /* pseudoc.1.p */, - ); - path = test_pseudoc; - sourceTree = ""; - }; - C1EA674E1680FE1400A21259 /* test_pseudoe */ = { - isa = PBXGroup; - children = ( - C1EA674F1680FE1400A21259 /* pseudoe.0.css */, - C1EA67501680FE1400A21259 /* pseudoe.0.l */, - C1EA67511680FE1400A21259 /* pseudoe.0.p */, - C1EA67521680FE1400A21259 /* pseudoe.1.css */, - C1EA67531680FE1400A21259 /* pseudoe.1.l */, - C1EA67541680FE1400A21259 /* pseudoe.1.p */, - ); - path = test_pseudoe; - sourceTree = ""; - }; - C1EA67551680FE1400A21259 /* test_ruleset */ = { - isa = PBXGroup; - children = ( - C1EA67561680FE1400A21259 /* ruleset.0.css */, - C1EA67571680FE1400A21259 /* ruleset.0.l */, - C1EA67581680FE1400A21259 /* ruleset.0.p */, - C1EA67591680FE1400A21259 /* ruleset.1.css */, - C1EA675A1680FE1400A21259 /* ruleset.1.l */, - C1EA675B1680FE1400A21259 /* ruleset.1.p */, - C1EA675C1680FE1400A21259 /* ruleset.2.css */, - C1EA675D1680FE1400A21259 /* ruleset.2.l */, - C1EA675E1680FE1400A21259 /* ruleset.2.p */, - C1EA675F1680FE1400A21259 /* ruleset.3.css */, - C1EA67601680FE1400A21259 /* ruleset.3.l */, - C1EA67611680FE1400A21259 /* ruleset.3.p */, - C1EA67621680FE1400A21259 /* ruleset.4.css */, - C1EA67631680FE1400A21259 /* ruleset.4.l */, - C1EA67641680FE1400A21259 /* ruleset.4.p */, - C1EA67651680FE1400A21259 /* ruleset.5.css */, - C1EA67661680FE1400A21259 /* ruleset.5.l */, - C1EA67671680FE1400A21259 /* ruleset.5.p */, - C1EA67681680FE1400A21259 /* ruleset.c.0.css */, - C1EA67691680FE1400A21259 /* ruleset.c.0.l */, - C1EA676A1680FE1400A21259 /* ruleset.c.0.p */, - C1EA676B1680FE1400A21259 /* ruleset.c.1.css */, - C1EA676C1680FE1400A21259 /* ruleset.c.1.l */, - C1EA676D1680FE1400A21259 /* ruleset.c.1.p */, - C1EA676E1680FE1400A21259 /* ruleset.c.2.css */, - C1EA676F1680FE1400A21259 /* ruleset.c.2.l */, - C1EA67701680FE1400A21259 /* ruleset.c.2.p */, - C1EA67711680FE1400A21259 /* ruleset.c.3.css */, - C1EA67721680FE1400A21259 /* ruleset.c.3.l */, - C1EA67731680FE1400A21259 /* ruleset.c.3.p */, - C1EA67741680FE1400A21259 /* ruleset.s.0.css */, - C1EA67751680FE1400A21259 /* ruleset.s.0.l */, - C1EA67761680FE1400A21259 /* ruleset.s.0.p */, - C1EA67771680FE1400A21259 /* ruleset.s.1.css */, - C1EA67781680FE1400A21259 /* ruleset.s.1.l */, - C1EA67791680FE1400A21259 /* ruleset.s.1.p */, - C1EA677A1680FE1400A21259 /* ruleset.s.2.css */, - C1EA677B1680FE1400A21259 /* ruleset.s.2.l */, - C1EA677C1680FE1400A21259 /* ruleset.s.2.p */, - C1EA677D1680FE1400A21259 /* ruleset.s.3.css */, - C1EA677E1680FE1400A21259 /* ruleset.s.3.l */, - C1EA677F1680FE1400A21259 /* ruleset.s.3.p */, - C1EA67801680FE1400A21259 /* ruleset.s.4.css */, - C1EA67811680FE1400A21259 /* ruleset.s.4.l */, - C1EA67821680FE1400A21259 /* ruleset.s.4.p */, - C1EA67831680FE1400A21259 /* ruleset.s.5.css */, - C1EA67841680FE1400A21259 /* ruleset.s.5.l */, - C1EA67851680FE1400A21259 /* ruleset.s.5.p */, - C1EA67861680FE1400A21259 /* value.color.ident.0.css */, - C1EA67871680FE1400A21259 /* value.color.ident.0.l */, - C1EA67881680FE1400A21259 /* value.color.ident.1.css */, - C1EA67891680FE1400A21259 /* value.color.ident.1.l */, - ); - path = test_ruleset; - sourceTree = ""; - }; - C1EA678A1680FE1400A21259 /* test_selector */ = { - isa = PBXGroup; - children = ( - C1EA678B1680FE1400A21259 /* selector.0.css */, - C1EA678C1680FE1400A21259 /* selector.0.l */, - C1EA678D1680FE1400A21259 /* selector.0.p */, - C1EA678E1680FE1400A21259 /* selector.1.css */, - C1EA678F1680FE1400A21259 /* selector.1.l */, - C1EA67901680FE1400A21259 /* selector.1.p */, - ); - path = test_selector; - sourceTree = ""; - }; - C1EA67911680FE1400A21259 /* test_shash */ = { - isa = PBXGroup; - children = ( - C1EA67921680FE1400A21259 /* shash.0.css */, - C1EA67931680FE1400A21259 /* shash.0.l */, - C1EA67941680FE1400A21259 /* shash.0.p */, - C1EA67951680FE1400A21259 /* shash.1.css */, - C1EA67961680FE1400A21259 /* shash.1.l */, - C1EA67971680FE1400A21259 /* shash.1.p */, - ); - path = test_shash; - sourceTree = ""; - }; - C1EA67981680FE1400A21259 /* test_simpleselector */ = { - isa = PBXGroup; - children = ( - C1EA67991680FE1400A21259 /* simpleselector.0.css */, - C1EA679A1680FE1400A21259 /* simpleselector.0.l */, - C1EA679B1680FE1400A21259 /* simpleselector.0.p */, - C1EA679C1680FE1400A21259 /* simpleselector.1.css */, - C1EA679D1680FE1400A21259 /* simpleselector.1.l */, - C1EA679E1680FE1400A21259 /* simpleselector.1.p */, - C1EA679F1680FE1400A21259 /* simpleselector.10.css */, - C1EA67A01680FE1400A21259 /* simpleselector.10.l */, - C1EA67A11680FE1400A21259 /* simpleselector.10.p */, - C1EA67A21680FE1400A21259 /* simpleselector.11.css */, - C1EA67A31680FE1400A21259 /* simpleselector.11.l */, - C1EA67A41680FE1400A21259 /* simpleselector.11.p */, - C1EA67A51680FE1400A21259 /* simpleselector.12.css */, - C1EA67A61680FE1400A21259 /* simpleselector.12.l */, - C1EA67A71680FE1400A21259 /* simpleselector.12.p */, - C1EA67A81680FE1400A21259 /* simpleselector.13.css */, - C1EA67A91680FE1400A21259 /* simpleselector.13.l */, - C1EA67AA1680FE1400A21259 /* simpleselector.13.p */, - C1EA67AB1680FE1400A21259 /* simpleselector.2.css */, - C1EA67AC1680FE1400A21259 /* simpleselector.2.l */, - C1EA67AD1680FE1400A21259 /* simpleselector.2.p */, - C1EA67AE1680FE1400A21259 /* simpleselector.3.css */, - C1EA67AF1680FE1400A21259 /* simpleselector.3.l */, - C1EA67B01680FE1400A21259 /* simpleselector.3.p */, - C1EA67B11680FE1400A21259 /* simpleselector.4.css */, - C1EA67B21680FE1400A21259 /* simpleselector.4.l */, - C1EA67B31680FE1400A21259 /* simpleselector.4.p */, - C1EA67B41680FE1400A21259 /* simpleselector.5.css */, - C1EA67B51680FE1400A21259 /* simpleselector.5.l */, - C1EA67B61680FE1400A21259 /* simpleselector.5.p */, - C1EA67B71680FE1400A21259 /* simpleselector.6.css */, - C1EA67B81680FE1400A21259 /* simpleselector.6.l */, - C1EA67B91680FE1400A21259 /* simpleselector.6.p */, - C1EA67BA1680FE1400A21259 /* simpleselector.7.css */, - C1EA67BB1680FE1400A21259 /* simpleselector.7.l */, - C1EA67BC1680FE1400A21259 /* simpleselector.7.p */, - C1EA67BD1680FE1400A21259 /* simpleselector.8.css */, - C1EA67BE1680FE1400A21259 /* simpleselector.8.l */, - C1EA67BF1680FE1400A21259 /* simpleselector.8.p */, - C1EA67C01680FE1400A21259 /* simpleselector.9.css */, - C1EA67C11680FE1400A21259 /* simpleselector.9.l */, - C1EA67C21680FE1400A21259 /* simpleselector.9.p */, - C1EA67C31680FE1400A21259 /* simpleselector.c.0.css */, - C1EA67C41680FE1400A21259 /* simpleselector.c.0.l */, - C1EA67C51680FE1400A21259 /* simpleselector.c.0.p */, - C1EA67C61680FE1400A21259 /* simpleselector.c.1.css */, - C1EA67C71680FE1400A21259 /* simpleselector.c.1.l */, - C1EA67C81680FE1400A21259 /* simpleselector.c.1.p */, - C1EA67C91680FE1400A21259 /* simpleselector.c.2.css */, - C1EA67CA1680FE1400A21259 /* simpleselector.c.2.l */, - C1EA67CB1680FE1400A21259 /* simpleselector.c.2.p */, - C1EA67CC1680FE1400A21259 /* simpleselector.c.3.css */, - C1EA67CD1680FE1400A21259 /* simpleselector.c.3.l */, - C1EA67CE1680FE1400A21259 /* simpleselector.c.3.p */, - C1EA67CF1680FE1400A21259 /* simpleselector.c.4.css */, - C1EA67D01680FE1400A21259 /* simpleselector.s.0.css */, - C1EA67D11680FE1400A21259 /* simpleselector.s.0.l */, - C1EA67D21680FE1400A21259 /* simpleselector.s.0.p */, - C1EA67D31680FE1400A21259 /* simpleselector.s.1.css */, - C1EA67D41680FE1400A21259 /* simpleselector.s.1.l */, - C1EA67D51680FE1400A21259 /* simpleselector.s.1.p */, - C1EA67D61680FE1400A21259 /* simpleselector.s.2.css */, - C1EA67D71680FE1400A21259 /* simpleselector.s.2.l */, - C1EA67D81680FE1400A21259 /* simpleselector.s.2.p */, - C1EA67D91680FE1400A21259 /* simpleselector.s.3.css */, - C1EA67DA1680FE1400A21259 /* simpleselector.s.3.l */, - C1EA67DB1680FE1400A21259 /* simpleselector.s.3.p */, - C1EA67DC1680FE1400A21259 /* simpleselector.s.4.css */, - C1EA67DD1680FE1400A21259 /* simpleselector.s.4.l */, - C1EA67DE1680FE1400A21259 /* simpleselector.s.4.p */, - ); - path = test_simpleselector; - sourceTree = ""; - }; - C1EA67DF1680FE1400A21259 /* test_string */ = { - isa = PBXGroup; - children = ( - C1EA67E01680FE1400A21259 /* string.0.css */, - C1EA67E11680FE1400A21259 /* string.0.l */, - C1EA67E21680FE1400A21259 /* string.0.p */, - C1EA67E31680FE1400A21259 /* string.1.css */, - C1EA67E41680FE1400A21259 /* string.1.l */, - C1EA67E51680FE1400A21259 /* string.1.p */, - C1EA67E61680FE1400A21259 /* string.2.css */, - C1EA67E71680FE1400A21259 /* string.2.l */, - C1EA67E81680FE1400A21259 /* string.2.p */, - C1EA67E91680FE1400A21259 /* string.3.css */, - C1EA67EA1680FE1400A21259 /* string.3.l */, - C1EA67EB1680FE1400A21259 /* string.3.p */, - ); - path = test_string; - sourceTree = ""; - }; - C1EA67EC1680FE1400A21259 /* test_stylesheet */ = { - isa = PBXGroup; - children = ( - C1EA67ED1680FE1400A21259 /* compress.attrib.string.test1.cl */, - C1EA67EE1680FE1400A21259 /* compress.attrib.string.test1.css */, - C1EA67EF1680FE1400A21259 /* compress.attrib.string.test2.cl */, - C1EA67F01680FE1400A21259 /* compress.attrib.string.test2.css */, - C1EA67F11680FE1400A21259 /* compress.colormark.test1.cl */, - C1EA67F21680FE1400A21259 /* compress.colormark.test1.css */, - C1EA67F31680FE1400A21259 /* compress.css21.part15.6.test1.cl */, - C1EA67F41680FE1400A21259 /* compress.css21.part15.6.test1.css */, - C1EA67F51680FE1400A21259 /* compress.css21.part4.3.2.test1.cl */, - C1EA67F61680FE1400A21259 /* compress.css21.part4.3.2.test1.css */, - C1EA67F71680FE1400A21259 /* compress.css21.part4.3.2.test10.cl */, - C1EA67F81680FE1400A21259 /* compress.css21.part4.3.2.test10.css */, - C1EA67F91680FE1400A21259 /* compress.css21.part4.3.2.test2.cl */, - C1EA67FA1680FE1400A21259 /* compress.css21.part4.3.2.test2.css */, - C1EA67FB1680FE1400A21259 /* compress.css21.part4.3.2.test3.cl */, - C1EA67FC1680FE1400A21259 /* compress.css21.part4.3.2.test3.css */, - C1EA67FD1680FE1400A21259 /* compress.css21.part4.3.2.test4.cl */, - C1EA67FE1680FE1400A21259 /* compress.css21.part4.3.2.test4.css */, - C1EA67FF1680FE1400A21259 /* compress.css21.part4.3.2.test5.cl */, - C1EA68001680FE1400A21259 /* compress.css21.part4.3.2.test5.css */, - C1EA68011680FE1400A21259 /* compress.css21.part4.3.2.test6.cl */, - C1EA68021680FE1400A21259 /* compress.css21.part4.3.2.test6.css */, - C1EA68031680FE1400A21259 /* compress.css21.part4.3.2.test7.cl */, - C1EA68041680FE1400A21259 /* compress.css21.part4.3.2.test7.css */, - C1EA68051680FE1400A21259 /* compress.css21.part4.3.2.test8.cl */, - C1EA68061680FE1400A21259 /* compress.css21.part4.3.2.test8.css */, - C1EA68071680FE1400A21259 /* compress.css21.part4.3.2.test9.cl */, - C1EA68081680FE1400A21259 /* compress.css21.part4.3.2.test9.css */, - C1EA68091680FE1400A21259 /* compress.css21.part4.3.4.test1.cl */, - C1EA680A1680FE1400A21259 /* compress.css21.part4.3.4.test1.css */, - C1EA680B1680FE1400A21259 /* compress.css21.part4.3.4.test2.cl */, - C1EA680C1680FE1400A21259 /* compress.css21.part4.3.4.test2.css */, - C1EA680D1680FE1400A21259 /* compress.css21.part4.3.4.test3.cl */, - C1EA680E1680FE1400A21259 /* compress.css21.part4.3.4.test3.css */, - C1EA680F1680FE1400A21259 /* compress.css21.part4.3.4.test4.cl */, - C1EA68101680FE1400A21259 /* compress.css21.part4.3.4.test4.css */, - C1EA68111680FE1400A21259 /* compress.css21.part4.3.4.test5.cl */, - C1EA68121680FE1400A21259 /* compress.css21.part4.3.4.test5.css */, - C1EA68131680FE1400A21259 /* compress.css21.part4.3.4.test6.cl */, - C1EA68141680FE1400A21259 /* compress.css21.part4.3.4.test6.css */, - C1EA68151680FE1400A21259 /* compress.css21.part4.3.4.test7.cl */, - C1EA68161680FE1400A21259 /* compress.css21.part4.3.4.test7.css */, - C1EA68171680FE1400A21259 /* compress.css21.part4.3.4.test8.cl */, - C1EA68181680FE1400A21259 /* compress.css21.part4.3.4.test8.css */, - C1EA68191680FE1400A21259 /* compress.css21.part4.3.4.test9.cl */, - C1EA681A1680FE1400A21259 /* compress.css21.part4.3.4.test9.css */, - C1EA681B1680FE1400A21259 /* compress.css21.part4.3.6.test1.cl */, - C1EA681C1680FE1400A21259 /* compress.css21.part4.3.6.test1.css */, - C1EA681D1680FE1400A21259 /* compress.css21.part4.3.6.test2.cl */, - C1EA681E1680FE1400A21259 /* compress.css21.part4.3.6.test2.css */, - C1EA681F1680FE1400A21259 /* compress.css21.part4.3.6.test3.cl */, - C1EA68201680FE1400A21259 /* compress.css21.part4.3.6.test3.css */, - C1EA68211680FE1400A21259 /* compress.css21.part4.3.6.test4.cl */, - C1EA68221680FE1400A21259 /* compress.css21.part4.3.6.test4.css */, - C1EA68231680FE1400A21259 /* compress.css21.part4.3.6.test5.cl */, - C1EA68241680FE1400A21259 /* compress.css21.part4.3.6.test5.css */, - C1EA68251680FE1400A21259 /* compress.css21.part4.3.6.test6.cl */, - C1EA68261680FE1400A21259 /* compress.css21.part4.3.6.test6.css */, - C1EA68271680FE1400A21259 /* compress.css21.part4.3.6.test7.cl */, - C1EA68281680FE1400A21259 /* compress.css21.part4.3.6.test7.css */, - C1EA68291680FE1400A21259 /* compress.css21.part4.3.6.test8.cl */, - C1EA682A1680FE1400A21259 /* compress.css21.part4.3.6.test8.css */, - C1EA682B1680FE1400A21259 /* compress.css21.part4.3.7.test1.cl */, - C1EA682C1680FE1400A21259 /* compress.css21.part4.3.7.test1.css */, - C1EA682D1680FE1400A21259 /* compress.css21.part4.3.7.test2.cl */, - C1EA682E1680FE1400A21259 /* compress.css21.part4.3.7.test2.css */, - C1EA682F1680FE1400A21259 /* compress.css21.part4.3.7.test3.cl */, - C1EA68301680FE1400A21259 /* compress.css21.part4.3.7.test3.css */, - C1EA68311680FE1400A21259 /* compress.css21.part4.3.7.test4.cl */, - C1EA68321680FE1400A21259 /* compress.css21.part4.3.7.test4.css */, - C1EA68331680FE1400A21259 /* compress.css21.part4.3.7.test5.cl */, - C1EA68341680FE1400A21259 /* compress.css21.part4.3.7.test5.css */, - C1EA68351680FE1400A21259 /* compress.css21.part4.3.7.test6.cl */, - C1EA68361680FE1400A21259 /* compress.css21.part4.3.7.test6.css */, - C1EA68371680FE1400A21259 /* compress.css21.part4.4.test1.cl */, - C1EA68381680FE1400A21259 /* compress.css21.part4.4.test1.css */, - C1EA68391680FE1400A21259 /* compress.css21.part4.4.test2.cl */, - C1EA683A1680FE1400A21259 /* compress.css21.part4.4.test2.css */, - C1EA683B1680FE1400A21259 /* compress.css21.part4.4.test3.cl */, - C1EA683C1680FE1400A21259 /* compress.css21.part4.4.test3.css */, - C1EA683D1680FE1400A21259 /* compress.css21.part6.3.test1.cl */, - C1EA683E1680FE1400A21259 /* compress.css21.part6.3.test1.css */, - C1EA683F1680FE1400A21259 /* compress.css21.part6.3.test2.cl */, - C1EA68401680FE1400A21259 /* compress.css21.part6.3.test2.css */, - C1EA68411680FE1400A21259 /* compress.css21.part6.3.test3.cl */, - C1EA68421680FE1400A21259 /* compress.css21.part6.3.test3.css */, - C1EA68431680FE1400A21259 /* compress.css21.part6.3.test4.cl */, - C1EA68441680FE1400A21259 /* compress.css21.part6.3.test4.css */, - C1EA68451680FE1400A21259 /* compress.css21.part6.3.test5.cl */, - C1EA68461680FE1400A21259 /* compress.css21.part6.3.test5.css */, - C1EA68471680FE1400A21259 /* compress.css21.part6.3.test6.cl */, - C1EA68481680FE1400A21259 /* compress.css21.part6.3.test6.css */, - C1EA68491680FE1400A21259 /* compress.css21.part6.4.2.test1.cl */, - C1EA684A1680FE1400A21259 /* compress.css21.part6.4.2.test1.css */, - C1EA684B1680FE1400A21259 /* compress.css21.part6.4.2.test2.cl */, - C1EA684C1680FE1400A21259 /* compress.css21.part6.4.2.test2.css */, - C1EA684D1680FE1400A21259 /* compress.css21.part6.4.2.test3.cl */, - C1EA684E1680FE1400A21259 /* compress.css21.part6.4.2.test3.css */, - C1EA684F1680FE1400A21259 /* compress.css21.part7.test1.cl */, - C1EA68501680FE1400A21259 /* compress.css21.part7.test1.css */, - C1EA68511680FE1400A21259 /* compress.css21.part7.test2.cl */, - C1EA68521680FE1400A21259 /* compress.css21.part7.test2.css */, - C1EA68531680FE1400A21259 /* compress.css3.selectors.part2.test1.c.cl */, - C1EA68541680FE1400A21259 /* compress.css3.selectors.part2.test1.c.css */, - C1EA68551680FE1400A21259 /* compress.css3.selectors.part2.test1.cl */, - C1EA68561680FE1400A21259 /* compress.css3.selectors.part2.test1.css */, - C1EA68571680FE1400A21259 /* compress.css3.selectors.part2.test10.c.cl */, - C1EA68581680FE1400A21259 /* compress.css3.selectors.part2.test10.c.css */, - C1EA68591680FE1400A21259 /* compress.css3.selectors.part2.test10.cl */, - C1EA685A1680FE1400A21259 /* compress.css3.selectors.part2.test10.css */, - C1EA685B1680FE1400A21259 /* compress.css3.selectors.part2.test11.c.cl */, - C1EA685C1680FE1400A21259 /* compress.css3.selectors.part2.test11.c.css */, - C1EA685D1680FE1400A21259 /* compress.css3.selectors.part2.test11.cl */, - C1EA685E1680FE1400A21259 /* compress.css3.selectors.part2.test11.css */, - C1EA685F1680FE1400A21259 /* compress.css3.selectors.part2.test12.c.cl */, - C1EA68601680FE1400A21259 /* compress.css3.selectors.part2.test12.c.css */, - C1EA68611680FE1400A21259 /* compress.css3.selectors.part2.test12.cl */, - C1EA68621680FE1400A21259 /* compress.css3.selectors.part2.test12.css */, - C1EA68631680FE1400A21259 /* compress.css3.selectors.part2.test13.c.cl */, - C1EA68641680FE1400A21259 /* compress.css3.selectors.part2.test13.c.css */, - C1EA68651680FE1400A21259 /* compress.css3.selectors.part2.test13.cl */, - C1EA68661680FE1400A21259 /* compress.css3.selectors.part2.test13.css */, - C1EA68671680FE1400A21259 /* compress.css3.selectors.part2.test14.c.cl */, - C1EA68681680FE1400A21259 /* compress.css3.selectors.part2.test14.c.css */, - C1EA68691680FE1400A21259 /* compress.css3.selectors.part2.test14.cl */, - C1EA686A1680FE1400A21259 /* compress.css3.selectors.part2.test14.css */, - C1EA686B1680FE1400A21259 /* compress.css3.selectors.part2.test15.c.cl */, - C1EA686C1680FE1400A21259 /* compress.css3.selectors.part2.test15.c.css */, - C1EA686D1680FE1400A21259 /* compress.css3.selectors.part2.test15.cl */, - C1EA686E1680FE1400A21259 /* compress.css3.selectors.part2.test15.css */, - C1EA686F1680FE1400A21259 /* compress.css3.selectors.part2.test16.c.cl */, - C1EA68701680FE1400A21259 /* compress.css3.selectors.part2.test16.c.css */, - C1EA68711680FE1400A21259 /* compress.css3.selectors.part2.test16.cl */, - C1EA68721680FE1400A21259 /* compress.css3.selectors.part2.test16.css */, - C1EA68731680FE1400A21259 /* compress.css3.selectors.part2.test17.c.cl */, - C1EA68741680FE1400A21259 /* compress.css3.selectors.part2.test17.c.css */, - C1EA68751680FE1400A21259 /* compress.css3.selectors.part2.test17.cl */, - C1EA68761680FE1400A21259 /* compress.css3.selectors.part2.test17.css */, - C1EA68771680FE1400A21259 /* compress.css3.selectors.part2.test18.c.cl */, - C1EA68781680FE1400A21259 /* compress.css3.selectors.part2.test18.c.css */, - C1EA68791680FE1400A21259 /* compress.css3.selectors.part2.test18.cl */, - C1EA687A1680FE1400A21259 /* compress.css3.selectors.part2.test18.css */, - C1EA687B1680FE1400A21259 /* compress.css3.selectors.part2.test19.c.cl */, - C1EA687C1680FE1400A21259 /* compress.css3.selectors.part2.test19.c.css */, - C1EA687D1680FE1400A21259 /* compress.css3.selectors.part2.test19.cl */, - C1EA687E1680FE1400A21259 /* compress.css3.selectors.part2.test19.css */, - C1EA687F1680FE1400A21259 /* compress.css3.selectors.part2.test2.c.cl */, - C1EA68801680FE1400A21259 /* compress.css3.selectors.part2.test2.c.css */, - C1EA68811680FE1400A21259 /* compress.css3.selectors.part2.test2.cl */, - C1EA68821680FE1400A21259 /* compress.css3.selectors.part2.test2.css */, - C1EA68831680FE1400A21259 /* compress.css3.selectors.part2.test20.c.cl */, - C1EA68841680FE1400A21259 /* compress.css3.selectors.part2.test20.c.css */, - C1EA68851680FE1400A21259 /* compress.css3.selectors.part2.test20.cl */, - C1EA68861680FE1400A21259 /* compress.css3.selectors.part2.test20.css */, - C1EA68871680FE1400A21259 /* compress.css3.selectors.part2.test21.c.cl */, - C1EA68881680FE1400A21259 /* compress.css3.selectors.part2.test21.c.css */, - C1EA68891680FE1400A21259 /* compress.css3.selectors.part2.test21.cl */, - C1EA688A1680FE1400A21259 /* compress.css3.selectors.part2.test21.css */, - C1EA688B1680FE1400A21259 /* compress.css3.selectors.part2.test22.c.cl */, - C1EA688C1680FE1400A21259 /* compress.css3.selectors.part2.test22.c.css */, - C1EA688D1680FE1400A21259 /* compress.css3.selectors.part2.test22.cl */, - C1EA688E1680FE1400A21259 /* compress.css3.selectors.part2.test22.css */, - C1EA688F1680FE1400A21259 /* compress.css3.selectors.part2.test23.c.cl */, - C1EA68901680FE1400A21259 /* compress.css3.selectors.part2.test23.c.css */, - C1EA68911680FE1400A21259 /* compress.css3.selectors.part2.test23.cl */, - C1EA68921680FE1400A21259 /* compress.css3.selectors.part2.test23.css */, - C1EA68931680FE1400A21259 /* compress.css3.selectors.part2.test24.c.cl */, - C1EA68941680FE1400A21259 /* compress.css3.selectors.part2.test24.c.css */, - C1EA68951680FE1400A21259 /* compress.css3.selectors.part2.test24.cl */, - C1EA68961680FE1400A21259 /* compress.css3.selectors.part2.test24.css */, - C1EA68971680FE1400A21259 /* compress.css3.selectors.part2.test25.c.cl */, - C1EA68981680FE1400A21259 /* compress.css3.selectors.part2.test25.c.css */, - C1EA68991680FE1400A21259 /* compress.css3.selectors.part2.test25.cl */, - C1EA689A1680FE1400A21259 /* compress.css3.selectors.part2.test25.css */, - C1EA689B1680FE1400A21259 /* compress.css3.selectors.part2.test26.c.cl */, - C1EA689C1680FE1400A21259 /* compress.css3.selectors.part2.test26.c.css */, - C1EA689D1680FE1400A21259 /* compress.css3.selectors.part2.test26.cl */, - C1EA689E1680FE1400A21259 /* compress.css3.selectors.part2.test26.css */, - C1EA689F1680FE1400A21259 /* compress.css3.selectors.part2.test27.c.cl */, - C1EA68A01680FE1400A21259 /* compress.css3.selectors.part2.test27.c.css */, - C1EA68A11680FE1400A21259 /* compress.css3.selectors.part2.test27.cl */, - C1EA68A21680FE1400A21259 /* compress.css3.selectors.part2.test27.css */, - C1EA68A31680FE1400A21259 /* compress.css3.selectors.part2.test28.c.cl */, - C1EA68A41680FE1400A21259 /* compress.css3.selectors.part2.test28.c.css */, - C1EA68A51680FE1400A21259 /* compress.css3.selectors.part2.test28.cl */, - C1EA68A61680FE1400A21259 /* compress.css3.selectors.part2.test28.css */, - C1EA68A71680FE1400A21259 /* compress.css3.selectors.part2.test29.c.cl */, - C1EA68A81680FE1400A21259 /* compress.css3.selectors.part2.test29.c.css */, - C1EA68A91680FE1400A21259 /* compress.css3.selectors.part2.test29.cl */, - C1EA68AA1680FE1400A21259 /* compress.css3.selectors.part2.test29.css */, - C1EA68AB1680FE1400A21259 /* compress.css3.selectors.part2.test3.c.cl */, - C1EA68AC1680FE1400A21259 /* compress.css3.selectors.part2.test3.c.css */, - C1EA68AD1680FE1400A21259 /* compress.css3.selectors.part2.test3.cl */, - C1EA68AE1680FE1400A21259 /* compress.css3.selectors.part2.test3.css */, - C1EA68AF1680FE1400A21259 /* compress.css3.selectors.part2.test30.c.cl */, - C1EA68B01680FE1400A21259 /* compress.css3.selectors.part2.test30.c.css */, - C1EA68B11680FE1400A21259 /* compress.css3.selectors.part2.test30.cl */, - C1EA68B21680FE1400A21259 /* compress.css3.selectors.part2.test30.css */, - C1EA68B31680FE1400A21259 /* compress.css3.selectors.part2.test31.c.cl */, - C1EA68B41680FE1400A21259 /* compress.css3.selectors.part2.test31.c.css */, - C1EA68B51680FE1400A21259 /* compress.css3.selectors.part2.test31.cl */, - C1EA68B61680FE1400A21259 /* compress.css3.selectors.part2.test31.css */, - C1EA68B71680FE1400A21259 /* compress.css3.selectors.part2.test32.c.cl */, - C1EA68B81680FE1400A21259 /* compress.css3.selectors.part2.test32.c.css */, - C1EA68B91680FE1400A21259 /* compress.css3.selectors.part2.test32.cl */, - C1EA68BA1680FE1400A21259 /* compress.css3.selectors.part2.test32.css */, - C1EA68BB1680FE1400A21259 /* compress.css3.selectors.part2.test33.c.cl */, - C1EA68BC1680FE1400A21259 /* compress.css3.selectors.part2.test33.c.css */, - C1EA68BD1680FE1400A21259 /* compress.css3.selectors.part2.test33.cl */, - C1EA68BE1680FE1400A21259 /* compress.css3.selectors.part2.test33.css */, - C1EA68BF1680FE1400A21259 /* compress.css3.selectors.part2.test34.c.cl */, - C1EA68C01680FE1400A21259 /* compress.css3.selectors.part2.test34.c.css */, - C1EA68C11680FE1400A21259 /* compress.css3.selectors.part2.test34.cl */, - C1EA68C21680FE1400A21259 /* compress.css3.selectors.part2.test34.css */, - C1EA68C31680FE1400A21259 /* compress.css3.selectors.part2.test35.c.cl */, - C1EA68C41680FE1400A21259 /* compress.css3.selectors.part2.test35.c.css */, - C1EA68C51680FE1400A21259 /* compress.css3.selectors.part2.test35.cl */, - C1EA68C61680FE1400A21259 /* compress.css3.selectors.part2.test35.css */, - C1EA68C71680FE1400A21259 /* compress.css3.selectors.part2.test36.c.cl */, - C1EA68C81680FE1400A21259 /* compress.css3.selectors.part2.test36.c.css */, - C1EA68C91680FE1400A21259 /* compress.css3.selectors.part2.test36.cl */, - C1EA68CA1680FE1400A21259 /* compress.css3.selectors.part2.test36.css */, - C1EA68CB1680FE1400A21259 /* compress.css3.selectors.part2.test37.c.cl */, - C1EA68CC1680FE1400A21259 /* compress.css3.selectors.part2.test37.c.css */, - C1EA68CD1680FE1400A21259 /* compress.css3.selectors.part2.test37.cl */, - C1EA68CE1680FE1400A21259 /* compress.css3.selectors.part2.test37.css */, - C1EA68CF1680FE1400A21259 /* compress.css3.selectors.part2.test38.c.cl */, - C1EA68D01680FE1400A21259 /* compress.css3.selectors.part2.test38.c.css */, - C1EA68D11680FE1400A21259 /* compress.css3.selectors.part2.test38.cl */, - C1EA68D21680FE1400A21259 /* compress.css3.selectors.part2.test38.css */, - C1EA68D31680FE1400A21259 /* compress.css3.selectors.part2.test39.c.cl */, - C1EA68D41680FE1400A21259 /* compress.css3.selectors.part2.test39.c.css */, - C1EA68D51680FE1400A21259 /* compress.css3.selectors.part2.test39.cl */, - C1EA68D61680FE1400A21259 /* compress.css3.selectors.part2.test39.css */, - C1EA68D71680FE1400A21259 /* compress.css3.selectors.part2.test4.c.cl */, - C1EA68D81680FE1400A21259 /* compress.css3.selectors.part2.test4.c.css */, - C1EA68D91680FE1400A21259 /* compress.css3.selectors.part2.test4.cl */, - C1EA68DA1680FE1400A21259 /* compress.css3.selectors.part2.test4.css */, - C1EA68DB1680FE1400A21259 /* compress.css3.selectors.part2.test40.c.cl */, - C1EA68DC1680FE1400A21259 /* compress.css3.selectors.part2.test40.c.css */, - C1EA68DD1680FE1400A21259 /* compress.css3.selectors.part2.test40.cl */, - C1EA68DE1680FE1400A21259 /* compress.css3.selectors.part2.test40.css */, - C1EA68DF1680FE1400A21259 /* compress.css3.selectors.part2.test41.c.cl */, - C1EA68E01680FE1400A21259 /* compress.css3.selectors.part2.test41.c.css */, - C1EA68E11680FE1400A21259 /* compress.css3.selectors.part2.test41.cl */, - C1EA68E21680FE1400A21259 /* compress.css3.selectors.part2.test41.css */, - C1EA68E31680FE1400A21259 /* compress.css3.selectors.part2.test42.c.cl */, - C1EA68E41680FE1400A21259 /* compress.css3.selectors.part2.test42.c.css */, - C1EA68E51680FE1400A21259 /* compress.css3.selectors.part2.test42.cl */, - C1EA68E61680FE1400A21259 /* compress.css3.selectors.part2.test42.css */, - C1EA68E71680FE1400A21259 /* compress.css3.selectors.part2.test5.c.cl */, - C1EA68E81680FE1400A21259 /* compress.css3.selectors.part2.test5.c.css */, - C1EA68E91680FE1400A21259 /* compress.css3.selectors.part2.test5.cl */, - C1EA68EA1680FE1400A21259 /* compress.css3.selectors.part2.test5.css */, - C1EA68EB1680FE1400A21259 /* compress.css3.selectors.part2.test6.c.cl */, - C1EA68EC1680FE1400A21259 /* compress.css3.selectors.part2.test6.c.css */, - C1EA68ED1680FE1400A21259 /* compress.css3.selectors.part2.test6.cl */, - C1EA68EE1680FE1400A21259 /* compress.css3.selectors.part2.test6.css */, - C1EA68EF1680FE1400A21259 /* compress.css3.selectors.part2.test7.c.cl */, - C1EA68F01680FE1400A21259 /* compress.css3.selectors.part2.test7.c.css */, - C1EA68F11680FE1400A21259 /* compress.css3.selectors.part2.test7.cl */, - C1EA68F21680FE1400A21259 /* compress.css3.selectors.part2.test7.css */, - C1EA68F31680FE1400A21259 /* compress.css3.selectors.part2.test8.c.cl */, - C1EA68F41680FE1400A21259 /* compress.css3.selectors.part2.test8.c.css */, - C1EA68F51680FE1400A21259 /* compress.css3.selectors.part2.test8.cl */, - C1EA68F61680FE1400A21259 /* compress.css3.selectors.part2.test8.css */, - C1EA68F71680FE1400A21259 /* compress.css3.selectors.part2.test9.c.cl */, - C1EA68F81680FE1400A21259 /* compress.css3.selectors.part2.test9.c.css */, - C1EA68F91680FE1400A21259 /* compress.css3.selectors.part2.test9.cl */, - C1EA68FA1680FE1400A21259 /* compress.css3.selectors.part2.test9.css */, - C1EA68FB1680FE1400A21259 /* compress.dont.background.test1.cl */, - C1EA68FC1680FE1400A21259 /* compress.dont.background.test1.css */, - C1EA68FD1680FE1400A21259 /* compress.dont.background.test2.cl */, - C1EA68FE1680FE1400A21259 /* compress.dont.background.test2.css */, - C1EA68FF1680FE1400A21259 /* compress.dont.background.test3.cl */, - C1EA69001680FE1400A21259 /* compress.dont.background.test3.css */, - C1EA69011680FE1400A21259 /* compress.dont.test1.cl */, - C1EA69021680FE1400A21259 /* compress.dont.test1.css */, - C1EA69031680FE1400A21259 /* compress.initial.background.test1.cl */, - C1EA69041680FE1400A21259 /* compress.initial.background.test1.css */, - C1EA69051680FE1400A21259 /* compress.initial.font.test1.cl */, - C1EA69061680FE1400A21259 /* compress.initial.font.test1.css */, - C1EA69071680FE1400A21259 /* compress.initial.font.test1.l */, - C1EA69081680FE1400A21259 /* compress.mess.test1.cl */, - C1EA69091680FE1400A21259 /* compress.mess.test1.css */, - C1EA690A1680FE1400A21259 /* compress.mess.test2.cl */, - C1EA690B1680FE1400A21259 /* compress.mess.test2.css */, - C1EA690C1680FE1400A21259 /* compress.mess.test3.cl */, - C1EA690D1680FE1400A21259 /* compress.mess.test3.css */, - C1EA690E1680FE1400A21259 /* compress.mess.test3.l */, - C1EA690F1680FE1400A21259 /* compress.restructure.background.test3.cl */, - C1EA69101680FE1400A21259 /* compress.restructure.background.test3.css */, - C1EA69111680FE1400A21259 /* compress.restructure.empty.atrule.test1.cl */, - C1EA69121680FE1400A21259 /* compress.restructure.empty.atrule.test1.css */, - C1EA69131680FE1400A21259 /* compress.restructure.empty.atrule.test2.cl */, - C1EA69141680FE1400A21259 /* compress.restructure.empty.atrule.test2.css */, - C1EA69151680FE1400A21259 /* compress.restructure.equal.selectors.test1.cl */, - C1EA69161680FE1400A21259 /* compress.restructure.equal.selectors.test1.css */, - C1EA69171680FE1400A21259 /* compress.restructure.equal.selectors.test2.cl */, - C1EA69181680FE1400A21259 /* compress.restructure.equal.selectors.test2.css */, - C1EA69191680FE1400A21259 /* compress.restructure.equal.selectors.test3.cl */, - C1EA691A1680FE1400A21259 /* compress.restructure.equal.selectors.test3.css */, - C1EA691B1680FE1400A21259 /* compress.restructure.equal.test1.cl */, - C1EA691C1680FE1400A21259 /* compress.restructure.equal.test1.css */, - C1EA691D1680FE1400A21259 /* compress.restructure.equal.test2.cl */, - C1EA691E1680FE1400A21259 /* compress.restructure.equal.test2.css */, - C1EA691F1680FE1400A21259 /* compress.restructure.equal.test3.cl */, - C1EA69201680FE1400A21259 /* compress.restructure.equal.test3.css */, - C1EA69211680FE1400A21259 /* compress.restructure.equal.test4.cl */, - C1EA69221680FE1400A21259 /* compress.restructure.equal.test4.css */, - C1EA69231680FE1400A21259 /* compress.restructure.equal.test5.cl */, - C1EA69241680FE1400A21259 /* compress.restructure.equal.test5.css */, - C1EA69251680FE1400A21259 /* compress.restructure.equal.test6.cl */, - C1EA69261680FE1400A21259 /* compress.restructure.equal.test6.css */, - C1EA69271680FE1400A21259 /* compress.restructure.equal.test7.cl */, - C1EA69281680FE1400A21259 /* compress.restructure.equal.test7.css */, - C1EA69291680FE1400A21259 /* compress.restructure.filter.test1.cl */, - C1EA692A1680FE1400A21259 /* compress.restructure.filter.test1.css */, - C1EA692B1680FE1400A21259 /* compress.restructure.margin.test1.cl */, - C1EA692C1680FE1400A21259 /* compress.restructure.margin.test1.css */, - C1EA692D1680FE1400A21259 /* compress.restructure.margin.test2.cl */, - C1EA692E1680FE1400A21259 /* compress.restructure.margin.test2.css */, - C1EA692F1680FE1400A21259 /* compress.restructure.margin.test3.cl */, - C1EA69301680FE1400A21259 /* compress.restructure.margin.test3.css */, - C1EA69311680FE1400A21259 /* compress.restructure.merge.test1.cl */, - C1EA69321680FE1400A21259 /* compress.restructure.merge.test1.css */, - C1EA69331680FE1400A21259 /* compress.restructure.merge.test2.cl */, - C1EA69341680FE1400A21259 /* compress.restructure.merge.test2.css */, - C1EA69351680FE1400A21259 /* compress.restructure.merge.test3.cl */, - C1EA69361680FE1400A21259 /* compress.restructure.merge.test3.css */, - C1EA69371680FE1400A21259 /* compress.restructure.merge.test4.cl */, - C1EA69381680FE1400A21259 /* compress.restructure.merge.test4.css */, - C1EA69391680FE1400A21259 /* compress.restructure.padding.test1.cl */, - C1EA693A1680FE1400A21259 /* compress.restructure.padding.test1.css */, - C1EA693B1680FE1400A21259 /* compress.restructure.padding.test2.cl */, - C1EA693C1680FE1400A21259 /* compress.restructure.padding.test2.css */, - C1EA693D1680FE1400A21259 /* compress.shorthand.margin.padding.test1.cl */, - C1EA693E1680FE1400A21259 /* compress.shorthand.margin.padding.test1.css */, - C1EA693F1680FE1400A21259 /* compress.shorthand.margin.test1.cl */, - C1EA69401680FE1400A21259 /* compress.shorthand.margin.test1.css */, - C1EA69411680FE1400A21259 /* compress.shorthand.margin.test2.cl */, - C1EA69421680FE1400A21259 /* compress.shorthand.margin.test2.css */, - C1EA69431680FE1400A21259 /* compress.shorthand.margin.test3.cl */, - C1EA69441680FE1400A21259 /* compress.shorthand.margin.test3.css */, - C1EA69451680FE1400A21259 /* compress.shorthand.margin.test4.cl */, - C1EA69461680FE1400A21259 /* compress.shorthand.margin.test4.css */, - C1EA69471680FE1400A21259 /* compress.shorthand.margin.test5.cl */, - C1EA69481680FE1400A21259 /* compress.shorthand.margin.test5.css */, - C1EA69491680FE1400A21259 /* compress.shorthand.margin.test6.cl */, - C1EA694A1680FE1400A21259 /* compress.shorthand.margin.test6.css */, - C1EA694B1680FE1400A21259 /* compress.shorthand.margin.test7.cl */, - C1EA694C1680FE1400A21259 /* compress.shorthand.margin.test7.css */, - C1EA694D1680FE1400A21259 /* compress.shorthand.margin.unary.test1.cl */, - C1EA694E1680FE1400A21259 /* compress.shorthand.margin.unary.test1.css */, - C1EA694F1680FE1400A21259 /* compress.shorthand.margin.unary.test2.cl */, - C1EA69501680FE1400A21259 /* compress.shorthand.margin.unary.test2.css */, - C1EA69511680FE1400A21259 /* compress.shorthand.margin.unary.test3.cl */, - C1EA69521680FE1400A21259 /* compress.shorthand.margin.unary.test3.css */, - C1EA69531680FE1400A21259 /* compress.shorthand.margin.unary.test4.cl */, - C1EA69541680FE1400A21259 /* compress.shorthand.margin.unary.test4.css */, - C1EA69551680FE1400A21259 /* compress.shorthand.margin.unary.test5.cl */, - C1EA69561680FE1400A21259 /* compress.shorthand.margin.unary.test5.css */, - C1EA69571680FE1400A21259 /* compress.shorthand.margin.unary.test6.cl */, - C1EA69581680FE1400A21259 /* compress.shorthand.margin.unary.test6.css */, - C1EA69591680FE1400A21259 /* compress.shorthand.margin.unary.test7.cl */, - C1EA695A1680FE1400A21259 /* compress.shorthand.margin.unary.test7.css */, - C1EA695B1680FE1400A21259 /* compress.shorthand.padding.test1.cl */, - C1EA695C1680FE1400A21259 /* compress.shorthand.padding.test1.css */, - C1EA695D1680FE1400A21259 /* compress.shorthand.padding.test2.cl */, - C1EA695E1680FE1400A21259 /* compress.shorthand.padding.test2.css */, - C1EA695F1680FE1400A21259 /* compress.shorthand.padding.test3.cl */, - C1EA69601680FE1400A21259 /* compress.shorthand.padding.test3.css */, - C1EA69611680FE1400A21259 /* compress.shorthand.padding.test4.cl */, - C1EA69621680FE1400A21259 /* compress.shorthand.padding.test4.css */, - C1EA69631680FE1400A21259 /* compress.shorthand.padding.test5.cl */, - C1EA69641680FE1400A21259 /* compress.shorthand.padding.test5.css */, - C1EA69651680FE1400A21259 /* compress.shorthand.padding.test6.cl */, - C1EA69661680FE1400A21259 /* compress.shorthand.padding.test6.css */, - C1EA69671680FE1400A21259 /* compress.shorthand.padding.test7.cl */, - C1EA69681680FE1400A21259 /* compress.shorthand.padding.test7.css */, - C1EA69691680FE1400A21259 /* issue16.test1.cl */, - C1EA696A1680FE1400A21259 /* issue16.test1.css */, - C1EA696B1680FE1400A21259 /* issue39.test1.cl */, - C1EA696C1680FE1400A21259 /* issue39.test1.css */, - C1EA696D1680FE1400A21259 /* issue39.test10.cl */, - C1EA696E1680FE1400A21259 /* issue39.test10.css */, - C1EA696F1680FE1400A21259 /* issue39.test11.cl */, - C1EA69701680FE1400A21259 /* issue39.test11.css */, - C1EA69711680FE1400A21259 /* issue39.test12.cl */, - C1EA69721680FE1400A21259 /* issue39.test12.css */, - C1EA69731680FE1400A21259 /* issue39.test13.cl */, - C1EA69741680FE1400A21259 /* issue39.test13.css */, - C1EA69751680FE1400A21259 /* issue39.test14.cl */, - C1EA69761680FE1400A21259 /* issue39.test14.css */, - C1EA69771680FE1400A21259 /* issue39.test15.cl */, - C1EA69781680FE1400A21259 /* issue39.test15.css */, - C1EA69791680FE1400A21259 /* issue39.test16.cl */, - C1EA697A1680FE1400A21259 /* issue39.test16.css */, - C1EA697B1680FE1400A21259 /* issue39.test17.cl */, - C1EA697C1680FE1400A21259 /* issue39.test17.css */, - C1EA697D1680FE1400A21259 /* issue39.test18.cl */, - C1EA697E1680FE1400A21259 /* issue39.test18.css */, - C1EA697F1680FE1400A21259 /* issue39.test19.cl */, - C1EA69801680FE1400A21259 /* issue39.test19.css */, - C1EA69811680FE1400A21259 /* issue39.test2.cl */, - C1EA69821680FE1400A21259 /* issue39.test2.css */, - C1EA69831680FE1400A21259 /* issue39.test20.cl */, - C1EA69841680FE1400A21259 /* issue39.test20.css */, - C1EA69851680FE1400A21259 /* issue39.test21.cl */, - C1EA69861680FE1400A21259 /* issue39.test21.css */, - C1EA69871680FE1400A21259 /* issue39.test22.cl */, - C1EA69881680FE1400A21259 /* issue39.test22.css */, - C1EA69891680FE1400A21259 /* issue39.test23.cl */, - C1EA698A1680FE1400A21259 /* issue39.test23.css */, - C1EA698B1680FE1400A21259 /* issue39.test24.cl */, - C1EA698C1680FE1400A21259 /* issue39.test24.css */, - C1EA698D1680FE1400A21259 /* issue39.test25.cl */, - C1EA698E1680FE1400A21259 /* issue39.test25.css */, - C1EA698F1680FE1400A21259 /* issue39.test26.cl */, - C1EA69901680FE1400A21259 /* issue39.test26.css */, - C1EA69911680FE1400A21259 /* issue39.test27.cl */, - C1EA69921680FE1400A21259 /* issue39.test27.css */, - C1EA69931680FE1400A21259 /* issue39.test28.cl */, - C1EA69941680FE1400A21259 /* issue39.test28.css */, - C1EA69951680FE1400A21259 /* issue39.test29.cl */, - C1EA69961680FE1400A21259 /* issue39.test29.css */, - C1EA69971680FE1400A21259 /* issue39.test3.cl */, - C1EA69981680FE1400A21259 /* issue39.test3.css */, - C1EA69991680FE1400A21259 /* issue39.test30.cl */, - C1EA699A1680FE1400A21259 /* issue39.test30.css */, - C1EA699B1680FE1400A21259 /* issue39.test31.cl */, - C1EA699C1680FE1400A21259 /* issue39.test31.css */, - C1EA699D1680FE1400A21259 /* issue39.test4.cl */, - C1EA699E1680FE1400A21259 /* issue39.test4.css */, - C1EA699F1680FE1400A21259 /* issue39.test5.cl */, - C1EA69A01680FE1400A21259 /* issue39.test5.css */, - C1EA69A11680FE1400A21259 /* issue39.test6.cl */, - C1EA69A21680FE1400A21259 /* issue39.test6.css */, - C1EA69A31680FE1400A21259 /* issue39.test7.cl */, - C1EA69A41680FE1400A21259 /* issue39.test7.css */, - C1EA69A51680FE1400A21259 /* issue39.test8.cl */, - C1EA69A61680FE1400A21259 /* issue39.test8.css */, - C1EA69A71680FE1400A21259 /* issue39.test9.cl */, - C1EA69A81680FE1400A21259 /* issue39.test9.css */, - C1EA69A91680FE1400A21259 /* issue45.test1.cl */, - C1EA69AA1680FE1400A21259 /* issue45.test1.css */, - C1EA69AB1680FE1400A21259 /* issue48.test1.cl */, - C1EA69AC1680FE1400A21259 /* issue48.test1.css */, - C1EA69AD1680FE1400A21259 /* issue50.test1.cl */, - C1EA69AE1680FE1400A21259 /* issue50.test1.css */, - C1EA69AF1680FE1400A21259 /* issue50.test2.cl */, - C1EA69B01680FE1400A21259 /* issue50.test2.css */, - C1EA69B11680FE1400A21259 /* issue52.test1.cl */, - C1EA69B21680FE1400A21259 /* issue52.test1.css */, - C1EA69B31680FE1400A21259 /* issue52.test2.cl */, - C1EA69B41680FE1400A21259 /* issue52.test2.css */, - C1EA69B51680FE1400A21259 /* issue53.test1.cl */, - C1EA69B61680FE1400A21259 /* issue53.test1.css */, - C1EA69B71680FE1400A21259 /* issue53.test2.cl */, - C1EA69B81680FE1400A21259 /* issue53.test2.css */, - C1EA69B91680FE1400A21259 /* issue54.test1.cl */, - C1EA69BA1680FE1400A21259 /* issue54.test1.css */, - C1EA69BB1680FE1400A21259 /* issue57.test1.cl */, - C1EA69BC1680FE1400A21259 /* issue57.test1.css */, - C1EA69BD1680FE1400A21259 /* issue57.test2.cl */, - C1EA69BE1680FE1400A21259 /* issue57.test2.css */, - C1EA69BF1680FE1400A21259 /* issue71.test1.cl */, - C1EA69C01680FE1400A21259 /* issue71.test1.css */, - C1EA69C11680FE1400A21259 /* issue76.test1.cl */, - C1EA69C21680FE1400A21259 /* issue76.test1.css */, - C1EA69C31680FE1400A21259 /* issue76.test2.cl */, - C1EA69C41680FE1400A21259 /* issue76.test2.css */, - C1EA69C51680FE1400A21259 /* issue76.test3.cl */, - C1EA69C61680FE1400A21259 /* issue76.test3.css */, - C1EA69C71680FE1400A21259 /* issue76.test4.cl */, - C1EA69C81680FE1400A21259 /* issue76.test4.css */, - C1EA69C91680FE1400A21259 /* issue76.test5.cl */, - C1EA69CA1680FE1400A21259 /* issue76.test5.css */, - C1EA69CB1680FE1400A21259 /* issue78.test1.cl */, - C1EA69CC1680FE1400A21259 /* issue78.test1.css */, - C1EA69CD1680FE1400A21259 /* issue78.test2.cl */, - C1EA69CE1680FE1400A21259 /* issue78.test2.css */, - C1EA69CF1680FE1400A21259 /* issue78.test3.cl */, - C1EA69D01680FE1400A21259 /* issue78.test3.css */, - C1EA69D11680FE1400A21259 /* issue78.test4.cl */, - C1EA69D21680FE1400A21259 /* issue78.test4.css */, - C1EA69D31680FE1400A21259 /* issue79.test1.cl */, - C1EA69D41680FE1400A21259 /* issue79.test1.css */, - C1EA69D51680FE1400A21259 /* issue79.test2.cl */, - C1EA69D61680FE1400A21259 /* issue79.test2.css */, - C1EA69D71680FE1400A21259 /* issue81.test1.cl */, - C1EA69D81680FE1400A21259 /* issue81.test1.css */, - C1EA69D91680FE1400A21259 /* issue81.test2.cl */, - C1EA69DA1680FE1400A21259 /* issue81.test2.css */, - C1EA69DB1680FE1400A21259 /* issue81.test3.cl */, - C1EA69DC1680FE1400A21259 /* issue81.test3.css */, - C1EA69DD1680FE1400A21259 /* issue82.test1.cl */, - C1EA69DE1680FE1400A21259 /* issue82.test1.css */, - C1EA69DF1680FE1400A21259 /* stylesheet.0.css */, - C1EA69E01680FE1400A21259 /* stylesheet.0.l */, - C1EA69E11680FE1400A21259 /* stylesheet.0.p */, - C1EA69E21680FE1400A21259 /* stylesheet.1.css */, - C1EA69E31680FE1400A21259 /* stylesheet.1.l */, - C1EA69E41680FE1400A21259 /* stylesheet.1.p */, - C1EA69E51680FE1400A21259 /* stylesheet.2.css */, - C1EA69E61680FE1400A21259 /* stylesheet.2.l */, - C1EA69E71680FE1400A21259 /* stylesheet.2.p */, - C1EA69E81680FE1400A21259 /* stylesheet.3.css */, - C1EA69E91680FE1400A21259 /* stylesheet.3.l */, - C1EA69EA1680FE1400A21259 /* stylesheet.3.p */, - C1EA69EB1680FE1400A21259 /* stylesheet.4.css */, - C1EA69EC1680FE1400A21259 /* stylesheet.4.l */, - C1EA69ED1680FE1400A21259 /* stylesheet.4.p */, - C1EA69EE1680FE1400A21259 /* stylesheet.c.0.css */, - C1EA69EF1680FE1400A21259 /* stylesheet.c.0.l */, - C1EA69F01680FE1400A21259 /* stylesheet.c.0.p */, - C1EA69F11680FE1400A21259 /* stylesheet.s.0.css */, - C1EA69F21680FE1400A21259 /* stylesheet.s.0.l */, - C1EA69F31680FE1400A21259 /* stylesheet.s.0.p */, - C1EA69F41680FE1400A21259 /* stylesheet.s.1.css */, - C1EA69F51680FE1400A21259 /* stylesheet.s.1.l */, - C1EA69F61680FE1400A21259 /* stylesheet.s.1.p */, - C1EA69F71680FE1400A21259 /* stylesheet.s.2.css */, - C1EA69F81680FE1400A21259 /* stylesheet.s.2.l */, - C1EA69F91680FE1400A21259 /* stylesheet.s.2.p */, - C1EA69FA1680FE1400A21259 /* stylesheet.s.3.css */, - C1EA69FB1680FE1400A21259 /* stylesheet.s.3.l */, - C1EA69FC1680FE1400A21259 /* stylesheet.s.3.p */, - ); - path = test_stylesheet; - sourceTree = ""; - }; - C1EA69FD1680FE1400A21259 /* test_unary */ = { - isa = PBXGroup; - children = ( - C1EA69FE1680FE1400A21259 /* unary.0.css */, - C1EA69FF1680FE1400A21259 /* unary.0.l */, - C1EA6A001680FE1400A21259 /* unary.0.p */, - C1EA6A011680FE1400A21259 /* unary.1.css */, - C1EA6A021680FE1400A21259 /* unary.1.l */, - C1EA6A031680FE1400A21259 /* unary.1.p */, - ); - path = test_unary; - sourceTree = ""; - }; - C1EA6A041680FE1400A21259 /* test_unknown */ = { - isa = PBXGroup; - children = ( - C1EA6A051680FE1400A21259 /* unknown.0.css */, - C1EA6A061680FE1400A21259 /* unknown.0.l */, - C1EA6A071680FE1400A21259 /* unknown.1.css */, - C1EA6A081680FE1400A21259 /* unknown.1.l */, - C1EA6A091680FE1400A21259 /* unknown.2.css */, - C1EA6A0A1680FE1400A21259 /* unknown.2.l */, - ); - path = test_unknown; - sourceTree = ""; - }; - C1EA6A0B1680FE1400A21259 /* test_uri */ = { - isa = PBXGroup; - children = ( - C1EA6A0C1680FE1400A21259 /* uri.0.css */, - C1EA6A0D1680FE1400A21259 /* uri.0.l */, - C1EA6A0E1680FE1400A21259 /* uri.0.p */, - C1EA6A0F1680FE1400A21259 /* uri.1.css */, - C1EA6A101680FE1400A21259 /* uri.1.l */, - C1EA6A111680FE1400A21259 /* uri.1.p */, - C1EA6A121680FE1400A21259 /* uri.c.0.css */, - C1EA6A131680FE1400A21259 /* uri.c.0.l */, - C1EA6A141680FE1400A21259 /* uri.c.0.p */, - C1EA6A151680FE1400A21259 /* uri.c.1.css */, - C1EA6A161680FE1400A21259 /* uri.c.1.l */, - C1EA6A171680FE1400A21259 /* uri.c.1.p */, - C1EA6A181680FE1400A21259 /* uri.s.0.css */, - C1EA6A191680FE1400A21259 /* uri.s.0.l */, - C1EA6A1A1680FE1400A21259 /* uri.s.0.p */, - C1EA6A1B1680FE1400A21259 /* uri.s.1.css */, - C1EA6A1C1680FE1400A21259 /* uri.s.1.l */, - C1EA6A1D1680FE1400A21259 /* uri.s.1.p */, - ); - path = test_uri; - sourceTree = ""; - }; - C1EA6A1E1680FE1400A21259 /* test_value */ = { - isa = PBXGroup; - children = ( - C1EA6A1F1680FE1400A21259 /* value.0.css */, - C1EA6A201680FE1400A21259 /* value.0.l */, - C1EA6A211680FE1400A21259 /* value.0.p */, - C1EA6A221680FE1400A21259 /* value.1.css */, - C1EA6A231680FE1400A21259 /* value.1.l */, - C1EA6A241680FE1400A21259 /* value.1.p */, - C1EA6A251680FE1400A21259 /* value.2.css */, - C1EA6A261680FE1400A21259 /* value.2.l */, - C1EA6A271680FE1400A21259 /* value.2.p */, - C1EA6A281680FE1400A21259 /* value.3.css */, - C1EA6A291680FE1400A21259 /* value.3.l */, - C1EA6A2A1680FE1400A21259 /* value.3.p */, - C1EA6A2B1680FE1400A21259 /* value.4.css */, - C1EA6A2C1680FE1400A21259 /* value.4.l */, - C1EA6A2D1680FE1400A21259 /* value.4.p */, - C1EA6A2E1680FE1400A21259 /* value.dimension.0.css */, - C1EA6A2F1680FE1400A21259 /* value.dimension.0.l */, - C1EA6A301680FE1400A21259 /* value.dimension.1.css */, - C1EA6A311680FE1400A21259 /* value.dimension.1.l */, - C1EA6A321680FE1400A21259 /* value.dimension.2.css */, - C1EA6A331680FE1400A21259 /* value.dimension.2.l */, - C1EA6A341680FE1400A21259 /* value.rgb.0.css */, - C1EA6A351680FE1400A21259 /* value.rgb.0.l */, - C1EA6A361680FE1400A21259 /* value.rgb.1.css */, - C1EA6A371680FE1400A21259 /* value.rgb.1.l */, - C1EA6A381680FE1400A21259 /* value.rgb.2.css */, - C1EA6A391680FE1400A21259 /* value.rgb.2.l */, - C1EA6A3A1680FE1400A21259 /* value.vhash.0.css */, - C1EA6A3B1680FE1400A21259 /* value.vhash.0.l */, - C1EA6A3C1680FE1400A21259 /* value.vhash.1.css */, - C1EA6A3D1680FE1400A21259 /* value.vhash.1.l */, - C1EA6A3E1680FE1400A21259 /* value.vhash.2.css */, - C1EA6A3F1680FE1400A21259 /* value.vhash.2.l */, - C1EA6A401680FE1400A21259 /* value.vhash.3.css */, - C1EA6A411680FE1400A21259 /* value.vhash.3.l */, - ); - path = test_value; - sourceTree = ""; - }; - C1EA6A421680FE1400A21259 /* test_vhash */ = { - isa = PBXGroup; - children = ( - C1EA6A431680FE1400A21259 /* vhash.0.css */, - C1EA6A441680FE1400A21259 /* vhash.0.l */, - C1EA6A451680FE1400A21259 /* vhash.0.p */, - C1EA6A461680FE1400A21259 /* vhash.1.css */, - C1EA6A471680FE1400A21259 /* vhash.1.l */, - C1EA6A481680FE1400A21259 /* vhash.1.p */, - ); - path = test_vhash; - sourceTree = ""; - }; - C1EA6A4C1680FE1400A21259 /* web */ = { - isa = PBXGroup; - children = ( - C1EA6A4D1680FE1400A21259 /* csso.css */, - C1EA6A4E1680FE1400A21259 /* csso.html */, - C1EA6A4F1680FE1400A21259 /* csso.web.js */, - ); - path = web; - sourceTree = ""; - }; - C1EA6A521680FE1400A21259 /* enhanced-require */ = { - isa = PBXGroup; - children = ( - C1EA6A531680FE1400A21259 /* .npmignore */, - C1EA6A541680FE1400A21259 /* .travis.yml */, - C1EA6A551680FE1400A21259 /* lib */, - C1EA6A5A1680FE1400A21259 /* node_modules */, - C1EA6A801680FE1400A21259 /* package.json */, - C1EA6A811680FE1400A21259 /* README.md */, - C1EA6A821680FE1400A21259 /* test */, - ); - path = "enhanced-require"; - sourceTree = ""; - }; - C1EA6A551680FE1400A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6A561680FE1400A21259 /* execLoaders.js */, - C1EA6A571680FE1400A21259 /* execModule.js */, - C1EA6A581680FE1400A21259 /* require.js */, - C1EA6A591680FE1400A21259 /* require.webpack.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6A5A1680FE1400A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6A5B1680FE1400A21259 /* enhanced-resolve */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6A5B1680FE1400A21259 /* enhanced-resolve */ = { - isa = PBXGroup; - children = ( - C1EA6A5C1680FE1400A21259 /* .npmignore */, - C1EA6A5D1680FE1400A21259 /* .travis.yml */, - C1EA6A5E1680FE1400A21259 /* lib */, - C1EA6A611680FE1400A21259 /* package.json */, - C1EA6A621680FE1400A21259 /* README.md */, - C1EA6A631680FE1400A21259 /* test */, - ); - path = "enhanced-resolve"; - sourceTree = ""; - }; - C1EA6A5E1680FE1400A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6A5F1680FE1400A21259 /* createThrottledFunction.js */, - C1EA6A601680FE1400A21259 /* resolve.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6A631680FE1400A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6A641680FE1400A21259 /* fixtures */, - C1EA6A7E1680FE1400A21259 /* resolve.js */, - C1EA6A7F1680FE1400A21259 /* simple.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6A641680FE1400A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA6A651680FE1400A21259 /* a.js */, - C1EA6A661680FE1400A21259 /* abc.txt */, - C1EA6A671680FE1400A21259 /* b.js */, - C1EA6A681680FE1400A21259 /* c.js */, - C1EA6A691680FE1400A21259 /* complex.js */, - C1EA6A6A1680FE1400A21259 /* lib */, - C1EA6A6C1680FE1400A21259 /* main1.js */, - C1EA6A6D1680FE1400A21259 /* main2.js */, - C1EA6A6E1680FE1400A21259 /* main3.js */, - C1EA6A6F1680FE1400A21259 /* node_modules */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA6A6A1680FE1400A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6A6B1680FE1400A21259 /* complex1.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6A6F1680FE1400A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6A701680FE1400A21259 /* complexm */, - C1EA6A771680FE1400A21259 /* m1 */, - C1EA6A7A1680FE1400A21259 /* m2 */, - C1EA6A7C1680FE1400A21259 /* m2-loader */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6A701680FE1400A21259 /* complexm */ = { - isa = PBXGroup; - children = ( - C1EA6A711680FE1400A21259 /* step1.js */, - C1EA6A721680FE1400A21259 /* step2.js */, - C1EA6A731680FE1400A21259 /* web_modules */, - ); - path = complexm; - sourceTree = ""; - }; - C1EA6A731680FE1400A21259 /* web_modules */ = { - isa = PBXGroup; - children = ( - C1EA6A741680FE1400A21259 /* m1 */, - ); - path = web_modules; - sourceTree = ""; - }; - C1EA6A741680FE1400A21259 /* m1 */ = { - isa = PBXGroup; - children = ( - C1EA6A751680FE1400A21259 /* a.js */, - C1EA6A761680FE1400A21259 /* index.js */, - ); - path = m1; - sourceTree = ""; - }; - C1EA6A771680FE1400A21259 /* m1 */ = { - isa = PBXGroup; - children = ( - C1EA6A781680FE1400A21259 /* a.js */, - C1EA6A791680FE1400A21259 /* b.js */, - ); - path = m1; - sourceTree = ""; - }; - C1EA6A7A1680FE1400A21259 /* m2 */ = { - isa = PBXGroup; - children = ( - C1EA6A7B1680FE1400A21259 /* b.js */, - ); - path = m2; - sourceTree = ""; - }; - C1EA6A7C1680FE1400A21259 /* m2-loader */ = { - isa = PBXGroup; - children = ( - C1EA6A7D1680FE1400A21259 /* b.js */, - ); - path = "m2-loader"; - sourceTree = ""; - }; - C1EA6A821680FE1400A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6A831680FE1400A21259 /* amd.js */, - C1EA6A841680FE1400A21259 /* commonjs-loaders.js */, - C1EA6A851680FE1400A21259 /* commonjs.js */, - C1EA6A861680FE1400A21259 /* fixtures */, - C1EA6A8E1680FE1400A21259 /* modules-async.js */, - C1EA6A8F1680FE1400A21259 /* require-context.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6A861680FE1400A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA6A871680FE1400A21259 /* directory */, - C1EA6A891680FE1400A21259 /* file.js */, - C1EA6A8A1680FE1400A21259 /* freeVars.js */, - C1EA6A8B1680FE1400A21259 /* inner.js */, - C1EA6A8C1680FE1400A21259 /* loader.js */, - C1EA6A8D1680FE1400A21259 /* outer.js */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA6A871680FE1400A21259 /* directory */ = { - isa = PBXGroup; - children = ( - C1EA6A881680FE1400A21259 /* file2.js */, - ); - path = directory; - sourceTree = ""; - }; - C1EA6A901680FE1400A21259 /* enhanced-resolve */ = { - isa = PBXGroup; - children = ( - C1EA6A911680FE1400A21259 /* .npmignore */, - C1EA6A921680FE1400A21259 /* .travis.yml */, - C1EA6A931680FE1400A21259 /* lib */, - C1EA6A961680FE1400A21259 /* package.json */, - C1EA6A971680FE1400A21259 /* README.md */, - C1EA6A981680FE1400A21259 /* test */, - ); - path = "enhanced-resolve"; - sourceTree = ""; - }; - C1EA6A931680FE1400A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6A941680FE1400A21259 /* createThrottledFunction.js */, - C1EA6A951680FE1400A21259 /* resolve.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6A981680FE1400A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6A991680FE1400A21259 /* errors.js */, - C1EA6A9A1680FE1400A21259 /* fixtures */, - C1EA6AB61680FE1400A21259 /* resolve.js */, - C1EA6AB71680FE1400A21259 /* simple.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6A9A1680FE1400A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA6A9B1680FE1400A21259 /* a.js */, - C1EA6A9C1680FE1400A21259 /* abc.txt */, - C1EA6A9D1680FE1400A21259 /* b.js */, - C1EA6A9E1680FE1400A21259 /* c.js */, - C1EA6A9F1680FE1400A21259 /* complex.js */, - C1EA6AA01680FE1400A21259 /* lib */, - C1EA6AA21680FE1400A21259 /* main1.js */, - C1EA6AA31680FE1400A21259 /* main2.js */, - C1EA6AA41680FE1400A21259 /* main3.js */, - C1EA6AA51680FE1400A21259 /* node_modules */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA6AA01680FE1400A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6AA11680FE1400A21259 /* complex1.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6AA51680FE1400A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6AA61680FE1400A21259 /* complexm */, - C1EA6AAD1680FE1400A21259 /* invalidPackageJson */, - C1EA6AAF1680FE1400A21259 /* m1 */, - C1EA6AB21680FE1400A21259 /* m2 */, - C1EA6AB41680FE1400A21259 /* m2-loader */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6AA61680FE1400A21259 /* complexm */ = { - isa = PBXGroup; - children = ( - C1EA6AA71680FE1400A21259 /* step1.js */, - C1EA6AA81680FE1400A21259 /* step2.js */, - C1EA6AA91680FE1400A21259 /* web_modules */, - ); - path = complexm; - sourceTree = ""; - }; - C1EA6AA91680FE1400A21259 /* web_modules */ = { - isa = PBXGroup; - children = ( - C1EA6AAA1680FE1400A21259 /* m1 */, - ); - path = web_modules; - sourceTree = ""; - }; - C1EA6AAA1680FE1400A21259 /* m1 */ = { - isa = PBXGroup; - children = ( - C1EA6AAB1680FE1400A21259 /* a.js */, - C1EA6AAC1680FE1400A21259 /* index.js */, - ); - path = m1; - sourceTree = ""; - }; - C1EA6AAD1680FE1400A21259 /* invalidPackageJson */ = { - isa = PBXGroup; - children = ( - C1EA6AAE1680FE1400A21259 /* package.json */, - ); - path = invalidPackageJson; - sourceTree = ""; - }; - C1EA6AAF1680FE1400A21259 /* m1 */ = { - isa = PBXGroup; - children = ( - C1EA6AB01680FE1400A21259 /* a.js */, - C1EA6AB11680FE1400A21259 /* b.js */, - ); - path = m1; - sourceTree = ""; - }; - C1EA6AB21680FE1400A21259 /* m2 */ = { - isa = PBXGroup; - children = ( - C1EA6AB31680FE1400A21259 /* b.js */, - ); - path = m2; - sourceTree = ""; - }; - C1EA6AB41680FE1400A21259 /* m2-loader */ = { - isa = PBXGroup; - children = ( - C1EA6AB51680FE1400A21259 /* b.js */, - ); - path = "m2-loader"; - sourceTree = ""; - }; - C1EA6AB81680FE1400A21259 /* esprima */ = { - isa = PBXGroup; - children = ( - C1EA6AB91680FE1400A21259 /* .travis.yml */, - C1EA6ABA1680FE1400A21259 /* assets */, - C1EA6AC61680FE1400A21259 /* bin */, - C1EA6AC81680FE1400A21259 /* changes */, - C1EA6AC91680FE1400A21259 /* cm */, - C1EA6ACA1680FE1400A21259 /* demo */, - C1EA6AD51680FE1400A21259 /* esprima.js */, - C1EA6AD61680FE1400A21259 /* index.html */, - C1EA6AD71680FE1400A21259 /* LICENSE.BSD */, - C1EA6AD81680FE1400A21259 /* package.json */, - C1EA6AD91680FE1400A21259 /* README.md */, - C1EA6ADA1680FE1400A21259 /* test */, - C1EA6AFF1680FE1400A21259 /* tools */, - ); - path = esprima; - sourceTree = ""; - }; - C1EA6ABA1680FE1400A21259 /* assets */ = { - isa = PBXGroup; - children = ( - C1EA6ABB1680FE1400A21259 /* codemirror */, - C1EA6ABF1680FE1400A21259 /* json2.js */, - C1EA6AC01680FE1400A21259 /* style.css */, - C1EA6AC11680FE1400A21259 /* yui */, - ); - path = assets; - sourceTree = ""; - }; - C1EA6ABB1680FE1400A21259 /* codemirror */ = { - isa = PBXGroup; - children = ( - C1EA6ABC1680FE1400A21259 /* codemirror.css */, - C1EA6ABD1680FE1400A21259 /* codemirror.js */, - C1EA6ABE1680FE1400A21259 /* javascript.js */, - ); - path = codemirror; - sourceTree = ""; - }; - C1EA6AC11680FE1400A21259 /* yui */ = { - isa = PBXGroup; - children = ( - C1EA6AC21680FE1400A21259 /* treeview-min.js */, - C1EA6AC31680FE1400A21259 /* treeview-sprite.gif */, - C1EA6AC41680FE1400A21259 /* treeview.css */, - C1EA6AC51680FE1400A21259 /* yahoo-dom-event.js */, - ); - path = yui; - sourceTree = ""; - }; - C1EA6AC61680FE1400A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA6AC71680FE1400A21259 /* esparse.js */, - ); - path = bin; - sourceTree = ""; - }; - C1EA6ACA1680FE1400A21259 /* demo */ = { - isa = PBXGroup; - children = ( - C1EA6ACB1680FE1400A21259 /* checkenv.js */, - C1EA6ACC1680FE1400A21259 /* collector.html */, - C1EA6ACD1680FE1400A21259 /* collector.js */, - C1EA6ACE1680FE1400A21259 /* functiontrace.html */, - C1EA6ACF1680FE1400A21259 /* functiontrace.js */, - C1EA6AD01680FE1400A21259 /* parse.css */, - C1EA6AD11680FE1400A21259 /* parse.html */, - C1EA6AD21680FE1400A21259 /* precedence.html */, - C1EA6AD31680FE1400A21259 /* rewrite.html */, - C1EA6AD41680FE1400A21259 /* rewrite.js */, - ); - path = demo; - sourceTree = ""; - }; - C1EA6ADA1680FE1400A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6ADB1680FE1400A21259 /* 3rdparty */, - C1EA6AF21680FE1400A21259 /* benchmarks.html */, - C1EA6AF31680FE1400A21259 /* benchmarks.js */, - C1EA6AF41680FE1400A21259 /* compare.html */, - C1EA6AF51680FE1400A21259 /* compare.js */, - C1EA6AF61680FE1400A21259 /* compat.html */, - C1EA6AF71680FE1400A21259 /* compat.js */, - C1EA6AF81680FE1400A21259 /* coverage.footer.html */, - C1EA6AF91680FE1400A21259 /* coverage.header.html */, - C1EA6AFA1680FE1400A21259 /* coverage.html */, - C1EA6AFB1680FE1400A21259 /* index.html */, - C1EA6AFC1680FE1400A21259 /* reflect.js */, - C1EA6AFD1680FE1400A21259 /* run.js */, - C1EA6AFE1680FE1400A21259 /* test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6ADB1680FE1400A21259 /* 3rdparty */ = { - isa = PBXGroup; - children = ( - C1EA6ADC1680FE1400A21259 /* backbone-0.5.3.js */, - C1EA6ADD1680FE1400A21259 /* benchmark.js */, - C1EA6ADE1680FE1400A21259 /* escodegen.js */, - C1EA6ADF1680FE1400A21259 /* esmorph.js */, - C1EA6AE01680FE1400A21259 /* ext-core-3.0.0.js */, - C1EA6AE11680FE1400A21259 /* ext-core-3.1.0.js */, - C1EA6AE21680FE1400A21259 /* jquery-1.6.4.js */, - C1EA6AE31680FE1400A21259 /* jquery-1.7.1.js */, - C1EA6AE41680FE1400A21259 /* jquery.mobile-1.0.js */, - C1EA6AE51680FE1400A21259 /* jsdefs.js */, - C1EA6AE61680FE1400A21259 /* jslex.js */, - C1EA6AE71680FE1400A21259 /* jsparse.js */, - C1EA6AE81680FE1400A21259 /* mootools-1.3.2.js */, - C1EA6AE91680FE1400A21259 /* mootools-1.4.1.js */, - C1EA6AEA1680FE1400A21259 /* parse-js.js */, - C1EA6AEB1680FE1400A21259 /* platform.js */, - C1EA6AEC1680FE1400A21259 /* prototype-1.6.1.js */, - C1EA6AED1680FE1400A21259 /* prototype-1.7.0.0.js */, - C1EA6AEE1680FE1400A21259 /* Tokenizer.js */, - C1EA6AEF1680FE1400A21259 /* underscore-1.2.3.js */, - C1EA6AF01680FE1400A21259 /* XMLHttpRequest.js */, - C1EA6AF11680FE1400A21259 /* ZeParser.js */, - ); - path = 3rdparty; - sourceTree = ""; - }; - C1EA6AFF1680FE1400A21259 /* tools */ = { - isa = PBXGroup; - children = ( - C1EA6B001680FE1400A21259 /* generate-unicode-regex.py */, - C1EA6B011680FE1400A21259 /* update-coverage.sh */, - ); - path = tools; - sourceTree = ""; - }; - C1EA6B021680FE1400A21259 /* file-loader */ = { - isa = PBXGroup; - children = ( - C1EA6B031680FE1400A21259 /* auto.js */, - C1EA6B041680FE1400A21259 /* html.js */, - C1EA6B051680FE1400A21259 /* index.js */, - C1EA6B061680FE1400A21259 /* index.loader.js */, - C1EA6B071680FE1400A21259 /* jpeg.js */, - C1EA6B081680FE1400A21259 /* jpg.js */, - C1EA6B091680FE1400A21259 /* js.js */, - C1EA6B0A1680FE1400A21259 /* package.json */, - C1EA6B0B1680FE1400A21259 /* png.js */, - C1EA6B0C1680FE1400A21259 /* README.md */, - C1EA6B0D1680FE1400A21259 /* swf.js */, - C1EA6B0E1680FE1400A21259 /* txt.js */, - ); - path = "file-loader"; - sourceTree = ""; - }; - C1EA6B0F1680FE1400A21259 /* jade-loader */ = { - isa = PBXGroup; - children = ( - C1EA6B101680FE1400A21259 /* .npmignore */, - C1EA6B111680FE1400A21259 /* index.js */, - C1EA6B121680FE1400A21259 /* node_modules */, - C1EA6BD41680FE1500A21259 /* package.json */, - C1EA6BD51680FE1500A21259 /* README.md */, - C1EA6BD61680FE1500A21259 /* web_modules */, - ); - path = "jade-loader"; - sourceTree = ""; - }; - C1EA6B121680FE1400A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6B131680FE1400A21259 /* .bin */, - C1EA6B151680FE1400A21259 /* jade */, - C1EA6B7F1680FE1500A21259 /* loader-utils */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6B131680FE1400A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA6B141680FE1400A21259 /* jade */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA6B151680FE1400A21259 /* jade */ = { - isa = PBXGroup; - children = ( - C1EA6B161680FE1400A21259 /* .npmignore */, - C1EA6B171680FE1500A21259 /* bin */, - C1EA6B191680FE1500A21259 /* index.js */, - C1EA6B1A1680FE1500A21259 /* jade.js */, - C1EA6B1B1680FE1500A21259 /* jade.md */, - C1EA6B1C1680FE1500A21259 /* jade.min.js */, - C1EA6B1D1680FE1500A21259 /* lib */, - C1EA6B381680FE1500A21259 /* LICENSE */, - C1EA6B391680FE1500A21259 /* node_modules */, - C1EA6B7B1680FE1500A21259 /* package.json */, - C1EA6B7C1680FE1500A21259 /* Readme.md */, - C1EA6B7D1680FE1500A21259 /* runtime.js */, - C1EA6B7E1680FE1500A21259 /* runtime.min.js */, - ); - path = jade; - sourceTree = ""; - }; - C1EA6B171680FE1500A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA6B181680FE1500A21259 /* jade */, - ); - path = bin; - sourceTree = ""; - }; - C1EA6B1D1680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6B1E1680FE1500A21259 /* compiler.js */, - C1EA6B1F1680FE1500A21259 /* doctypes.js */, - C1EA6B201680FE1500A21259 /* filters.js */, - C1EA6B211680FE1500A21259 /* inline-tags.js */, - C1EA6B221680FE1500A21259 /* jade.js */, - C1EA6B231680FE1500A21259 /* lexer.js */, - C1EA6B241680FE1500A21259 /* nodes */, - C1EA6B341680FE1500A21259 /* parser.js */, - C1EA6B351680FE1500A21259 /* runtime.js */, - C1EA6B361680FE1500A21259 /* self-closing.js */, - C1EA6B371680FE1500A21259 /* utils.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6B241680FE1500A21259 /* nodes */ = { - isa = PBXGroup; - children = ( - C1EA6B251680FE1500A21259 /* attrs.js */, - C1EA6B261680FE1500A21259 /* block-comment.js */, - C1EA6B271680FE1500A21259 /* block.js */, - C1EA6B281680FE1500A21259 /* case.js */, - C1EA6B291680FE1500A21259 /* code.js */, - C1EA6B2A1680FE1500A21259 /* comment.js */, - C1EA6B2B1680FE1500A21259 /* doctype.js */, - C1EA6B2C1680FE1500A21259 /* each.js */, - C1EA6B2D1680FE1500A21259 /* filter.js */, - C1EA6B2E1680FE1500A21259 /* index.js */, - C1EA6B2F1680FE1500A21259 /* literal.js */, - C1EA6B301680FE1500A21259 /* mixin.js */, - C1EA6B311680FE1500A21259 /* node.js */, - C1EA6B321680FE1500A21259 /* tag.js */, - C1EA6B331680FE1500A21259 /* text.js */, - ); - path = nodes; - sourceTree = ""; - }; - C1EA6B391680FE1500A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6B3A1680FE1500A21259 /* .bin */, - C1EA6B3D1680FE1500A21259 /* coffee-script */, - C1EA6B5A1680FE1500A21259 /* commander */, - C1EA6B641680FE1500A21259 /* mkdirp */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6B3A1680FE1500A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA6B3B1680FE1500A21259 /* cake */, - C1EA6B3C1680FE1500A21259 /* coffee */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA6B3D1680FE1500A21259 /* coffee-script */ = { - isa = PBXGroup; - children = ( - C1EA6B3E1680FE1500A21259 /* .npmignore */, - C1EA6B3F1680FE1500A21259 /* bin */, - C1EA6B421680FE1500A21259 /* CNAME */, - C1EA6B431680FE1500A21259 /* CONTRIBUTING.md */, - C1EA6B441680FE1500A21259 /* extras */, - C1EA6B461680FE1500A21259 /* lib */, - C1EA6B561680FE1500A21259 /* LICENSE */, - C1EA6B571680FE1500A21259 /* package.json */, - C1EA6B581680FE1500A21259 /* Rakefile */, - C1EA6B591680FE1500A21259 /* README */, - ); - path = "coffee-script"; - sourceTree = ""; - }; - C1EA6B3F1680FE1500A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA6B401680FE1500A21259 /* cake */, - C1EA6B411680FE1500A21259 /* coffee */, - ); - path = bin; - sourceTree = ""; - }; - C1EA6B441680FE1500A21259 /* extras */ = { - isa = PBXGroup; - children = ( - C1EA6B451680FE1500A21259 /* jsl.conf */, - ); - path = extras; - sourceTree = ""; - }; - C1EA6B461680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6B471680FE1500A21259 /* coffee-script */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6B471680FE1500A21259 /* coffee-script */ = { - isa = PBXGroup; - children = ( - C1EA6B481680FE1500A21259 /* browser.js */, - C1EA6B491680FE1500A21259 /* cake.js */, - C1EA6B4A1680FE1500A21259 /* coffee-script.js */, - C1EA6B4B1680FE1500A21259 /* command.js */, - C1EA6B4C1680FE1500A21259 /* grammar.js */, - C1EA6B4D1680FE1500A21259 /* helpers.js */, - C1EA6B4E1680FE1500A21259 /* index.js */, - C1EA6B4F1680FE1500A21259 /* lexer.js */, - C1EA6B501680FE1500A21259 /* nodes.js */, - C1EA6B511680FE1500A21259 /* optparse.js */, - C1EA6B521680FE1500A21259 /* parser.js */, - C1EA6B531680FE1500A21259 /* repl.js */, - C1EA6B541680FE1500A21259 /* rewriter.js */, - C1EA6B551680FE1500A21259 /* scope.js */, - ); - path = "coffee-script"; - sourceTree = ""; - }; - C1EA6B5A1680FE1500A21259 /* commander */ = { - isa = PBXGroup; - children = ( - C1EA6B5B1680FE1500A21259 /* .npmignore */, - C1EA6B5C1680FE1500A21259 /* .travis.yml */, - C1EA6B5D1680FE1500A21259 /* History.md */, - C1EA6B5E1680FE1500A21259 /* index.js */, - C1EA6B5F1680FE1500A21259 /* lib */, - C1EA6B611680FE1500A21259 /* Makefile */, - C1EA6B621680FE1500A21259 /* package.json */, - C1EA6B631680FE1500A21259 /* Readme.md */, - ); - path = commander; - sourceTree = ""; - }; - C1EA6B5F1680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6B601680FE1500A21259 /* commander.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6B641680FE1500A21259 /* mkdirp */ = { - isa = PBXGroup; - children = ( - C1EA6B651680FE1500A21259 /* .npmignore */, - C1EA6B661680FE1500A21259 /* .travis.yml */, - C1EA6B671680FE1500A21259 /* examples */, - C1EA6B691680FE1500A21259 /* index.js */, - C1EA6B6A1680FE1500A21259 /* LICENSE */, - C1EA6B6B1680FE1500A21259 /* package.json */, - C1EA6B6C1680FE1500A21259 /* README.markdown */, - C1EA6B6D1680FE1500A21259 /* test */, - ); - path = mkdirp; - sourceTree = ""; - }; - C1EA6B671680FE1500A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA6B681680FE1500A21259 /* pow.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA6B6D1680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6B6E1680FE1500A21259 /* chmod.js */, - C1EA6B6F1680FE1500A21259 /* clobber.js */, - C1EA6B701680FE1500A21259 /* mkdirp.js */, - C1EA6B711680FE1500A21259 /* perm.js */, - C1EA6B721680FE1500A21259 /* perm_sync.js */, - C1EA6B731680FE1500A21259 /* race.js */, - C1EA6B741680FE1500A21259 /* rel.js */, - C1EA6B751680FE1500A21259 /* return.js */, - C1EA6B761680FE1500A21259 /* return_sync.js */, - C1EA6B771680FE1500A21259 /* root.js */, - C1EA6B781680FE1500A21259 /* sync.js */, - C1EA6B791680FE1500A21259 /* umask.js */, - C1EA6B7A1680FE1500A21259 /* umask_sync.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6B7F1680FE1500A21259 /* loader-utils */ = { - isa = PBXGroup; - children = ( - C1EA6B801680FE1500A21259 /* .npmignore */, - C1EA6B811680FE1500A21259 /* index.js */, - C1EA6B821680FE1500A21259 /* node_modules */, - C1EA6BD21680FE1500A21259 /* package.json */, - C1EA6BD31680FE1500A21259 /* README.md */, - ); - path = "loader-utils"; - sourceTree = ""; - }; - C1EA6B821680FE1500A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6B831680FE1500A21259 /* .bin */, - C1EA6B851680FE1500A21259 /* json5 */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6B831680FE1500A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA6B841680FE1500A21259 /* json5 */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA6B851680FE1500A21259 /* json5 */ = { - isa = PBXGroup; - children = ( - C1EA6B861680FE1500A21259 /* .npmignore */, - C1EA6B871680FE1500A21259 /* CHANGELOG.md */, - C1EA6B881680FE1500A21259 /* lib */, - C1EA6B8C1680FE1500A21259 /* Makefile */, - C1EA6B8D1680FE1500A21259 /* package.json */, - C1EA6B8E1680FE1500A21259 /* package.json5 */, - C1EA6B8F1680FE1500A21259 /* README.md */, - C1EA6B901680FE1500A21259 /* test */, - ); - path = json5; - sourceTree = ""; - }; - C1EA6B881680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6B891680FE1500A21259 /* cli.js */, - C1EA6B8A1680FE1500A21259 /* json5.js */, - C1EA6B8B1680FE1500A21259 /* require.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6B901680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6B911680FE1500A21259 /* parse-cases */, - C1EA6BCF1680FE1500A21259 /* parse.js */, - C1EA6BD01680FE1500A21259 /* readme.md */, - C1EA6BD11680FE1500A21259 /* require.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6B911680FE1500A21259 /* parse-cases */ = { - isa = PBXGroup; - children = ( - C1EA6B921680FE1500A21259 /* arrays */, - C1EA6B991680FE1500A21259 /* comments */, - C1EA6BA61680FE1500A21259 /* misc */, - C1EA6BAB1680FE1500A21259 /* numbers */, - C1EA6BBD1680FE1500A21259 /* objects */, - C1EA6BC81680FE1500A21259 /* strings */, - C1EA6BCC1680FE1500A21259 /* todo */, - ); - path = "parse-cases"; - sourceTree = ""; - }; - C1EA6B921680FE1500A21259 /* arrays */ = { - isa = PBXGroup; - children = ( - C1EA6B931680FE1500A21259 /* empty-array.json */, - C1EA6B941680FE1500A21259 /* leading-comma-array.js */, - C1EA6B951680FE1500A21259 /* lone-trailing-comma-array.js */, - C1EA6B961680FE1500A21259 /* no-comma-array.txt */, - C1EA6B971680FE1500A21259 /* regular-array.json */, - C1EA6B981680FE1500A21259 /* trailing-comma-array.json5 */, - ); - path = arrays; - sourceTree = ""; - }; - C1EA6B991680FE1500A21259 /* comments */ = { - isa = PBXGroup; - children = ( - C1EA6B9A1680FE1500A21259 /* block-comment-following-array-element.json5 */, - C1EA6B9B1680FE1500A21259 /* block-comment-following-top-level-value.json5 */, - C1EA6B9C1680FE1500A21259 /* block-comment-in-string.json */, - C1EA6B9D1680FE1500A21259 /* block-comment-preceding-top-level-value.json5 */, - C1EA6B9E1680FE1500A21259 /* block-comment-with-asterisks.json5 */, - C1EA6B9F1680FE1500A21259 /* inline-comment-following-array-element.json5 */, - C1EA6BA01680FE1500A21259 /* inline-comment-following-top-level-value.json5 */, - C1EA6BA11680FE1500A21259 /* inline-comment-in-string.json */, - C1EA6BA21680FE1500A21259 /* inline-comment-preceding-top-level-value.json5 */, - C1EA6BA31680FE1500A21259 /* top-level-block-comment.txt */, - C1EA6BA41680FE1500A21259 /* top-level-inline-comment.txt */, - C1EA6BA51680FE1500A21259 /* unterminated-block-comment.txt */, - ); - path = comments; - sourceTree = ""; - }; - C1EA6BA61680FE1500A21259 /* misc */ = { - isa = PBXGroup; - children = ( - C1EA6BA71680FE1500A21259 /* empty.txt */, - C1EA6BA81680FE1500A21259 /* npm-package.json */, - C1EA6BA91680FE1500A21259 /* npm-package.json5 */, - C1EA6BAA1680FE1500A21259 /* readme-example.json5 */, - ); - path = misc; - sourceTree = ""; - }; - C1EA6BAB1680FE1500A21259 /* numbers */ = { - isa = PBXGroup; - children = ( - C1EA6BAC1680FE1500A21259 /* decimal-literal-with-exponent.json */, - C1EA6BAD1680FE1500A21259 /* decimal-literal-with-negative-exponent.json */, - C1EA6BAE1680FE1500A21259 /* decimal-literal.json */, - C1EA6BAF1680FE1500A21259 /* hexadecimal-literal-with-lowercase-letter.json5 */, - C1EA6BB01680FE1500A21259 /* hexadecimal-literal-with-no-digits.txt */, - C1EA6BB11680FE1500A21259 /* hexadecimal-literal-with-uppercase-x.json5 */, - C1EA6BB21680FE1500A21259 /* hexadecimal-literal.json5 */, - C1EA6BB31680FE1500A21259 /* leading-decimal-point.json5 */, - C1EA6BB41680FE1500A21259 /* negative-decimal-literal.json */, - C1EA6BB51680FE1500A21259 /* negative-hexadecimal-literal.json5 */, - C1EA6BB61680FE1500A21259 /* negative-leading-decimal-point.json5 */, - C1EA6BB71680FE1500A21259 /* noctal-literal-with-octal-digit-after-leading-zero.js */, - C1EA6BB81680FE1500A21259 /* noctal-literal.js */, - C1EA6BB91680FE1500A21259 /* octal-literal.txt */, - C1EA6BBA1680FE1500A21259 /* trailing-decimal-point-with-exponent.js */, - C1EA6BBB1680FE1500A21259 /* trailing-decimal-point.js */, - C1EA6BBC1680FE1500A21259 /* zero-literal.json */, - ); - path = numbers; - sourceTree = ""; - }; - C1EA6BBD1680FE1500A21259 /* objects */ = { - isa = PBXGroup; - children = ( - C1EA6BBE1680FE1500A21259 /* empty-object.json */, - C1EA6BBF1680FE1500A21259 /* illegal-unquoted-key-number.txt */, - C1EA6BC01680FE1500A21259 /* illegal-unquoted-key-symbol.txt */, - C1EA6BC11680FE1500A21259 /* leading-comma-object.txt */, - C1EA6BC21680FE1500A21259 /* lone-trailing-comma-object.txt */, - C1EA6BC31680FE1500A21259 /* no-comma-object.txt */, - C1EA6BC41680FE1500A21259 /* reserved-unquoted-key.json5 */, - C1EA6BC51680FE1500A21259 /* single-quoted-key.json5 */, - C1EA6BC61680FE1500A21259 /* trailing-comma-object.json5 */, - C1EA6BC71680FE1500A21259 /* unquoted-keys.json5 */, - ); - path = objects; - sourceTree = ""; - }; - C1EA6BC81680FE1500A21259 /* strings */ = { - isa = PBXGroup; - children = ( - C1EA6BC91680FE1500A21259 /* escaped-single-quoted-string.json5 */, - C1EA6BCA1680FE1500A21259 /* multi-line-string.json5 */, - C1EA6BCB1680FE1500A21259 /* single-quoted-string.json5 */, - ); - path = strings; - sourceTree = ""; - }; - C1EA6BCC1680FE1500A21259 /* todo */ = { - isa = PBXGroup; - children = ( - C1EA6BCD1680FE1500A21259 /* unicode-escaped-unquoted-key.json5 */, - C1EA6BCE1680FE1500A21259 /* unicode-unquoted-key.json5 */, - ); - path = todo; - sourceTree = ""; - }; - C1EA6BD61680FE1500A21259 /* web_modules */ = { - isa = PBXGroup; - children = ( - C1EA6BD71680FE1500A21259 /* fs.js */, - ); - path = web_modules; - sourceTree = ""; - }; - C1EA6BD81680FE1500A21259 /* json-loader */ = { - isa = PBXGroup; - children = ( - C1EA6BD91680FE1500A21259 /* index.js */, - C1EA6BDA1680FE1500A21259 /* package.json */, - C1EA6BDB1680FE1500A21259 /* README.md */, - ); - path = "json-loader"; - sourceTree = ""; - }; - C1EA6BDC1680FE1500A21259 /* less-loader */ = { - isa = PBXGroup; - children = ( - C1EA6BDD1680FE1500A21259 /* .npmignore */, - C1EA6BDE1680FE1500A21259 /* index.js */, - C1EA6BDF1680FE1500A21259 /* node_modules */, - C1EA6C9E1680FE1500A21259 /* package.json */, - C1EA6C9F1680FE1500A21259 /* README.md */, - ); - path = "less-loader"; - sourceTree = ""; - }; - C1EA6BDF1680FE1500A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6BE01680FE1500A21259 /* .bin */, - C1EA6BE21680FE1500A21259 /* less */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6BE01680FE1500A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA6BE11680FE1500A21259 /* lessc */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA6BE21680FE1500A21259 /* less */ = { - isa = PBXGroup; - children = ( - C1EA6BE31680FE1500A21259 /* .npmignore */, - C1EA6BE41680FE1500A21259 /* benchmark */, - C1EA6BE71680FE1500A21259 /* bin */, - C1EA6BE91680FE1500A21259 /* build */, - C1EA6BEF1680FE1500A21259 /* CHANGELOG.md */, - C1EA6BF01680FE1500A21259 /* dist */, - C1EA6C0C1680FE1500A21259 /* lib */, - C1EA6C321680FE1500A21259 /* LICENSE */, - C1EA6C331680FE1500A21259 /* Makefile */, - C1EA6C341680FE1500A21259 /* package.json */, - C1EA6C351680FE1500A21259 /* README.md */, - C1EA6C361680FE1500A21259 /* test */, - ); - path = less; - sourceTree = ""; - }; - C1EA6BE41680FE1500A21259 /* benchmark */ = { - isa = PBXGroup; - children = ( - C1EA6BE51680FE1500A21259 /* benchmark.less */, - C1EA6BE61680FE1500A21259 /* less-benchmark.js */, - ); - path = benchmark; - sourceTree = ""; - }; - C1EA6BE71680FE1500A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA6BE81680FE1500A21259 /* lessc */, - ); - path = bin; - sourceTree = ""; - }; - C1EA6BE91680FE1500A21259 /* build */ = { - isa = PBXGroup; - children = ( - C1EA6BEA1680FE1500A21259 /* amd.js */, - C1EA6BEB1680FE1500A21259 /* ecma-5.js */, - C1EA6BEC1680FE1500A21259 /* header.js */, - C1EA6BED1680FE1500A21259 /* require-rhino.js */, - C1EA6BEE1680FE1500A21259 /* require.js */, - ); - path = build; - sourceTree = ""; - }; - C1EA6BF01680FE1500A21259 /* dist */ = { - isa = PBXGroup; - children = ( - C1EA6BF11680FE1500A21259 /* less-1.1.0.js */, - C1EA6BF21680FE1500A21259 /* less-1.1.0.min.js */, - C1EA6BF31680FE1500A21259 /* less-1.1.1.js */, - C1EA6BF41680FE1500A21259 /* less-1.1.1.min.js */, - C1EA6BF51680FE1500A21259 /* less-1.1.2.js */, - C1EA6BF61680FE1500A21259 /* less-1.1.2.min.js */, - C1EA6BF71680FE1500A21259 /* less-1.1.3.js */, - C1EA6BF81680FE1500A21259 /* less-1.1.3.min.js */, - C1EA6BF91680FE1500A21259 /* less-1.1.4.js */, - C1EA6BFA1680FE1500A21259 /* less-1.1.4.min.js */, - C1EA6BFB1680FE1500A21259 /* less-1.1.5.js */, - C1EA6BFC1680FE1500A21259 /* less-1.1.5.min.js */, - C1EA6BFD1680FE1500A21259 /* less-1.1.6.js */, - C1EA6BFE1680FE1500A21259 /* less-1.1.6.min.js */, - C1EA6BFF1680FE1500A21259 /* less-1.2.0.js */, - C1EA6C001680FE1500A21259 /* less-1.2.0.min.js */, - C1EA6C011680FE1500A21259 /* less-1.2.1.js */, - C1EA6C021680FE1500A21259 /* less-1.2.1.min.js */, - C1EA6C031680FE1500A21259 /* less-1.2.2.js */, - C1EA6C041680FE1500A21259 /* less-1.2.2.min.js */, - C1EA6C051680FE1500A21259 /* less-1.3.0.js */, - C1EA6C061680FE1500A21259 /* less-1.3.0.min.js */, - C1EA6C071680FE1500A21259 /* less-1.3.1.js */, - C1EA6C081680FE1500A21259 /* less-1.3.1.min.js */, - C1EA6C091680FE1500A21259 /* less-rhino-1.1.3.js */, - C1EA6C0A1680FE1500A21259 /* less-rhino-1.1.5.js */, - C1EA6C0B1680FE1500A21259 /* less-rhino-1.3.1.js */, - ); - path = dist; - sourceTree = ""; - }; - C1EA6C0C1680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6C0D1680FE1500A21259 /* less */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6C0D1680FE1500A21259 /* less */ = { - isa = PBXGroup; - children = ( - C1EA6C0E1680FE1500A21259 /* browser.js */, - C1EA6C0F1680FE1500A21259 /* colors.js */, - C1EA6C101680FE1500A21259 /* cssmin.js */, - C1EA6C111680FE1500A21259 /* functions.js */, - C1EA6C121680FE1500A21259 /* index.js */, - C1EA6C131680FE1500A21259 /* lessc_helper.js */, - C1EA6C141680FE1500A21259 /* parser.js */, - C1EA6C151680FE1500A21259 /* rhino.js */, - C1EA6C161680FE1500A21259 /* tree */, - C1EA6C311680FE1500A21259 /* tree.js */, - ); - path = less; - sourceTree = ""; - }; - C1EA6C161680FE1500A21259 /* tree */ = { - isa = PBXGroup; - children = ( - C1EA6C171680FE1500A21259 /* alpha.js */, - C1EA6C181680FE1500A21259 /* anonymous.js */, - C1EA6C191680FE1500A21259 /* assignment.js */, - C1EA6C1A1680FE1500A21259 /* call.js */, - C1EA6C1B1680FE1500A21259 /* color.js */, - C1EA6C1C1680FE1500A21259 /* comment.js */, - C1EA6C1D1680FE1500A21259 /* condition.js */, - C1EA6C1E1680FE1500A21259 /* dimension.js */, - C1EA6C1F1680FE1500A21259 /* directive.js */, - C1EA6C201680FE1500A21259 /* element.js */, - C1EA6C211680FE1500A21259 /* expression.js */, - C1EA6C221680FE1500A21259 /* import.js */, - C1EA6C231680FE1500A21259 /* javascript.js */, - C1EA6C241680FE1500A21259 /* keyword.js */, - C1EA6C251680FE1500A21259 /* media.js */, - C1EA6C261680FE1500A21259 /* mixin.js */, - C1EA6C271680FE1500A21259 /* operation.js */, - C1EA6C281680FE1500A21259 /* paren.js */, - C1EA6C291680FE1500A21259 /* quoted.js */, - C1EA6C2A1680FE1500A21259 /* ratio.js */, - C1EA6C2B1680FE1500A21259 /* rule.js */, - C1EA6C2C1680FE1500A21259 /* ruleset.js */, - C1EA6C2D1680FE1500A21259 /* selector.js */, - C1EA6C2E1680FE1500A21259 /* url.js */, - C1EA6C2F1680FE1500A21259 /* value.js */, - C1EA6C301680FE1500A21259 /* variable.js */, - ); - path = tree; - sourceTree = ""; - }; - C1EA6C361680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6C371680FE1500A21259 /* css */, - C1EA6C581680FE1500A21259 /* less */, - C1EA6C9D1680FE1500A21259 /* less-test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6C371680FE1500A21259 /* css */ = { - isa = PBXGroup; - children = ( - C1EA6C381680FE1500A21259 /* colors.css */, - C1EA6C391680FE1500A21259 /* comments.css */, - C1EA6C3A1680FE1500A21259 /* css-3.css */, - C1EA6C3B1680FE1500A21259 /* css-escapes.css */, - C1EA6C3C1680FE1500A21259 /* css.css */, - C1EA6C3D1680FE1500A21259 /* debug */, - C1EA6C411680FE1500A21259 /* functions.css */, - C1EA6C421680FE1500A21259 /* ie-filters.css */, - C1EA6C431680FE1500A21259 /* import-once.css */, - C1EA6C441680FE1500A21259 /* import.css */, - C1EA6C451680FE1500A21259 /* javascript.css */, - C1EA6C461680FE1500A21259 /* lazy-eval.css */, - C1EA6C471680FE1500A21259 /* media.css */, - C1EA6C481680FE1500A21259 /* mixins-args.css */, - C1EA6C491680FE1500A21259 /* mixins-closure.css */, - C1EA6C4A1680FE1500A21259 /* mixins-guards.css */, - C1EA6C4B1680FE1500A21259 /* mixins-important.css */, - C1EA6C4C1680FE1500A21259 /* mixins-named-args.css */, - C1EA6C4D1680FE1500A21259 /* mixins-nested.css */, - C1EA6C4E1680FE1500A21259 /* mixins-pattern.css */, - C1EA6C4F1680FE1500A21259 /* mixins.css */, - C1EA6C501680FE1500A21259 /* operations.css */, - C1EA6C511680FE1500A21259 /* parens.css */, - C1EA6C521680FE1500A21259 /* rulesets.css */, - C1EA6C531680FE1500A21259 /* scope.css */, - C1EA6C541680FE1500A21259 /* selectors.css */, - C1EA6C551680FE1500A21259 /* strings.css */, - C1EA6C561680FE1500A21259 /* variables.css */, - C1EA6C571680FE1500A21259 /* whitespace.css */, - ); - path = css; - sourceTree = ""; - }; - C1EA6C3D1680FE1500A21259 /* debug */ = { - isa = PBXGroup; - children = ( - C1EA6C3E1680FE1500A21259 /* linenumbers-all.css */, - C1EA6C3F1680FE1500A21259 /* linenumbers-comments.css */, - C1EA6C401680FE1500A21259 /* linenumbers-mediaquery.css */, - ); - path = debug; - sourceTree = ""; - }; - C1EA6C581680FE1500A21259 /* less */ = { - isa = PBXGroup; - children = ( - C1EA6C591680FE1500A21259 /* colors.less */, - C1EA6C5A1680FE1500A21259 /* comments.less */, - C1EA6C5B1680FE1500A21259 /* css-3.less */, - C1EA6C5C1680FE1500A21259 /* css-escapes.less */, - C1EA6C5D1680FE1500A21259 /* css.less */, - C1EA6C5E1680FE1500A21259 /* debug */, - C1EA6C621680FE1500A21259 /* errors */, - C1EA6C7D1680FE1500A21259 /* functions.less */, - C1EA6C7E1680FE1500A21259 /* ie-filters.less */, - C1EA6C7F1680FE1500A21259 /* import */, - C1EA6C881680FE1500A21259 /* import-once.less */, - C1EA6C891680FE1500A21259 /* import.less */, - C1EA6C8A1680FE1500A21259 /* javascript.less */, - C1EA6C8B1680FE1500A21259 /* lazy-eval.less */, - C1EA6C8C1680FE1500A21259 /* media.less */, - C1EA6C8D1680FE1500A21259 /* mixins-args.less */, - C1EA6C8E1680FE1500A21259 /* mixins-closure.less */, - C1EA6C8F1680FE1500A21259 /* mixins-guards.less */, - C1EA6C901680FE1500A21259 /* mixins-important.less */, - C1EA6C911680FE1500A21259 /* mixins-named-args.less */, - C1EA6C921680FE1500A21259 /* mixins-nested.less */, - C1EA6C931680FE1500A21259 /* mixins-pattern.less */, - C1EA6C941680FE1500A21259 /* mixins.less */, - C1EA6C951680FE1500A21259 /* operations.less */, - C1EA6C961680FE1500A21259 /* parens.less */, - C1EA6C971680FE1500A21259 /* rulesets.less */, - C1EA6C981680FE1500A21259 /* scope.less */, - C1EA6C991680FE1500A21259 /* selectors.less */, - C1EA6C9A1680FE1500A21259 /* strings.less */, - C1EA6C9B1680FE1500A21259 /* variables.less */, - C1EA6C9C1680FE1500A21259 /* whitespace.less */, - ); - path = less; - sourceTree = ""; - }; - C1EA6C5E1680FE1500A21259 /* debug */ = { - isa = PBXGroup; - children = ( - C1EA6C5F1680FE1500A21259 /* import */, - C1EA6C611680FE1500A21259 /* linenumbers.less */, - ); - path = debug; - sourceTree = ""; - }; - C1EA6C5F1680FE1500A21259 /* import */ = { - isa = PBXGroup; - children = ( - C1EA6C601680FE1500A21259 /* test.less */, - ); - path = import; - sourceTree = ""; - }; - C1EA6C621680FE1500A21259 /* errors */ = { - isa = PBXGroup; - children = ( - C1EA6C631680FE1500A21259 /* comment-in-selector.less */, - C1EA6C641680FE1500A21259 /* comment-in-selector.txt */, - C1EA6C651680FE1500A21259 /* import-missing.less */, - C1EA6C661680FE1500A21259 /* import-missing.txt */, - C1EA6C671680FE1500A21259 /* import-no-semi.less */, - C1EA6C681680FE1500A21259 /* import-no-semi.txt */, - C1EA6C691680FE1500A21259 /* import-subfolder1.less */, - C1EA6C6A1680FE1500A21259 /* import-subfolder1.txt */, - C1EA6C6B1680FE1500A21259 /* import-subfolder2.less */, - C1EA6C6C1680FE1500A21259 /* import-subfolder2.txt */, - C1EA6C6D1680FE1500A21259 /* imports */, - C1EA6C731680FE1500A21259 /* javascript-error.less */, - C1EA6C741680FE1500A21259 /* javascript-error.txt */, - C1EA6C751680FE1500A21259 /* mixin-not-defined.less */, - C1EA6C761680FE1500A21259 /* mixin-not-defined.txt */, - C1EA6C771680FE1500A21259 /* parse-error-curly-bracket.less */, - C1EA6C781680FE1500A21259 /* parse-error-curly-bracket.txt */, - C1EA6C791680FE1500A21259 /* parse-error-missing-bracket.less */, - C1EA6C7A1680FE1500A21259 /* parse-error-missing-bracket.txt */, - C1EA6C7B1680FE1500A21259 /* property-ie5-hack.less */, - C1EA6C7C1680FE1500A21259 /* property-ie5-hack.txt */, - ); - path = errors; - sourceTree = ""; - }; - C1EA6C6D1680FE1500A21259 /* imports */ = { - isa = PBXGroup; - children = ( - C1EA6C6E1680FE1500A21259 /* import-subfolder1.less */, - C1EA6C6F1680FE1500A21259 /* import-subfolder2.less */, - C1EA6C701680FE1500A21259 /* subfolder */, - ); - path = imports; - sourceTree = ""; - }; - C1EA6C701680FE1500A21259 /* subfolder */ = { - isa = PBXGroup; - children = ( - C1EA6C711680FE1500A21259 /* mixin-not-defined.less */, - C1EA6C721680FE1500A21259 /* parse-error-curly-bracket.less */, - ); - path = subfolder; - sourceTree = ""; - }; - C1EA6C7F1680FE1500A21259 /* import */ = { - isa = PBXGroup; - children = ( - C1EA6C801680FE1500A21259 /* deeper */, - C1EA6C821680FE1500A21259 /* import-once-test-c.less */, - C1EA6C831680FE1500A21259 /* import-test-a.less */, - C1EA6C841680FE1500A21259 /* import-test-b.less */, - C1EA6C851680FE1500A21259 /* import-test-c.less */, - C1EA6C861680FE1500A21259 /* import-test-d.css */, - C1EA6C871680FE1500A21259 /* import-test-e.less */, - ); - path = import; - sourceTree = ""; - }; - C1EA6C801680FE1500A21259 /* deeper */ = { - isa = PBXGroup; - children = ( - C1EA6C811680FE1500A21259 /* import-once-test-a.less */, - ); - path = deeper; - sourceTree = ""; - }; - C1EA6CA01680FE1500A21259 /* optimist */ = { - isa = PBXGroup; - children = ( - C1EA6CA11680FE1500A21259 /* .npmignore */, - C1EA6CA21680FE1500A21259 /* examples */, - C1EA6CB21680FE1500A21259 /* index.js */, - C1EA6CB31680FE1500A21259 /* LICENSE */, - C1EA6CB41680FE1500A21259 /* node_modules */, - C1EA6CC11680FE1500A21259 /* package.json */, - C1EA6CC21680FE1500A21259 /* README.markdown */, - C1EA6CC31680FE1500A21259 /* test */, - ); - path = optimist; - sourceTree = ""; - }; - C1EA6CA21680FE1500A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA6CA31680FE1500A21259 /* bool.js */, - C1EA6CA41680FE1500A21259 /* boolean_double.js */, - C1EA6CA51680FE1500A21259 /* boolean_single.js */, - C1EA6CA61680FE1500A21259 /* default_hash.js */, - C1EA6CA71680FE1500A21259 /* default_singles.js */, - C1EA6CA81680FE1500A21259 /* divide.js */, - C1EA6CA91680FE1500A21259 /* line_count.js */, - C1EA6CAA1680FE1500A21259 /* line_count_options.js */, - C1EA6CAB1680FE1500A21259 /* line_count_wrap.js */, - C1EA6CAC1680FE1500A21259 /* nonopt.js */, - C1EA6CAD1680FE1500A21259 /* reflect.js */, - C1EA6CAE1680FE1500A21259 /* short.js */, - C1EA6CAF1680FE1500A21259 /* string.js */, - C1EA6CB01680FE1500A21259 /* usage-options.js */, - C1EA6CB11680FE1500A21259 /* xup.js */, - ); - path = examples; - sourceTree = ""; - }; - C1EA6CB41680FE1500A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6CB51680FE1500A21259 /* wordwrap */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6CB51680FE1500A21259 /* wordwrap */ = { - isa = PBXGroup; - children = ( - C1EA6CB61680FE1500A21259 /* .npmignore */, - C1EA6CB71680FE1500A21259 /* example */, - C1EA6CBA1680FE1500A21259 /* index.js */, - C1EA6CBB1680FE1500A21259 /* package.json */, - C1EA6CBC1680FE1500A21259 /* README.markdown */, - C1EA6CBD1680FE1500A21259 /* test */, - ); - path = wordwrap; - sourceTree = ""; - }; - C1EA6CB71680FE1500A21259 /* example */ = { - isa = PBXGroup; - children = ( - C1EA6CB81680FE1500A21259 /* center.js */, - C1EA6CB91680FE1500A21259 /* meat.js */, - ); - path = example; - sourceTree = ""; - }; - C1EA6CBD1680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6CBE1680FE1500A21259 /* break.js */, - C1EA6CBF1680FE1500A21259 /* idleness.txt */, - C1EA6CC01680FE1500A21259 /* wrap.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6CC31680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6CC41680FE1500A21259 /* _ */, - C1EA6CC71680FE1500A21259 /* _.js */, - C1EA6CC81680FE1500A21259 /* parse.js */, - C1EA6CC91680FE1500A21259 /* usage.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6CC41680FE1500A21259 /* _ */ = { - isa = PBXGroup; - children = ( - C1EA6CC51680FE1500A21259 /* argv.js */, - C1EA6CC61680FE1500A21259 /* bin.js */, - ); - path = _; - sourceTree = ""; - }; - C1EA6CCA1680FE1500A21259 /* raw-loader */ = { - isa = PBXGroup; - children = ( - C1EA6CCB1680FE1500A21259 /* index.js */, - C1EA6CCC1680FE1500A21259 /* package.json */, - C1EA6CCD1680FE1500A21259 /* README.md */, - ); - path = "raw-loader"; - sourceTree = ""; - }; - C1EA6CCE1680FE1500A21259 /* script-loader */ = { - isa = PBXGroup; - children = ( - C1EA6CCF1680FE1500A21259 /* .npmignore */, - C1EA6CD01680FE1500A21259 /* addScript.js */, - C1EA6CD11680FE1500A21259 /* addScript.web.js */, - C1EA6CD21680FE1500A21259 /* index.js */, - C1EA6CD31680FE1500A21259 /* node_modules */, - C1EA6D2D1680FE1500A21259 /* package.json */, - C1EA6D2E1680FE1500A21259 /* README.md */, - ); - path = "script-loader"; - sourceTree = ""; - }; - C1EA6CD31680FE1500A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6CD41680FE1500A21259 /* loader-utils */, - C1EA6D291680FE1500A21259 /* raw-loader */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6CD41680FE1500A21259 /* loader-utils */ = { - isa = PBXGroup; - children = ( - C1EA6CD51680FE1500A21259 /* .npmignore */, - C1EA6CD61680FE1500A21259 /* index.js */, - C1EA6CD71680FE1500A21259 /* node_modules */, - C1EA6D271680FE1500A21259 /* package.json */, - C1EA6D281680FE1500A21259 /* README.md */, - ); - path = "loader-utils"; - sourceTree = ""; - }; - C1EA6CD71680FE1500A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6CD81680FE1500A21259 /* .bin */, - C1EA6CDA1680FE1500A21259 /* json5 */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6CD81680FE1500A21259 /* .bin */ = { - isa = PBXGroup; - children = ( - C1EA6CD91680FE1500A21259 /* json5 */, - ); - path = .bin; - sourceTree = ""; - }; - C1EA6CDA1680FE1500A21259 /* json5 */ = { - isa = PBXGroup; - children = ( - C1EA6CDB1680FE1500A21259 /* .npmignore */, - C1EA6CDC1680FE1500A21259 /* CHANGELOG.md */, - C1EA6CDD1680FE1500A21259 /* lib */, - C1EA6CE11680FE1500A21259 /* Makefile */, - C1EA6CE21680FE1500A21259 /* package.json */, - C1EA6CE31680FE1500A21259 /* package.json5 */, - C1EA6CE41680FE1500A21259 /* README.md */, - C1EA6CE51680FE1500A21259 /* test */, - ); - path = json5; - sourceTree = ""; - }; - C1EA6CDD1680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6CDE1680FE1500A21259 /* cli.js */, - C1EA6CDF1680FE1500A21259 /* json5.js */, - C1EA6CE01680FE1500A21259 /* require.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6CE51680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6CE61680FE1500A21259 /* parse-cases */, - C1EA6D241680FE1500A21259 /* parse.js */, - C1EA6D251680FE1500A21259 /* readme.md */, - C1EA6D261680FE1500A21259 /* require.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6CE61680FE1500A21259 /* parse-cases */ = { - isa = PBXGroup; - children = ( - C1EA6CE71680FE1500A21259 /* arrays */, - C1EA6CEE1680FE1500A21259 /* comments */, - C1EA6CFB1680FE1500A21259 /* misc */, - C1EA6D001680FE1500A21259 /* numbers */, - C1EA6D121680FE1500A21259 /* objects */, - C1EA6D1D1680FE1500A21259 /* strings */, - C1EA6D211680FE1500A21259 /* todo */, - ); - path = "parse-cases"; - sourceTree = ""; - }; - C1EA6CE71680FE1500A21259 /* arrays */ = { - isa = PBXGroup; - children = ( - C1EA6CE81680FE1500A21259 /* empty-array.json */, - C1EA6CE91680FE1500A21259 /* leading-comma-array.js */, - C1EA6CEA1680FE1500A21259 /* lone-trailing-comma-array.js */, - C1EA6CEB1680FE1500A21259 /* no-comma-array.txt */, - C1EA6CEC1680FE1500A21259 /* regular-array.json */, - C1EA6CED1680FE1500A21259 /* trailing-comma-array.json5 */, - ); - path = arrays; - sourceTree = ""; - }; - C1EA6CEE1680FE1500A21259 /* comments */ = { - isa = PBXGroup; - children = ( - C1EA6CEF1680FE1500A21259 /* block-comment-following-array-element.json5 */, - C1EA6CF01680FE1500A21259 /* block-comment-following-top-level-value.json5 */, - C1EA6CF11680FE1500A21259 /* block-comment-in-string.json */, - C1EA6CF21680FE1500A21259 /* block-comment-preceding-top-level-value.json5 */, - C1EA6CF31680FE1500A21259 /* block-comment-with-asterisks.json5 */, - C1EA6CF41680FE1500A21259 /* inline-comment-following-array-element.json5 */, - C1EA6CF51680FE1500A21259 /* inline-comment-following-top-level-value.json5 */, - C1EA6CF61680FE1500A21259 /* inline-comment-in-string.json */, - C1EA6CF71680FE1500A21259 /* inline-comment-preceding-top-level-value.json5 */, - C1EA6CF81680FE1500A21259 /* top-level-block-comment.txt */, - C1EA6CF91680FE1500A21259 /* top-level-inline-comment.txt */, - C1EA6CFA1680FE1500A21259 /* unterminated-block-comment.txt */, - ); - path = comments; - sourceTree = ""; - }; - C1EA6CFB1680FE1500A21259 /* misc */ = { - isa = PBXGroup; - children = ( - C1EA6CFC1680FE1500A21259 /* empty.txt */, - C1EA6CFD1680FE1500A21259 /* npm-package.json */, - C1EA6CFE1680FE1500A21259 /* npm-package.json5 */, - C1EA6CFF1680FE1500A21259 /* readme-example.json5 */, - ); - path = misc; - sourceTree = ""; - }; - C1EA6D001680FE1500A21259 /* numbers */ = { - isa = PBXGroup; - children = ( - C1EA6D011680FE1500A21259 /* decimal-literal-with-exponent.json */, - C1EA6D021680FE1500A21259 /* decimal-literal-with-negative-exponent.json */, - C1EA6D031680FE1500A21259 /* decimal-literal.json */, - C1EA6D041680FE1500A21259 /* hexadecimal-literal-with-lowercase-letter.json5 */, - C1EA6D051680FE1500A21259 /* hexadecimal-literal-with-no-digits.txt */, - C1EA6D061680FE1500A21259 /* hexadecimal-literal-with-uppercase-x.json5 */, - C1EA6D071680FE1500A21259 /* hexadecimal-literal.json5 */, - C1EA6D081680FE1500A21259 /* leading-decimal-point.json5 */, - C1EA6D091680FE1500A21259 /* negative-decimal-literal.json */, - C1EA6D0A1680FE1500A21259 /* negative-hexadecimal-literal.json5 */, - C1EA6D0B1680FE1500A21259 /* negative-leading-decimal-point.json5 */, - C1EA6D0C1680FE1500A21259 /* noctal-literal-with-octal-digit-after-leading-zero.js */, - C1EA6D0D1680FE1500A21259 /* noctal-literal.js */, - C1EA6D0E1680FE1500A21259 /* octal-literal.txt */, - C1EA6D0F1680FE1500A21259 /* trailing-decimal-point-with-exponent.js */, - C1EA6D101680FE1500A21259 /* trailing-decimal-point.js */, - C1EA6D111680FE1500A21259 /* zero-literal.json */, - ); - path = numbers; - sourceTree = ""; - }; - C1EA6D121680FE1500A21259 /* objects */ = { - isa = PBXGroup; - children = ( - C1EA6D131680FE1500A21259 /* empty-object.json */, - C1EA6D141680FE1500A21259 /* illegal-unquoted-key-number.txt */, - C1EA6D151680FE1500A21259 /* illegal-unquoted-key-symbol.txt */, - C1EA6D161680FE1500A21259 /* leading-comma-object.txt */, - C1EA6D171680FE1500A21259 /* lone-trailing-comma-object.txt */, - C1EA6D181680FE1500A21259 /* no-comma-object.txt */, - C1EA6D191680FE1500A21259 /* reserved-unquoted-key.json5 */, - C1EA6D1A1680FE1500A21259 /* single-quoted-key.json5 */, - C1EA6D1B1680FE1500A21259 /* trailing-comma-object.json5 */, - C1EA6D1C1680FE1500A21259 /* unquoted-keys.json5 */, - ); - path = objects; - sourceTree = ""; - }; - C1EA6D1D1680FE1500A21259 /* strings */ = { - isa = PBXGroup; - children = ( - C1EA6D1E1680FE1500A21259 /* escaped-single-quoted-string.json5 */, - C1EA6D1F1680FE1500A21259 /* multi-line-string.json5 */, - C1EA6D201680FE1500A21259 /* single-quoted-string.json5 */, - ); - path = strings; - sourceTree = ""; - }; - C1EA6D211680FE1500A21259 /* todo */ = { - isa = PBXGroup; - children = ( - C1EA6D221680FE1500A21259 /* unicode-escaped-unquoted-key.json5 */, - C1EA6D231680FE1500A21259 /* unicode-unquoted-key.json5 */, - ); - path = todo; - sourceTree = ""; - }; - C1EA6D291680FE1500A21259 /* raw-loader */ = { - isa = PBXGroup; - children = ( - C1EA6D2A1680FE1500A21259 /* index.js */, - C1EA6D2B1680FE1500A21259 /* package.json */, - C1EA6D2C1680FE1500A21259 /* README.md */, - ); - path = "raw-loader"; - sourceTree = ""; - }; - C1EA6D2F1680FE1500A21259 /* sprintf */ = { - isa = PBXGroup; - children = ( - C1EA6D301680FE1500A21259 /* lib */, - C1EA6D321680FE1500A21259 /* package.json */, - C1EA6D331680FE1500A21259 /* README.md */, - ); - path = sprintf; - sourceTree = ""; - }; - C1EA6D301680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6D311680FE1500A21259 /* sprintf.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6D341680FE1500A21259 /* style-loader */ = { - isa = PBXGroup; - children = ( - C1EA6D351680FE1500A21259 /* addStyle.js */, - C1EA6D361680FE1500A21259 /* addStyle.web.js */, - C1EA6D371680FE1500A21259 /* index.js */, - C1EA6D381680FE1500A21259 /* package.json */, - C1EA6D391680FE1500A21259 /* README.md */, - ); - path = "style-loader"; - sourceTree = ""; - }; - C1EA6D3A1680FE1500A21259 /* uglify-js */ = { - isa = PBXGroup; - children = ( - C1EA6D3B1680FE1500A21259 /* .npmignore */, - C1EA6D3C1680FE1500A21259 /* bin */, - C1EA6D3E1680FE1500A21259 /* docstyle.css */, - C1EA6D3F1680FE1500A21259 /* lib */, - C1EA6D451680FE1500A21259 /* package.json */, - C1EA6D461680FE1500A21259 /* README.html */, - C1EA6D471680FE1500A21259 /* README.org */, - C1EA6D481680FE1500A21259 /* test */, - C1EA6DA21680FE1500A21259 /* tmp */, - C1EA6DAF1680FE1500A21259 /* uglify-js.js */, - ); - path = "uglify-js"; - sourceTree = ""; - }; - C1EA6D3C1680FE1500A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA6D3D1680FE1500A21259 /* uglifyjs */, - ); - path = bin; - sourceTree = ""; - }; - C1EA6D3F1680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6D401680FE1500A21259 /* consolidator.js */, - C1EA6D411680FE1500A21259 /* object-ast.js */, - C1EA6D421680FE1500A21259 /* parse-js.js */, - C1EA6D431680FE1500A21259 /* process.js */, - C1EA6D441680FE1500A21259 /* squeeze-more.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6D481680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6D491680FE1500A21259 /* beautify.js */, - C1EA6D4A1680FE1500A21259 /* testparser.js */, - C1EA6D4B1680FE1500A21259 /* unit */, - ); - path = test; - sourceTree = ""; - }; - C1EA6D4B1680FE1500A21259 /* unit */ = { - isa = PBXGroup; - children = ( - C1EA6D4C1680FE1500A21259 /* compress */, - C1EA6DA11680FE1500A21259 /* scripts.js */, - ); - path = unit; - sourceTree = ""; - }; - C1EA6D4C1680FE1500A21259 /* compress */ = { - isa = PBXGroup; - children = ( - C1EA6D4D1680FE1500A21259 /* expected */, - C1EA6D771680FE1500A21259 /* test */, - ); - path = compress; - sourceTree = ""; - }; - C1EA6D4D1680FE1500A21259 /* expected */ = { - isa = PBXGroup; - children = ( - C1EA6D4E1680FE1500A21259 /* array1.js */, - C1EA6D4F1680FE1500A21259 /* array2.js */, - C1EA6D501680FE1500A21259 /* array3.js */, - C1EA6D511680FE1500A21259 /* array4.js */, - C1EA6D521680FE1500A21259 /* assignment.js */, - C1EA6D531680FE1500A21259 /* concatstring.js */, - C1EA6D541680FE1500A21259 /* const.js */, - C1EA6D551680FE1500A21259 /* empty-blocks.js */, - C1EA6D561680FE1500A21259 /* forstatement.js */, - C1EA6D571680FE1500A21259 /* if.js */, - C1EA6D581680FE1500A21259 /* ifreturn.js */, - C1EA6D591680FE1500A21259 /* ifreturn2.js */, - C1EA6D5A1680FE1500A21259 /* issue10.js */, - C1EA6D5B1680FE1500A21259 /* issue11.js */, - C1EA6D5C1680FE1500A21259 /* issue13.js */, - C1EA6D5D1680FE1500A21259 /* issue14.js */, - C1EA6D5E1680FE1500A21259 /* issue16.js */, - C1EA6D5F1680FE1500A21259 /* issue17.js */, - C1EA6D601680FE1500A21259 /* issue20.js */, - C1EA6D611680FE1500A21259 /* issue21.js */, - C1EA6D621680FE1500A21259 /* issue25.js */, - C1EA6D631680FE1500A21259 /* issue27.js */, - C1EA6D641680FE1500A21259 /* issue278.js */, - C1EA6D651680FE1500A21259 /* issue28.js */, - C1EA6D661680FE1500A21259 /* issue29.js */, - C1EA6D671680FE1500A21259 /* issue30.js */, - C1EA6D681680FE1500A21259 /* issue34.js */, - C1EA6D691680FE1500A21259 /* issue4.js */, - C1EA6D6A1680FE1500A21259 /* issue48.js */, - C1EA6D6B1680FE1500A21259 /* issue50.js */, - C1EA6D6C1680FE1500A21259 /* issue53.js */, - C1EA6D6D1680FE1500A21259 /* issue54.1.js */, - C1EA6D6E1680FE1500A21259 /* issue68.js */, - C1EA6D6F1680FE1500A21259 /* issue69.js */, - C1EA6D701680FE1500A21259 /* issue9.js */, - C1EA6D711680FE1500A21259 /* mangle.js */, - C1EA6D721680FE1500A21259 /* null_string.js */, - C1EA6D731680FE1500A21259 /* strict-equals.js */, - C1EA6D741680FE1500A21259 /* var.js */, - C1EA6D751680FE1500A21259 /* whitespace.js */, - C1EA6D761680FE1500A21259 /* with.js */, - ); - path = expected; - sourceTree = ""; - }; - C1EA6D771680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6D781680FE1500A21259 /* array1.js */, - C1EA6D791680FE1500A21259 /* array2.js */, - C1EA6D7A1680FE1500A21259 /* array3.js */, - C1EA6D7B1680FE1500A21259 /* array4.js */, - C1EA6D7C1680FE1500A21259 /* assignment.js */, - C1EA6D7D1680FE1500A21259 /* concatstring.js */, - C1EA6D7E1680FE1500A21259 /* const.js */, - C1EA6D7F1680FE1500A21259 /* empty-blocks.js */, - C1EA6D801680FE1500A21259 /* forstatement.js */, - C1EA6D811680FE1500A21259 /* if.js */, - C1EA6D821680FE1500A21259 /* ifreturn.js */, - C1EA6D831680FE1500A21259 /* ifreturn2.js */, - C1EA6D841680FE1500A21259 /* issue10.js */, - C1EA6D851680FE1500A21259 /* issue11.js */, - C1EA6D861680FE1500A21259 /* issue13.js */, - C1EA6D871680FE1500A21259 /* issue14.js */, - C1EA6D881680FE1500A21259 /* issue16.js */, - C1EA6D891680FE1500A21259 /* issue17.js */, - C1EA6D8A1680FE1500A21259 /* issue20.js */, - C1EA6D8B1680FE1500A21259 /* issue21.js */, - C1EA6D8C1680FE1500A21259 /* issue25.js */, - C1EA6D8D1680FE1500A21259 /* issue27.js */, - C1EA6D8E1680FE1500A21259 /* issue278.js */, - C1EA6D8F1680FE1500A21259 /* issue28.js */, - C1EA6D901680FE1500A21259 /* issue29.js */, - C1EA6D911680FE1500A21259 /* issue30.js */, - C1EA6D921680FE1500A21259 /* issue34.js */, - C1EA6D931680FE1500A21259 /* issue4.js */, - C1EA6D941680FE1500A21259 /* issue48.js */, - C1EA6D951680FE1500A21259 /* issue50.js */, - C1EA6D961680FE1500A21259 /* issue53.js */, - C1EA6D971680FE1500A21259 /* issue54.1.js */, - C1EA6D981680FE1500A21259 /* issue68.js */, - C1EA6D991680FE1500A21259 /* issue69.js */, - C1EA6D9A1680FE1500A21259 /* issue9.js */, - C1EA6D9B1680FE1500A21259 /* mangle.js */, - C1EA6D9C1680FE1500A21259 /* null_string.js */, - C1EA6D9D1680FE1500A21259 /* strict-equals.js */, - C1EA6D9E1680FE1500A21259 /* var.js */, - C1EA6D9F1680FE1500A21259 /* whitespace.js */, - C1EA6DA01680FE1500A21259 /* with.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6DA21680FE1500A21259 /* tmp */ = { - isa = PBXGroup; - children = ( - C1EA6DA31680FE1500A21259 /* 269.js */, - C1EA6DA41680FE1500A21259 /* app.js */, - C1EA6DA51680FE1500A21259 /* embed-tokens.js */, - C1EA6DA61680FE1500A21259 /* goto.js */, - C1EA6DA71680FE1500A21259 /* goto2.js */, - C1EA6DA81680FE1500A21259 /* hoist.js */, - C1EA6DA91680FE1500A21259 /* instrument.js */, - C1EA6DAA1680FE1500A21259 /* instrument2.js */, - C1EA6DAB1680FE1500A21259 /* liftvars.js */, - C1EA6DAC1680FE1500A21259 /* test.js */, - C1EA6DAD1680FE1500A21259 /* uglify-hangs.js */, - C1EA6DAE1680FE1500A21259 /* uglify-hangs2.js */, - ); - path = tmp; - sourceTree = ""; - }; - C1EA6DB01680FE1500A21259 /* val-loader */ = { - isa = PBXGroup; - children = ( - C1EA6DB11680FE1500A21259 /* cacheable.js */, - C1EA6DB21680FE1500A21259 /* index.js */, - C1EA6DB31680FE1500A21259 /* package.json */, - C1EA6DB41680FE1500A21259 /* README.md */, - C1EA6DB51680FE1500A21259 /* seperable */, - ); - path = "val-loader"; - sourceTree = ""; - }; - C1EA6DB51680FE1500A21259 /* seperable */ = { - isa = PBXGroup; - children = ( - C1EA6DB61680FE1500A21259 /* cacheable.js */, - C1EA6DB71680FE1500A21259 /* index.js */, - ); - path = seperable; - sourceTree = ""; - }; - C1EA6DBA1680FE1500A21259 /* templates */ = { - isa = PBXGroup; - children = ( - C1EA6DBB1680FE1500A21259 /* browser.js */, - C1EA6DBC1680FE1500A21259 /* browserAsync.js */, - C1EA6DBD1680FE1500A21259 /* browserSingle.js */, - C1EA6DBE1680FE1500A21259 /* node.js */, - C1EA6DBF1680FE1500A21259 /* nodeTemplate.js */, - ); - path = templates; - sourceTree = ""; - }; - C1EA6DC01680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6DC11680FE1500A21259 /* browsertest */, - C1EA6E441680FE1500A21259 /* buildDeps.js */, - C1EA6E451680FE1500A21259 /* fixtures */, - C1EA6E6B1680FE1500A21259 /* polyfills.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6DC11680FE1500A21259 /* browsertest */ = { - isa = PBXGroup; - children = ( - C1EA6DC21680FE1500A21259 /* build.js */, - C1EA6DC31680FE1500A21259 /* chai.js */, - C1EA6DC41680FE1500A21259 /* css */, - C1EA6DCA1680FE1500A21259 /* folder */, - C1EA6DD01680FE1500A21259 /* img */, - C1EA6DD31680FE1500A21259 /* jam */, - C1EA6DD61680FE1500A21259 /* less */, - C1EA6DDA1680FE1500A21259 /* lib */, - C1EA6DEB1680FE1500A21259 /* libary2config.js */, - C1EA6DEC1680FE1500A21259 /* loaders */, - C1EA6DEE1680FE1500A21259 /* middlewareTest.js */, - C1EA6DEF1680FE1500A21259 /* mocha.css */, - C1EA6DF01680FE1500A21259 /* mocha.js */, - C1EA6DF11680FE1500A21259 /* node_modules */, - C1EA6E181680FE1500A21259 /* nodetests */, - C1EA6E351680FE1500A21259 /* resources */, - C1EA6E391680FE1500A21259 /* templates */, - C1EA6E401680FE1500A21259 /* tests.html */, - C1EA6E411680FE1500A21259 /* web_modules */, - ); - path = browsertest; - sourceTree = ""; - }; - C1EA6DC41680FE1500A21259 /* css */ = { - isa = PBXGroup; - children = ( - C1EA6DC51680FE1500A21259 /* folder */, - C1EA6DC81680FE1500A21259 /* generateCss.js */, - C1EA6DC91680FE1500A21259 /* stylesheet.css */, - ); - path = css; - sourceTree = ""; - }; - C1EA6DC51680FE1500A21259 /* folder */ = { - isa = PBXGroup; - children = ( - C1EA6DC61680FE1500A21259 /* stylesheet-import1.css */, - C1EA6DC71680FE1500A21259 /* stylesheet-import3.css */, - ); - path = folder; - sourceTree = ""; - }; - C1EA6DCA1680FE1500A21259 /* folder */ = { - isa = PBXGroup; - children = ( - C1EA6DCB1680FE1500A21259 /* errorfile.js */, - C1EA6DCC1680FE1500A21259 /* file1.js */, - C1EA6DCD1680FE1500A21259 /* file2.js */, - C1EA6DCE1680FE1500A21259 /* file3.js */, - C1EA6DCF1680FE1500A21259 /* typeof.js */, - ); - path = folder; - sourceTree = ""; - }; - C1EA6DD01680FE1500A21259 /* img */ = { - isa = PBXGroup; - children = ( - C1EA6DD11680FE1500A21259 /* fail.png */, - C1EA6DD21680FE1500A21259 /* image.png */, - ); - path = img; - sourceTree = ""; - }; - C1EA6DD31680FE1500A21259 /* jam */ = { - isa = PBXGroup; - children = ( - C1EA6DD41680FE1500A21259 /* subcontent-jam */, - ); - path = jam; - sourceTree = ""; - }; - C1EA6DD41680FE1500A21259 /* subcontent-jam */ = { - isa = PBXGroup; - children = ( - C1EA6DD51680FE1500A21259 /* index.js */, - ); - path = "subcontent-jam"; - sourceTree = ""; - }; - C1EA6DD61680FE1500A21259 /* less */ = { - isa = PBXGroup; - children = ( - C1EA6DD71680FE1500A21259 /* folder */, - C1EA6DD91680FE1500A21259 /* stylesheet.less */, - ); - path = less; - sourceTree = ""; - }; - C1EA6DD71680FE1500A21259 /* folder */ = { - isa = PBXGroup; - children = ( - C1EA6DD81680FE1500A21259 /* import1.less */, - ); - path = folder; - sourceTree = ""; - }; - C1EA6DDA1680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6DDB1680FE1500A21259 /* a.js */, - C1EA6DDC1680FE1500A21259 /* acircular.js */, - C1EA6DDD1680FE1500A21259 /* acircular2.js */, - C1EA6DDE1680FE1500A21259 /* b.js */, - C1EA6DDF1680FE1500A21259 /* c.js */, - C1EA6DE01680FE1500A21259 /* circular.js */, - C1EA6DE11680FE1500A21259 /* circular2.js */, - C1EA6DE21680FE1500A21259 /* constructor.js */, - C1EA6DE31680FE1500A21259 /* d.js */, - C1EA6DE41680FE1500A21259 /* duplicate.js */, - C1EA6DE51680FE1500A21259 /* duplicate2.js */, - C1EA6DE61680FE1500A21259 /* index.js */, - C1EA6DE71680FE1500A21259 /* index.web.js */, - C1EA6DE81680FE1500A21259 /* singluar.js */, - C1EA6DE91680FE1500A21259 /* singluar2.js */, - C1EA6DEA1680FE1500A21259 /* two.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6DEC1680FE1500A21259 /* loaders */ = { - isa = PBXGroup; - children = ( - C1EA6DED1680FE1500A21259 /* reverseloader.js */, - ); - path = loaders; - sourceTree = ""; - }; - C1EA6DF11680FE1500A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6DF21680FE1500A21259 /* extra.loader.js */, - C1EA6DF31680FE1500A21259 /* libary1 */, - C1EA6DFD1680FE1500A21259 /* libary2 */, - C1EA6E041680FE1500A21259 /* resources-module */, - C1EA6E071680FE1500A21259 /* subcontent */, - C1EA6E091680FE1500A21259 /* subcontent-jam */, - C1EA6E0B1680FE1500A21259 /* subcontent2 */, - C1EA6E0D1680FE1500A21259 /* subfilemodule.js */, - C1EA6E0E1680FE1500A21259 /* submodule3 */, - C1EA6E101680FE1500A21259 /* testloader */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6DF31680FE1500A21259 /* libary1 */ = { - isa = PBXGroup; - children = ( - C1EA6DF41680FE1500A21259 /* index.js */, - C1EA6DF51680FE1500A21259 /* lib */, - C1EA6DF81680FE1500A21259 /* node_modules */, - ); - path = libary1; - sourceTree = ""; - }; - C1EA6DF51680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6DF61680FE1500A21259 /* comp.js */, - C1EA6DF71680FE1500A21259 /* component.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6DF81680FE1500A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6DF91680FE1500A21259 /* submodule1 */, - C1EA6DFB1680FE1500A21259 /* submodule2 */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6DF91680FE1500A21259 /* submodule1 */ = { - isa = PBXGroup; - children = ( - C1EA6DFA1680FE1500A21259 /* index.js */, - ); - path = submodule1; - sourceTree = ""; - }; - C1EA6DFB1680FE1500A21259 /* submodule2 */ = { - isa = PBXGroup; - children = ( - C1EA6DFC1680FE1500A21259 /* index.js */, - ); - path = submodule2; - sourceTree = ""; - }; - C1EA6DFD1680FE1500A21259 /* libary2 */ = { - isa = PBXGroup; - children = ( - C1EA6DFE1680FE1500A21259 /* lib */, - C1EA6E031680FE1500A21259 /* package.json */, - ); - path = libary2; - sourceTree = ""; - }; - C1EA6DFE1680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6DFF1680FE1500A21259 /* extra.js */, - C1EA6E001680FE1500A21259 /* extra2.js */, - C1EA6E011680FE1500A21259 /* main.js */, - C1EA6E021680FE1500A21259 /* test.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6E041680FE1500A21259 /* resources-module */ = { - isa = PBXGroup; - children = ( - C1EA6E051680FE1500A21259 /* import2.less */, - C1EA6E061680FE1500A21259 /* stylesheet-import2.css */, - ); - path = "resources-module"; - sourceTree = ""; - }; - C1EA6E071680FE1500A21259 /* subcontent */ = { - isa = PBXGroup; - children = ( - C1EA6E081680FE1500A21259 /* index.js */, - ); - path = subcontent; - sourceTree = ""; - }; - C1EA6E091680FE1500A21259 /* subcontent-jam */ = { - isa = PBXGroup; - children = ( - C1EA6E0A1680FE1500A21259 /* index.js */, - ); - path = "subcontent-jam"; - sourceTree = ""; - }; - C1EA6E0B1680FE1500A21259 /* subcontent2 */ = { - isa = PBXGroup; - children = ( - C1EA6E0C1680FE1500A21259 /* file.js */, - ); - path = subcontent2; - sourceTree = ""; - }; - C1EA6E0E1680FE1500A21259 /* submodule3 */ = { - isa = PBXGroup; - children = ( - C1EA6E0F1680FE1500A21259 /* index.js */, - ); - path = submodule3; - sourceTree = ""; - }; - C1EA6E101680FE1500A21259 /* testloader */ = { - isa = PBXGroup; - children = ( - C1EA6E111680FE1500A21259 /* lib */, - C1EA6E171680FE1500A21259 /* package.json */, - ); - path = testloader; - sourceTree = ""; - }; - C1EA6E111680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6E121680FE1500A21259 /* loader-indirect.js */, - C1EA6E131680FE1500A21259 /* loader.js */, - C1EA6E141680FE1500A21259 /* loader.webpack-loader.js */, - C1EA6E151680FE1500A21259 /* loader2.web-loader.js */, - C1EA6E161680FE1500A21259 /* loader3.loader.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6E181680FE1500A21259 /* nodetests */ = { - isa = PBXGroup; - children = ( - C1EA6E191680FE1500A21259 /* common.js */, - C1EA6E1A1680FE1500A21259 /* fixtures */, - C1EA6E1D1680FE1500A21259 /* index.js */, - C1EA6E1E1680FE1500A21259 /* simple */, - ); - path = nodetests; - sourceTree = ""; - }; - C1EA6E1A1680FE1500A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA6E1B1680FE1500A21259 /* global */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA6E1B1680FE1500A21259 /* global */ = { - isa = PBXGroup; - children = ( - C1EA6E1C1680FE1500A21259 /* plain.js */, - ); - path = global; - sourceTree = ""; - }; - C1EA6E1E1680FE1500A21259 /* simple */ = { - isa = PBXGroup; - children = ( - C1EA6E1F1680FE1500A21259 /* test-assert.js */, - C1EA6E201680FE1500A21259 /* test-event-emitter-add-listeners.js */, - C1EA6E211680FE1500A21259 /* test-event-emitter-check-listener-leaks.js */, - C1EA6E221680FE1500A21259 /* test-event-emitter-max-listeners.js */, - C1EA6E231680FE1500A21259 /* test-event-emitter-modify-in-emit.js */, - C1EA6E241680FE1500A21259 /* test-event-emitter-num-args.js */, - C1EA6E251680FE1500A21259 /* test-event-emitter-once.js */, - C1EA6E261680FE1500A21259 /* test-event-emitter-remove-all-listeners.js */, - C1EA6E271680FE1500A21259 /* test-event-emitter-remove-listeners.js */, - C1EA6E281680FE1500A21259 /* test-global.js */, - C1EA6E291680FE1500A21259 /* test-next-tick-doesnt-hang.js */, - C1EA6E2A1680FE1500A21259 /* test-next-tick-ordering2.js */, - C1EA6E2B1680FE1500A21259 /* test-path.js */, - C1EA6E2C1680FE1500A21259 /* test-punycode.js */, - C1EA6E2D1680FE1500A21259 /* test-querystring.js */, - C1EA6E2E1680FE1500A21259 /* test-sys.js */, - C1EA6E2F1680FE1500A21259 /* test-timers-zero-timeout.js */, - C1EA6E301680FE1500A21259 /* test-timers.js */, - C1EA6E311680FE1500A21259 /* test-url.js */, - C1EA6E321680FE1500A21259 /* test-util-format.js */, - C1EA6E331680FE1500A21259 /* test-util-inspect.js */, - C1EA6E341680FE1500A21259 /* test-util.js */, - ); - path = simple; - sourceTree = ""; - }; - C1EA6E351680FE1500A21259 /* resources */ = { - isa = PBXGroup; - children = ( - C1EA6E361680FE1500A21259 /* abc.txt */, - C1EA6E371680FE1500A21259 /* script.coffee */, - C1EA6E381680FE1500A21259 /* template.jade */, - ); - path = resources; - sourceTree = ""; - }; - C1EA6E391680FE1500A21259 /* templates */ = { - isa = PBXGroup; - children = ( - C1EA6E3A1680FE1500A21259 /* dump-file.txt */, - C1EA6E3B1680FE1500A21259 /* subdir */, - C1EA6E3D1680FE1500A21259 /* templateLoader.js */, - C1EA6E3E1680FE1500A21259 /* templateLoaderIndirect.js */, - C1EA6E3F1680FE1500A21259 /* tmpl.js */, - ); - path = templates; - sourceTree = ""; - }; - C1EA6E3B1680FE1500A21259 /* subdir */ = { - isa = PBXGroup; - children = ( - C1EA6E3C1680FE1500A21259 /* tmpl.js */, - ); - path = subdir; - sourceTree = ""; - }; - C1EA6E411680FE1500A21259 /* web_modules */ = { - isa = PBXGroup; - children = ( - C1EA6E421680FE1500A21259 /* subcontent */, - ); - path = web_modules; - sourceTree = ""; - }; - C1EA6E421680FE1500A21259 /* subcontent */ = { - isa = PBXGroup; - children = ( - C1EA6E431680FE1500A21259 /* index.js */, - ); - path = subcontent; - sourceTree = ""; - }; - C1EA6E451680FE1500A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA6E461680FE1500A21259 /* a.js */, - C1EA6E471680FE1500A21259 /* abc.txt */, - C1EA6E481680FE1500A21259 /* b.js */, - C1EA6E491680FE1500A21259 /* c.js */, - C1EA6E4A1680FE1500A21259 /* complex.js */, - C1EA6E4B1680FE1500A21259 /* items */, - C1EA6E561680FE1500A21259 /* lib */, - C1EA6E581680FE1500A21259 /* main1.js */, - C1EA6E591680FE1500A21259 /* main2.js */, - C1EA6E5A1680FE1500A21259 /* main3.js */, - C1EA6E5B1680FE1500A21259 /* main4.js */, - C1EA6E5C1680FE1500A21259 /* node_modules */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA6E4B1680FE1500A21259 /* items */ = { - isa = PBXGroup; - children = ( - C1EA6E4C1680FE1500A21259 /* item (0).js */, - C1EA6E4D1680FE1500A21259 /* item (1).js */, - C1EA6E4E1680FE1500A21259 /* item (2).js */, - C1EA6E4F1680FE1500A21259 /* item (3).js */, - C1EA6E501680FE1500A21259 /* item (4).js */, - C1EA6E511680FE1500A21259 /* item (5).js */, - C1EA6E521680FE1500A21259 /* item (6).js */, - C1EA6E531680FE1500A21259 /* item (7).js */, - C1EA6E541680FE1500A21259 /* item (8).js */, - C1EA6E551680FE1500A21259 /* item (9).js */, - ); - path = items; - sourceTree = ""; - }; - C1EA6E561680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6E571680FE1500A21259 /* complex1.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6E5C1680FE1500A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6E5D1680FE1500A21259 /* complexm */, - C1EA6E641680FE1500A21259 /* m1 */, - C1EA6E671680FE1500A21259 /* m2 */, - C1EA6E691680FE1500A21259 /* m2-loader */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6E5D1680FE1500A21259 /* complexm */ = { - isa = PBXGroup; - children = ( - C1EA6E5E1680FE1500A21259 /* step1.js */, - C1EA6E5F1680FE1500A21259 /* step2.js */, - C1EA6E601680FE1500A21259 /* web_modules */, - ); - path = complexm; - sourceTree = ""; - }; - C1EA6E601680FE1500A21259 /* web_modules */ = { - isa = PBXGroup; - children = ( - C1EA6E611680FE1500A21259 /* m1 */, - ); - path = web_modules; - sourceTree = ""; - }; - C1EA6E611680FE1500A21259 /* m1 */ = { - isa = PBXGroup; - children = ( - C1EA6E621680FE1500A21259 /* a.js */, - C1EA6E631680FE1500A21259 /* index.js */, - ); - path = m1; - sourceTree = ""; - }; - C1EA6E641680FE1500A21259 /* m1 */ = { - isa = PBXGroup; - children = ( - C1EA6E651680FE1500A21259 /* a.js */, - C1EA6E661680FE1500A21259 /* b.js */, - ); - path = m1; - sourceTree = ""; - }; - C1EA6E671680FE1500A21259 /* m2 */ = { - isa = PBXGroup; - children = ( - C1EA6E681680FE1500A21259 /* b.js */, - ); - path = m2; - sourceTree = ""; - }; - C1EA6E691680FE1500A21259 /* m2-loader */ = { - isa = PBXGroup; - children = ( - C1EA6E6A1680FE1500A21259 /* b.js */, - ); - path = "m2-loader"; - sourceTree = ""; - }; - C1EA6E6C1680FE1500A21259 /* ws */ = { - isa = PBXGroup; - children = ( - C1EA6E6D1680FE1500A21259 /* .npmignore */, - C1EA6E6E1680FE1500A21259 /* .travis.yml */, - C1EA6E6F1680FE1500A21259 /* bench */, - C1EA6E741680FE1500A21259 /* bin */, - C1EA6E761680FE1500A21259 /* binding.gyp */, - C1EA6E771680FE1500A21259 /* build */, - C1EA6E941680FE1500A21259 /* doc */, - C1EA6E961680FE1500A21259 /* examples */, - C1EA6EA91680FE1500A21259 /* History.md */, - C1EA6EAA1680FE1500A21259 /* index.js */, - C1EA6EAB1680FE1500A21259 /* install.js */, - C1EA6EAC1680FE1500A21259 /* lib */, - C1EA6EB91680FE1500A21259 /* Makefile */, - C1EA6EBA1680FE1500A21259 /* node_modules */, - C1EA6ED61680FE1500A21259 /* package.json */, - C1EA6ED71680FE1500A21259 /* README.md */, - C1EA6ED81680FE1500A21259 /* src */, - C1EA6EDB1680FE1500A21259 /* test */, - ); - path = ws; - sourceTree = ""; - }; - C1EA6E6F1680FE1500A21259 /* bench */ = { - isa = PBXGroup; - children = ( - C1EA6E701680FE1500A21259 /* parser.benchmark.js */, - C1EA6E711680FE1500A21259 /* sender.benchmark.js */, - C1EA6E721680FE1500A21259 /* speed.js */, - C1EA6E731680FE1500A21259 /* util.js */, - ); - path = bench; - sourceTree = ""; - }; - C1EA6E741680FE1500A21259 /* bin */ = { - isa = PBXGroup; - children = ( - C1EA6E751680FE1500A21259 /* wscat */, - ); - path = bin; - sourceTree = ""; - }; - C1EA6E771680FE1500A21259 /* build */ = { - isa = PBXGroup; - children = ( - C1EA6E781680FE1500A21259 /* binding.Makefile */, - C1EA6E791680FE1500A21259 /* bufferutil.target.mk */, - C1EA6E7A1680FE1500A21259 /* config.gypi */, - C1EA6E7B1680FE1500A21259 /* gyp-mac-tool */, - C1EA6E7C1680FE1500A21259 /* Makefile */, - C1EA6E7D1680FE1500A21259 /* Release */, - C1EA6E931680FE1500A21259 /* validation.target.mk */, - ); - path = build; - sourceTree = ""; - }; - C1EA6E7D1680FE1500A21259 /* Release */ = { - isa = PBXGroup; - children = ( - C1EA6E7E1680FE1500A21259 /* .deps */, - C1EA6E891680FE1500A21259 /* bufferutil.node */, - C1EA6E8A1680FE1500A21259 /* linker.lock */, - C1EA6E8B1680FE1500A21259 /* obj.target */, - C1EA6E921680FE1500A21259 /* validation.node */, - ); - path = Release; - sourceTree = ""; - }; - C1EA6E7E1680FE1500A21259 /* .deps */ = { - isa = PBXGroup; - children = ( - C1EA6E7F1680FE1500A21259 /* Release */, - ); - path = .deps; - sourceTree = ""; - }; - C1EA6E7F1680FE1500A21259 /* Release */ = { - isa = PBXGroup; - children = ( - C1EA6E801680FE1500A21259 /* bufferutil.node.d */, - C1EA6E811680FE1500A21259 /* obj.target */, - C1EA6E881680FE1500A21259 /* validation.node.d */, - ); - path = Release; - sourceTree = ""; - }; - C1EA6E811680FE1500A21259 /* obj.target */ = { - isa = PBXGroup; - children = ( - C1EA6E821680FE1500A21259 /* bufferutil */, - C1EA6E851680FE1500A21259 /* validation */, - ); - path = obj.target; - sourceTree = ""; - }; - C1EA6E821680FE1500A21259 /* bufferutil */ = { - isa = PBXGroup; - children = ( - C1EA6E831680FE1500A21259 /* src */, - ); - path = bufferutil; - sourceTree = ""; - }; - C1EA6E831680FE1500A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA6E841680FE1500A21259 /* bufferutil.o.d */, - ); - path = src; - sourceTree = ""; - }; - C1EA6E851680FE1500A21259 /* validation */ = { - isa = PBXGroup; - children = ( - C1EA6E861680FE1500A21259 /* src */, - ); - path = validation; - sourceTree = ""; - }; - C1EA6E861680FE1500A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA6E871680FE1500A21259 /* validation.o.d */, - ); - path = src; - sourceTree = ""; - }; - C1EA6E8B1680FE1500A21259 /* obj.target */ = { - isa = PBXGroup; - children = ( - C1EA6E8C1680FE1500A21259 /* bufferutil */, - C1EA6E8F1680FE1500A21259 /* validation */, - ); - path = obj.target; - sourceTree = ""; - }; - C1EA6E8C1680FE1500A21259 /* bufferutil */ = { - isa = PBXGroup; - children = ( - C1EA6E8D1680FE1500A21259 /* src */, - ); - path = bufferutil; - sourceTree = ""; - }; - C1EA6E8D1680FE1500A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA6E8E1680FE1500A21259 /* bufferutil.o */, - ); - path = src; - sourceTree = ""; - }; - C1EA6E8F1680FE1500A21259 /* validation */ = { - isa = PBXGroup; - children = ( - C1EA6E901680FE1500A21259 /* src */, - ); - path = validation; - sourceTree = ""; - }; - C1EA6E901680FE1500A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA6E911680FE1500A21259 /* validation.o */, - ); - path = src; - sourceTree = ""; - }; - C1EA6E941680FE1500A21259 /* doc */ = { - isa = PBXGroup; - children = ( - C1EA6E951680FE1500A21259 /* ws.md */, - ); - path = doc; - sourceTree = ""; - }; - C1EA6E961680FE1500A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA6E971680FE1500A21259 /* fileapi */, - C1EA6E9F1680FE1500A21259 /* serverstats */, - C1EA6EA41680FE1500A21259 /* serverstats-express_3 */, - ); - path = examples; - sourceTree = ""; - }; - C1EA6E971680FE1500A21259 /* fileapi */ = { - isa = PBXGroup; - children = ( - C1EA6E981680FE1500A21259 /* .npmignore */, - C1EA6E991680FE1500A21259 /* package.json */, - C1EA6E9A1680FE1500A21259 /* public */, - C1EA6E9E1680FE1500A21259 /* server.js */, - ); - path = fileapi; - sourceTree = ""; - }; - C1EA6E9A1680FE1500A21259 /* public */ = { - isa = PBXGroup; - children = ( - C1EA6E9B1680FE1500A21259 /* app.js */, - C1EA6E9C1680FE1500A21259 /* index.html */, - C1EA6E9D1680FE1500A21259 /* uploader.js */, - ); - path = public; - sourceTree = ""; - }; - C1EA6E9F1680FE1500A21259 /* serverstats */ = { - isa = PBXGroup; - children = ( - C1EA6EA01680FE1500A21259 /* package.json */, - C1EA6EA11680FE1500A21259 /* public */, - C1EA6EA31680FE1500A21259 /* server.js */, - ); - path = serverstats; - sourceTree = ""; - }; - C1EA6EA11680FE1500A21259 /* public */ = { - isa = PBXGroup; - children = ( - C1EA6EA21680FE1500A21259 /* index.html */, - ); - path = public; - sourceTree = ""; - }; - C1EA6EA41680FE1500A21259 /* serverstats-express_3 */ = { - isa = PBXGroup; - children = ( - C1EA6EA51680FE1500A21259 /* package.json */, - C1EA6EA61680FE1500A21259 /* public */, - C1EA6EA81680FE1500A21259 /* server.js */, - ); - path = "serverstats-express_3"; - sourceTree = ""; - }; - C1EA6EA61680FE1500A21259 /* public */ = { - isa = PBXGroup; - children = ( - C1EA6EA71680FE1500A21259 /* index.html */, - ); - path = public; - sourceTree = ""; - }; - C1EA6EAC1680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6EAD1680FE1500A21259 /* BufferPool.js */, - C1EA6EAE1680FE1500A21259 /* BufferUtil.fallback.js */, - C1EA6EAF1680FE1500A21259 /* BufferUtil.js */, - C1EA6EB01680FE1500A21259 /* ErrorCodes.js */, - C1EA6EB11680FE1500A21259 /* Receiver.hixie.js */, - C1EA6EB21680FE1500A21259 /* Receiver.js */, - C1EA6EB31680FE1500A21259 /* Sender.hixie.js */, - C1EA6EB41680FE1500A21259 /* Sender.js */, - C1EA6EB51680FE1500A21259 /* Validation.fallback.js */, - C1EA6EB61680FE1500A21259 /* Validation.js */, - C1EA6EB71680FE1500A21259 /* WebSocket.js */, - C1EA6EB81680FE1500A21259 /* WebSocketServer.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6EBA1680FE1500A21259 /* node_modules */ = { - isa = PBXGroup; - children = ( - C1EA6EBB1680FE1500A21259 /* commander */, - C1EA6EC51680FE1500A21259 /* options */, - C1EA6ED01680FE1500A21259 /* tinycolor */, - ); - path = node_modules; - sourceTree = ""; - }; - C1EA6EBB1680FE1500A21259 /* commander */ = { - isa = PBXGroup; - children = ( - C1EA6EBC1680FE1500A21259 /* .npmignore */, - C1EA6EBD1680FE1500A21259 /* .travis.yml */, - C1EA6EBE1680FE1500A21259 /* History.md */, - C1EA6EBF1680FE1500A21259 /* index.js */, - C1EA6EC01680FE1500A21259 /* lib */, - C1EA6EC21680FE1500A21259 /* Makefile */, - C1EA6EC31680FE1500A21259 /* package.json */, - C1EA6EC41680FE1500A21259 /* Readme.md */, - ); - path = commander; - sourceTree = ""; - }; - C1EA6EC01680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6EC11680FE1500A21259 /* commander.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6EC51680FE1500A21259 /* options */ = { - isa = PBXGroup; - children = ( - C1EA6EC61680FE1500A21259 /* .npmignore */, - C1EA6EC71680FE1500A21259 /* lib */, - C1EA6EC91680FE1500A21259 /* Makefile */, - C1EA6ECA1680FE1500A21259 /* package.json */, - C1EA6ECB1680FE1500A21259 /* README.md */, - C1EA6ECC1680FE1500A21259 /* test */, - ); - path = options; - sourceTree = ""; - }; - C1EA6EC71680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA6EC81680FE1500A21259 /* options.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA6ECC1680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6ECD1680FE1500A21259 /* fixtures */, - C1EA6ECF1680FE1500A21259 /* options.test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6ECD1680FE1500A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA6ECE1680FE1500A21259 /* test.conf */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA6ED01680FE1500A21259 /* tinycolor */ = { - isa = PBXGroup; - children = ( - C1EA6ED11680FE1500A21259 /* .npmignore */, - C1EA6ED21680FE1500A21259 /* example.js */, - C1EA6ED31680FE1500A21259 /* package.json */, - C1EA6ED41680FE1500A21259 /* README.md */, - C1EA6ED51680FE1500A21259 /* tinycolor.js */, - ); - path = tinycolor; - sourceTree = ""; - }; - C1EA6ED81680FE1500A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA6ED91680FE1500A21259 /* bufferutil.cc */, - C1EA6EDA1680FE1500A21259 /* validation.cc */, - ); - path = src; - sourceTree = ""; - }; - C1EA6EDB1680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA6EDC1680FE1500A21259 /* autobahn-server.js */, - C1EA6EDD1680FE1500A21259 /* autobahn.js */, - C1EA6EDE1680FE1500A21259 /* BufferPool.test.js */, - C1EA6EDF1680FE1500A21259 /* fixtures */, - C1EA6EE41680FE1500A21259 /* hybi-common.js */, - C1EA6EE51680FE1500A21259 /* Receiver.hixie.test.js */, - C1EA6EE61680FE1500A21259 /* Receiver.test.js */, - C1EA6EE71680FE1500A21259 /* Sender.hixie.test.js */, - C1EA6EE81680FE1500A21259 /* Sender.test.js */, - C1EA6EE91680FE1500A21259 /* testserver.js */, - C1EA6EEA1680FE1500A21259 /* Validation.test.js */, - C1EA6EEB1680FE1500A21259 /* WebSocket.integration.js */, - C1EA6EEC1680FE1500A21259 /* WebSocket.test.js */, - C1EA6EED1680FE1500A21259 /* WebSocketServer.test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA6EDF1680FE1500A21259 /* fixtures */ = { - isa = PBXGroup; - children = ( - C1EA6EE01680FE1500A21259 /* certificate.pem */, - C1EA6EE11680FE1500A21259 /* key.pem */, - C1EA6EE21680FE1500A21259 /* request.pem */, - C1EA6EE31680FE1500A21259 /* textfile */, - ); - path = fixtures; - sourceTree = ""; - }; - C1EA6EF71680FE1500A21259 /* site_scons */ = { - isa = PBXGroup; - children = ( - C1EA6EF81680FE1500A21259 /* site_tools */, - ); - name = site_scons; - path = ../../site_scons; - sourceTree = ""; - }; - C1EA6EF81680FE1500A21259 /* site_tools */ = { - isa = PBXGroup; - children = ( - C1EA6EF91680FE1500A21259 /* protoc.py */, - C1EA6EFA1680FE1500A21259 /* protoc.pyc */, - ); - path = site_tools; - sourceTree = ""; - }; - C1EA6EFB1680FE1500A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA6EFC1680FE1500A21259 /* cpp */, - C1EA70F51680FE1500A21259 /* js */, - ); - name = src; - path = ../../src; - sourceTree = ""; - }; - C1EA6EFC1680FE1500A21259 /* cpp */ = { - isa = PBXGroup; - children = ( - C1EA6EFD1680FE1500A21259 /* database */, - C1EA6F0C1680FE1500A21259 /* json */, - C1EA6F1E1680FE1500A21259 /* ripple */, - C1EA6FDC1680FE1500A21259 /* websocketpp */, - ); - path = cpp; - sourceTree = ""; - }; - C1EA6EFD1680FE1500A21259 /* database */ = { - isa = PBXGroup; - children = ( - C1EA6EFE1680FE1500A21259 /* database.cpp */, - C1EA6EFF1680FE1500A21259 /* database.h */, - C1EA6F001680FE1500A21259 /* linux */, - C1EA6F031680FE1500A21259 /* sqlite3.c */, - C1EA6F041680FE1500A21259 /* sqlite3.h */, - C1EA6F051680FE1500A21259 /* sqlite3ext.h */, - C1EA6F061680FE1500A21259 /* SqliteDatabase.cpp */, - C1EA6F071680FE1500A21259 /* SqliteDatabase.h */, - C1EA6F081680FE1500A21259 /* win */, - ); - path = database; - sourceTree = ""; - }; - C1EA6F001680FE1500A21259 /* linux */ = { - isa = PBXGroup; - children = ( - C1EA6F011680FE1500A21259 /* mysqldatabase.cpp */, - C1EA6F021680FE1500A21259 /* mysqldatabase.h */, - ); - path = linux; - sourceTree = ""; - }; - C1EA6F081680FE1500A21259 /* win */ = { - isa = PBXGroup; - children = ( - C1EA6F091680FE1500A21259 /* dbutility.h */, - C1EA6F0A1680FE1500A21259 /* windatabase.cpp */, - C1EA6F0B1680FE1500A21259 /* windatabase.h */, - ); - path = win; - sourceTree = ""; - }; - C1EA6F0C1680FE1500A21259 /* json */ = { - isa = PBXGroup; - children = ( - C1EA6F0D1680FE1500A21259 /* autolink.h */, - C1EA6F0E1680FE1500A21259 /* config.h */, - C1EA6F0F1680FE1500A21259 /* features.h */, - C1EA6F101680FE1500A21259 /* forwards.h */, - C1EA6F111680FE1500A21259 /* json.h */, - C1EA6F121680FE1500A21259 /* json_batchallocator.h */, - C1EA6F131680FE1500A21259 /* json_internalarray.inl */, - C1EA6F141680FE1500A21259 /* json_internalmap.inl */, - C1EA6F151680FE1500A21259 /* json_reader.cpp */, - C1EA6F161680FE1500A21259 /* json_value.cpp */, - C1EA6F171680FE1500A21259 /* json_valueiterator.inl */, - C1EA6F181680FE1500A21259 /* json_writer.cpp */, - C1EA6F191680FE1500A21259 /* LICENSE */, - C1EA6F1A1680FE1500A21259 /* reader.h */, - C1EA6F1B1680FE1500A21259 /* value.h */, - C1EA6F1C1680FE1500A21259 /* version */, - C1EA6F1D1680FE1500A21259 /* writer.h */, - ); - path = json; - sourceTree = ""; - }; - C1EA6F1E1680FE1500A21259 /* ripple */ = { - isa = PBXGroup; - children = ( - C1EA6F1F1680FE1500A21259 /* AccountItems.cpp */, - C1EA6F201680FE1500A21259 /* AccountItems.h */, - C1EA6F211680FE1500A21259 /* AccountSetTransactor.cpp */, - C1EA6F221680FE1500A21259 /* AccountSetTransactor.h */, - C1EA6F231680FE1500A21259 /* AccountState.cpp */, - C1EA6F241680FE1500A21259 /* AccountState.h */, - C1EA6F251680FE1500A21259 /* Amount.cpp */, - C1EA6F261680FE1500A21259 /* Application.cpp */, - C1EA6F271680FE1500A21259 /* Application.h */, - C1EA6F281680FE1500A21259 /* base58.h */, - C1EA6F291680FE1500A21259 /* bignum.h */, - C1EA6F2A1680FE1500A21259 /* BitcoinUtil.cpp */, - C1EA6F2B1680FE1500A21259 /* BitcoinUtil.h */, - C1EA6F2C1680FE1500A21259 /* CallRPC.cpp */, - C1EA6F2D1680FE1500A21259 /* CallRPC.h */, - C1EA6F2E1680FE1500A21259 /* CanonicalTXSet.cpp */, - C1EA6F2F1680FE1500A21259 /* CanonicalTXSet.h */, - C1EA6F301680FE1500A21259 /* Config.cpp */, - C1EA6F311680FE1500A21259 /* Config.h */, - C1EA6F321680FE1500A21259 /* ConnectionPool.cpp */, - C1EA6F331680FE1500A21259 /* ConnectionPool.h */, - C1EA6F341680FE1500A21259 /* Contract.cpp */, - C1EA6F351680FE1500A21259 /* Contract.h */, - C1EA6F361680FE1500A21259 /* DBInit.cpp */, - C1EA6F371680FE1500A21259 /* DeterministicKeys.cpp */, - C1EA6F381680FE1500A21259 /* ECIES.cpp */, - C1EA6F391680FE1500A21259 /* FeatureTable.cpp */, - C1EA6F3A1680FE1500A21259 /* FeatureTable.h */, - C1EA6F3B1680FE1500A21259 /* FieldNames.cpp */, - C1EA6F3C1680FE1500A21259 /* FieldNames.h */, - C1EA6F3D1680FE1500A21259 /* HashedObject.cpp */, - C1EA6F3E1680FE1500A21259 /* HashedObject.h */, - C1EA6F3F1680FE1500A21259 /* HashPrefixes.h */, - C1EA6F401680FE1500A21259 /* HTTPRequest.cpp */, - C1EA6F411680FE1500A21259 /* HTTPRequest.h */, - C1EA6F421680FE1500A21259 /* HttpsClient.cpp */, - C1EA6F431680FE1500A21259 /* HttpsClient.h */, - C1EA6F441680FE1500A21259 /* InstanceCounter.cpp */, - C1EA6F451680FE1500A21259 /* InstanceCounter.h */, - C1EA6F461680FE1500A21259 /* Interpreter.cpp */, - C1EA6F471680FE1500A21259 /* Interpreter.h */, - C1EA6F481680FE1500A21259 /* JobQueue.cpp */, - C1EA6F491680FE1500A21259 /* JobQueue.h */, - C1EA6F4A1680FE1500A21259 /* key.h */, - C1EA6F4B1680FE1500A21259 /* Ledger.cpp */, - C1EA6F4C1680FE1500A21259 /* Ledger.h */, - C1EA6F4D1680FE1500A21259 /* LedgerAcquire.cpp */, - C1EA6F4E1680FE1500A21259 /* LedgerAcquire.h */, - C1EA6F4F1680FE1500A21259 /* LedgerConsensus.cpp */, - C1EA6F501680FE1500A21259 /* LedgerConsensus.h */, - C1EA6F511680FE1500A21259 /* LedgerEntrySet.cpp */, - C1EA6F521680FE1500A21259 /* LedgerEntrySet.h */, - C1EA6F531680FE1500A21259 /* LedgerFormats.cpp */, - C1EA6F541680FE1500A21259 /* LedgerFormats.h */, - C1EA6F551680FE1500A21259 /* LedgerHistory.cpp */, - C1EA6F561680FE1500A21259 /* LedgerHistory.h */, - C1EA6F571680FE1500A21259 /* LedgerMaster.cpp */, - C1EA6F581680FE1500A21259 /* LedgerMaster.h */, - C1EA6F591680FE1500A21259 /* LedgerProposal.cpp */, - C1EA6F5A1680FE1500A21259 /* LedgerProposal.h */, - C1EA6F5B1680FE1500A21259 /* LedgerTiming.cpp */, - C1EA6F5C1680FE1500A21259 /* LedgerTiming.h */, - C1EA6F5D1680FE1500A21259 /* LoadManager.cpp */, - C1EA6F5E1680FE1500A21259 /* LoadManager.h */, - C1EA6F5F1680FE1500A21259 /* LoadMonitor.cpp */, - C1EA6F601680FE1500A21259 /* LoadMonitor.h */, - C1EA6F611680FE1500A21259 /* Log.cpp */, - C1EA6F621680FE1500A21259 /* Log.h */, - C1EA6F631680FE1500A21259 /* main.cpp */, - C1EA6F641680FE1500A21259 /* NetworkOPs.cpp */, - C1EA6F651680FE1500A21259 /* NetworkOPs.h */, - C1EA6F661680FE1500A21259 /* NetworkStatus.h */, - C1EA6F671680FE1500A21259 /* NicknameState.cpp */, - C1EA6F681680FE1500A21259 /* NicknameState.h */, - C1EA6F691680FE1500A21259 /* Offer.cpp */, - C1EA6F6A1680FE1500A21259 /* Offer.h */, - C1EA6F6B1680FE1500A21259 /* OfferCancelTransactor.cpp */, - C1EA6F6C1680FE1500A21259 /* OfferCancelTransactor.h */, - C1EA6F6D1680FE1500A21259 /* OfferCreateTransactor.cpp */, - C1EA6F6E1680FE1500A21259 /* OfferCreateTransactor.h */, - C1EA6F6F1680FE1500A21259 /* Operation.cpp */, - C1EA6F701680FE1500A21259 /* Operation.h */, - C1EA6F711680FE1500A21259 /* OrderBook.cpp */, - C1EA6F721680FE1500A21259 /* OrderBook.h */, - C1EA6F731680FE1500A21259 /* OrderBookDB.cpp */, - C1EA6F741680FE1500A21259 /* OrderBookDB.h */, - C1EA6F751680FE1500A21259 /* PackedMessage.cpp */, - C1EA6F761680FE1500A21259 /* PackedMessage.h */, - C1EA6F771680FE1500A21259 /* ParameterTable.cpp */, - C1EA6F781680FE1500A21259 /* ParameterTable.h */, - C1EA6F791680FE1500A21259 /* ParseSection.cpp */, - C1EA6F7A1680FE1500A21259 /* ParseSection.h */, - C1EA6F7B1680FE1500A21259 /* Pathfinder.cpp */, - C1EA6F7C1680FE1500A21259 /* Pathfinder.h */, - C1EA6F7D1680FE1500A21259 /* PaymentTransactor.cpp */, - C1EA6F7E1680FE1500A21259 /* PaymentTransactor.h */, - C1EA6F7F1680FE1500A21259 /* Peer.cpp */, - C1EA6F801680FE1500A21259 /* Peer.h */, - C1EA6F811680FE1500A21259 /* PeerDoor.cpp */, - C1EA6F821680FE1500A21259 /* PeerDoor.h */, - C1EA6F831680FE1500A21259 /* PlatRand.cpp */, - C1EA6F841680FE1500A21259 /* ProofOfWork.cpp */, - C1EA6F851680FE1500A21259 /* ProofOfWork.h */, - C1EA6F861680FE1500A21259 /* PubKeyCache.cpp */, - C1EA6F871680FE1500A21259 /* PubKeyCache.h */, - C1EA6F881680FE1500A21259 /* RangeSet.cpp */, - C1EA6F891680FE1500A21259 /* RangeSet.h */, - C1EA6F8A1680FE1500A21259 /* RegularKeySetTransactor.cpp */, - C1EA6F8B1680FE1500A21259 /* RegularKeySetTransactor.h */, - C1EA6F8C1680FE1500A21259 /* rfc1751.cpp */, - C1EA6F8D1680FE1500A21259 /* rfc1751.h */, - C1EA6F8E1680FE1500A21259 /* ripple.proto */, - C1EA6F8F1680FE1500A21259 /* RippleAddress.cpp */, - C1EA6F901680FE1500A21259 /* RippleAddress.h */, - C1EA6F911680FE1500A21259 /* RippleCalc.cpp */, - C1EA6F921680FE1500A21259 /* RippleCalc.h */, - C1EA6F931680FE1500A21259 /* RippleState.cpp */, - C1EA6F941680FE1500A21259 /* RippleState.h */, - C1EA6F951680FE1500A21259 /* rpc.cpp */, - C1EA6F961680FE1500A21259 /* RPC.h */, - C1EA6F971680FE1500A21259 /* RPCDoor.cpp */, - C1EA6F981680FE1500A21259 /* RPCDoor.h */, - C1EA6F991680FE1500A21259 /* RPCErr.cpp */, - C1EA6F9A1680FE1500A21259 /* RPCErr.h */, - C1EA6F9B1680FE1500A21259 /* RPCHandler.cpp */, - C1EA6F9C1680FE1500A21259 /* RPCHandler.h */, - C1EA6F9D1680FE1500A21259 /* RPCServer.cpp */, - C1EA6F9E1680FE1500A21259 /* RPCServer.h */, - C1EA6F9F1680FE1500A21259 /* ScopedLock.h */, - C1EA6FA01680FE1500A21259 /* ScriptData.cpp */, - C1EA6FA11680FE1500A21259 /* ScriptData.h */, - C1EA6FA21680FE1500A21259 /* SecureAllocator.h */, - C1EA6FA31680FE1500A21259 /* SerializedLedger.cpp */, - C1EA6FA41680FE1500A21259 /* SerializedLedger.h */, - C1EA6FA51680FE1500A21259 /* SerializedObject.cpp */, - C1EA6FA61680FE1500A21259 /* SerializedObject.h */, - C1EA6FA71680FE1500A21259 /* SerializedTransaction.cpp */, - C1EA6FA81680FE1500A21259 /* SerializedTransaction.h */, - C1EA6FA91680FE1500A21259 /* SerializedTypes.cpp */, - C1EA6FAA1680FE1500A21259 /* SerializedTypes.h */, - C1EA6FAB1680FE1500A21259 /* SerializedValidation.cpp */, - C1EA6FAC1680FE1500A21259 /* SerializedValidation.h */, - C1EA6FAD1680FE1500A21259 /* SerializeProto.h */, - C1EA6FAE1680FE1500A21259 /* Serializer.cpp */, - C1EA6FAF1680FE1500A21259 /* Serializer.h */, - C1EA6FB01680FE1500A21259 /* SHAMap.cpp */, - C1EA6FB11680FE1500A21259 /* SHAMap.h */, - C1EA6FB21680FE1500A21259 /* SHAMapDiff.cpp */, - C1EA6FB31680FE1500A21259 /* SHAMapNodes.cpp */, - C1EA6FB41680FE1500A21259 /* SHAMapSync.cpp */, - C1EA6FB51680FE1500A21259 /* SHAMapSync.h */, - C1EA6FB61680FE1500A21259 /* SNTPClient.cpp */, - C1EA6FB71680FE1500A21259 /* SNTPClient.h */, - C1EA6FB81680FE1500A21259 /* Suppression.cpp */, - C1EA6FB91680FE1500A21259 /* Suppression.h */, - C1EA6FBA1680FE1500A21259 /* TaggedCache.h */, - C1EA6FBB1680FE1500A21259 /* Transaction.cpp */, - C1EA6FBC1680FE1500A21259 /* Transaction.h */, - C1EA6FBD1680FE1500A21259 /* TransactionEngine.cpp */, - C1EA6FBE1680FE1500A21259 /* TransactionEngine.h */, - C1EA6FBF1680FE1500A21259 /* TransactionErr.cpp */, - C1EA6FC01680FE1500A21259 /* TransactionErr.h */, - C1EA6FC11680FE1500A21259 /* TransactionFormats.cpp */, - C1EA6FC21680FE1500A21259 /* TransactionFormats.h */, - C1EA6FC31680FE1500A21259 /* TransactionMaster.cpp */, - C1EA6FC41680FE1500A21259 /* TransactionMaster.h */, - C1EA6FC51680FE1500A21259 /* TransactionMeta.cpp */, - C1EA6FC61680FE1500A21259 /* TransactionMeta.h */, - C1EA6FC71680FE1500A21259 /* Transactor.cpp */, - C1EA6FC81680FE1500A21259 /* Transactor.h */, - C1EA6FC91680FE1500A21259 /* TrustSetTransactor.cpp */, - C1EA6FCA1680FE1500A21259 /* TrustSetTransactor.h */, - C1EA6FCB1680FE1500A21259 /* types.h */, - C1EA6FCC1680FE1500A21259 /* uint256.h */, - C1EA6FCD1680FE1500A21259 /* UniqueNodeList.cpp */, - C1EA6FCE1680FE1500A21259 /* UniqueNodeList.h */, - C1EA6FCF1680FE1500A21259 /* utils.cpp */, - C1EA6FD01680FE1500A21259 /* utils.h */, - C1EA6FD11680FE1500A21259 /* ValidationCollection.cpp */, - C1EA6FD21680FE1500A21259 /* ValidationCollection.h */, - C1EA6FD31680FE1500A21259 /* Version.h */, - C1EA6FD41680FE1500A21259 /* Wallet.cpp */, - C1EA6FD51680FE1500A21259 /* Wallet.h */, - C1EA6FD61680FE1500A21259 /* WalletAddTransactor.cpp */, - C1EA6FD71680FE1500A21259 /* WalletAddTransactor.h */, - C1EA6FD81680FE1500A21259 /* WSConnection.h */, - C1EA6FD91680FE1500A21259 /* WSDoor.cpp */, - C1EA6FDA1680FE1500A21259 /* WSDoor.h */, - C1EA6FDB1680FE1500A21259 /* WSHandler.h */, - ); - path = ripple; - sourceTree = ""; - }; - C1EA6FDC1680FE1500A21259 /* websocketpp */ = { - isa = PBXGroup; - children = ( - C1EA6FDD1680FE1500A21259 /* dependencies.txt */, - C1EA6FDE1680FE1500A21259 /* doc */, - C1EA6FE01680FE1500A21259 /* examples */, - C1EA70831680FE1500A21259 /* license.txt */, - C1EA70841680FE1500A21259 /* Makefile */, - C1EA70851680FE1500A21259 /* readme.txt */, - C1EA70861680FE1500A21259 /* SConstruct */, - C1EA70871680FE1500A21259 /* src */, - C1EA70C71680FE1500A21259 /* test */, - C1EA70CE1680FE1500A21259 /* todo.txt */, - C1EA70CF1680FE1500A21259 /* websocketpp.bbprojectd */, - C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */, - C1EA70D71680FE1500A21259 /* windows */, - ); - path = websocketpp; - sourceTree = ""; - }; - C1EA6FDE1680FE1500A21259 /* doc */ = { - isa = PBXGroup; - children = ( - C1EA6FDF1680FE1500A21259 /* uri.txt */, - ); - path = doc; - sourceTree = ""; - }; - C1EA6FE01680FE1500A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA6FE11680FE1500A21259 /* broadcast_server_tls */, - C1EA70361680FE1500A21259 /* chat_client */, - C1EA703F1680FE1500A21259 /* chat_server */, - C1EA70451680FE1500A21259 /* common.mk */, - C1EA70461680FE1500A21259 /* concurrent_server */, - C1EA704B1680FE1500A21259 /* echo_client */, - C1EA704F1680FE1500A21259 /* echo_server */, - C1EA70541680FE1500A21259 /* echo_server_tls */, - C1EA705B1680FE1500A21259 /* fuzzing_client */, - C1EA705E1680FE1500A21259 /* fuzzing_server_tls */, - C1EA70621680FE1500A21259 /* Makefile */, - C1EA70631680FE1500A21259 /* stress_client */, - C1EA70661680FE1500A21259 /* telemetry_server */, - C1EA706A1680FE1500A21259 /* wsperf */, - ); - path = examples; - sourceTree = ""; - }; - C1EA6FE11680FE1500A21259 /* broadcast_server_tls */ = { - isa = PBXGroup; - children = ( - C1EA6FE21680FE1500A21259 /* broadcast_admin.html */, - C1EA6FE31680FE1500A21259 /* broadcast_admin_handler.hpp */, - C1EA6FE41680FE1500A21259 /* broadcast_handler.hpp */, - C1EA6FE51680FE1500A21259 /* broadcast_server_handler.hpp */, - C1EA6FE61680FE1500A21259 /* broadcast_server_tls.cpp */, - C1EA6FE71680FE1500A21259 /* Makefile */, - C1EA6FE81680FE1500A21259 /* vendor */, - C1EA70351680FE1500A21259 /* wscmd.hpp */, - ); - path = broadcast_server_tls; - sourceTree = ""; - }; - C1EA6FE81680FE1500A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA6FE91680FE1500A21259 /* flot */, - C1EA70341680FE1500A21259 /* md5.js */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA6FE91680FE1500A21259 /* flot */ = { - isa = PBXGroup; - children = ( - C1EA6FEA1680FE1500A21259 /* API.txt */, - C1EA6FEB1680FE1500A21259 /* examples */, - C1EA70121680FE1500A21259 /* excanvas.js */, - C1EA70131680FE1500A21259 /* excanvas.min.js */, - C1EA70141680FE1500A21259 /* FAQ.txt */, - C1EA70151680FE1500A21259 /* jquery.colorhelpers.js */, - C1EA70161680FE1500A21259 /* jquery.colorhelpers.min.js */, - C1EA70171680FE1500A21259 /* jquery.flot.crosshair.js */, - C1EA70181680FE1500A21259 /* jquery.flot.crosshair.min.js */, - C1EA70191680FE1500A21259 /* jquery.flot.fillbetween.js */, - C1EA701A1680FE1500A21259 /* jquery.flot.fillbetween.min.js */, - C1EA701B1680FE1500A21259 /* jquery.flot.image.js */, - C1EA701C1680FE1500A21259 /* jquery.flot.image.min.js */, - C1EA701D1680FE1500A21259 /* jquery.flot.js */, - C1EA701E1680FE1500A21259 /* jquery.flot.min.js */, - C1EA701F1680FE1500A21259 /* jquery.flot.navigate.js */, - C1EA70201680FE1500A21259 /* jquery.flot.navigate.min.js */, - C1EA70211680FE1500A21259 /* jquery.flot.pie.js */, - C1EA70221680FE1500A21259 /* jquery.flot.pie.min.js */, - C1EA70231680FE1500A21259 /* jquery.flot.resize.js */, - C1EA70241680FE1500A21259 /* jquery.flot.resize.min.js */, - C1EA70251680FE1500A21259 /* jquery.flot.selection.js */, - C1EA70261680FE1500A21259 /* jquery.flot.selection.min.js */, - C1EA70271680FE1500A21259 /* jquery.flot.stack.js */, - C1EA70281680FE1500A21259 /* jquery.flot.stack.min.js */, - C1EA70291680FE1500A21259 /* jquery.flot.symbol.js */, - C1EA702A1680FE1500A21259 /* jquery.flot.symbol.min.js */, - C1EA702B1680FE1500A21259 /* jquery.flot.threshold.js */, - C1EA702C1680FE1500A21259 /* jquery.flot.threshold.min.js */, - C1EA702D1680FE1500A21259 /* jquery.js */, - C1EA702E1680FE1500A21259 /* jquery.min.js */, - C1EA702F1680FE1500A21259 /* LICENSE.txt */, - C1EA70301680FE1500A21259 /* Makefile */, - C1EA70311680FE1500A21259 /* NEWS.txt */, - C1EA70321680FE1500A21259 /* PLUGINS.txt */, - C1EA70331680FE1500A21259 /* README.txt */, - ); - path = flot; - sourceTree = ""; - }; - C1EA6FEB1680FE1500A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA6FEC1680FE1500A21259 /* ajax.html */, - C1EA6FED1680FE1500A21259 /* annotating.html */, - C1EA6FEE1680FE1500A21259 /* arrow-down.gif */, - C1EA6FEF1680FE1500A21259 /* arrow-left.gif */, - C1EA6FF01680FE1500A21259 /* arrow-right.gif */, - C1EA6FF11680FE1500A21259 /* arrow-up.gif */, - C1EA6FF21680FE1500A21259 /* basic.html */, - C1EA6FF31680FE1500A21259 /* data-eu-gdp-growth-1.json */, - C1EA6FF41680FE1500A21259 /* data-eu-gdp-growth-2.json */, - C1EA6FF51680FE1500A21259 /* data-eu-gdp-growth-3.json */, - C1EA6FF61680FE1500A21259 /* data-eu-gdp-growth-4.json */, - C1EA6FF71680FE1500A21259 /* data-eu-gdp-growth-5.json */, - C1EA6FF81680FE1500A21259 /* data-eu-gdp-growth.json */, - C1EA6FF91680FE1500A21259 /* data-japan-gdp-growth.json */, - C1EA6FFA1680FE1500A21259 /* data-usa-gdp-growth.json */, - C1EA6FFB1680FE1500A21259 /* graph-types.html */, - C1EA6FFC1680FE1500A21259 /* hs-2004-27-a-large_web.jpg */, - C1EA6FFD1680FE1500A21259 /* image.html */, - C1EA6FFE1680FE1500A21259 /* index.html */, - C1EA6FFF1680FE1500A21259 /* interacting-axes.html */, - C1EA70001680FE1500A21259 /* interacting.html */, - C1EA70011680FE1500A21259 /* layout.css */, - C1EA70021680FE1500A21259 /* multiple-axes.html */, - C1EA70031680FE1500A21259 /* navigate.html */, - C1EA70041680FE1500A21259 /* percentiles.html */, - C1EA70051680FE1500A21259 /* pie.html */, - C1EA70061680FE1500A21259 /* realtime.html */, - C1EA70071680FE1500A21259 /* resize.html */, - C1EA70081680FE1500A21259 /* selection.html */, - C1EA70091680FE1500A21259 /* setting-options.html */, - C1EA700A1680FE1500A21259 /* stacking.html */, - C1EA700B1680FE1500A21259 /* symbols.html */, - C1EA700C1680FE1500A21259 /* thresholding.html */, - C1EA700D1680FE1500A21259 /* time.html */, - C1EA700E1680FE1500A21259 /* tracking.html */, - C1EA700F1680FE1500A21259 /* turning-series.html */, - C1EA70101680FE1500A21259 /* visitors.html */, - C1EA70111680FE1500A21259 /* zooming.html */, - ); - path = examples; - sourceTree = ""; - }; - C1EA70361680FE1500A21259 /* chat_client */ = { - isa = PBXGroup; - children = ( - C1EA70371680FE1500A21259 /* chat_client.cpp */, - C1EA70381680FE1500A21259 /* chat_client.html */, - C1EA70391680FE1500A21259 /* chat_client_handler.cpp */, - C1EA703A1680FE1500A21259 /* chat_client_handler.hpp */, - C1EA703B1680FE1500A21259 /* Makefile */, - C1EA703C1680FE1500A21259 /* SConscript */, - C1EA703D1680FE1500A21259 /* vendor */, - ); - path = chat_client; - sourceTree = ""; - }; - C1EA703D1680FE1500A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA703E1680FE1500A21259 /* jquery-1.6.3.min.js */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA703F1680FE1500A21259 /* chat_server */ = { - isa = PBXGroup; - children = ( - C1EA70401680FE1500A21259 /* chat.cpp */, - C1EA70411680FE1500A21259 /* chat.hpp */, - C1EA70421680FE1500A21259 /* chat_server.cpp */, - C1EA70431680FE1500A21259 /* Makefile */, - C1EA70441680FE1500A21259 /* SConscript */, - ); - path = chat_server; - sourceTree = ""; - }; - C1EA70461680FE1500A21259 /* concurrent_server */ = { - isa = PBXGroup; - children = ( - C1EA70471680FE1500A21259 /* concurrent_client.html */, - C1EA70481680FE1500A21259 /* concurrent_server.cpp */, - C1EA70491680FE1500A21259 /* Makefile */, - C1EA704A1680FE1500A21259 /* SConscript */, - ); - path = concurrent_server; - sourceTree = ""; - }; - C1EA704B1680FE1500A21259 /* echo_client */ = { - isa = PBXGroup; - children = ( - C1EA704C1680FE1500A21259 /* echo_client.cpp */, - C1EA704D1680FE1500A21259 /* Makefile */, - C1EA704E1680FE1500A21259 /* SConscript */, - ); - path = echo_client; - sourceTree = ""; - }; - C1EA704F1680FE1500A21259 /* echo_server */ = { - isa = PBXGroup; - children = ( - C1EA70501680FE1500A21259 /* echo_client.html */, - C1EA70511680FE1500A21259 /* echo_server.cpp */, - C1EA70521680FE1500A21259 /* Makefile */, - C1EA70531680FE1500A21259 /* SConscript */, - ); - path = echo_server; - sourceTree = ""; - }; - C1EA70541680FE1500A21259 /* echo_server_tls */ = { - isa = PBXGroup; - children = ( - C1EA70551680FE1500A21259 /* echo.cpp */, - C1EA70561680FE1500A21259 /* echo.hpp */, - C1EA70571680FE1500A21259 /* echo_client.html */, - C1EA70581680FE1500A21259 /* echo_server_tls.cpp */, - C1EA70591680FE1500A21259 /* Makefile */, - C1EA705A1680FE1500A21259 /* SConscript */, - ); - path = echo_server_tls; - sourceTree = ""; - }; - C1EA705B1680FE1500A21259 /* fuzzing_client */ = { - isa = PBXGroup; - children = ( - C1EA705C1680FE1500A21259 /* fuzzing_client.cpp */, - C1EA705D1680FE1500A21259 /* Makefile */, - ); - path = fuzzing_client; - sourceTree = ""; - }; - C1EA705E1680FE1500A21259 /* fuzzing_server_tls */ = { - isa = PBXGroup; - children = ( - C1EA705F1680FE1500A21259 /* echo_client.html */, - C1EA70601680FE1500A21259 /* fuzzing_server_tls.cpp */, - C1EA70611680FE1500A21259 /* Makefile */, - ); - path = fuzzing_server_tls; - sourceTree = ""; - }; - C1EA70631680FE1500A21259 /* stress_client */ = { - isa = PBXGroup; - children = ( - C1EA70641680FE1500A21259 /* Makefile */, - C1EA70651680FE1500A21259 /* stress_client.cpp */, - ); - path = stress_client; - sourceTree = ""; - }; - C1EA70661680FE1500A21259 /* telemetry_server */ = { - isa = PBXGroup; - children = ( - C1EA70671680FE1500A21259 /* Makefile */, - C1EA70681680FE1500A21259 /* SConscript */, - C1EA70691680FE1500A21259 /* telemetry_server.cpp */, - ); - path = telemetry_server; - sourceTree = ""; - }; - C1EA706A1680FE1500A21259 /* wsperf */ = { - isa = PBXGroup; - children = ( - C1EA706B1680FE1500A21259 /* case.cpp */, - C1EA706C1680FE1500A21259 /* case.hpp */, - C1EA706D1680FE1500A21259 /* generic.cpp */, - C1EA706E1680FE1500A21259 /* generic.hpp */, - C1EA706F1680FE1500A21259 /* Makefile */, - C1EA70701680FE1500A21259 /* message_test.html */, - C1EA70711680FE1500A21259 /* request.cpp */, - C1EA70721680FE1500A21259 /* request.hpp */, - C1EA70731680FE1500A21259 /* SConscript */, - C1EA70741680FE1500A21259 /* stress_aggregate.cpp */, - C1EA70751680FE1500A21259 /* stress_aggregate.hpp */, - C1EA70761680FE1500A21259 /* stress_handler.cpp */, - C1EA70771680FE1500A21259 /* stress_handler.hpp */, - C1EA70781680FE1500A21259 /* stress_test.html */, - C1EA70791680FE1500A21259 /* vendor */, - C1EA707E1680FE1500A21259 /* wscmd.cpp */, - C1EA707F1680FE1500A21259 /* wscmd.hpp */, - C1EA70801680FE1500A21259 /* wsperf.cfg */, - C1EA70811680FE1500A21259 /* wsperf.cpp */, - C1EA70821680FE1500A21259 /* wsperf_commander.html */, - ); - path = wsperf; - sourceTree = ""; - }; - C1EA70791680FE1500A21259 /* vendor */ = { - isa = PBXGroup; - children = ( - C1EA707A1680FE1500A21259 /* backbone-localstorage.js */, - C1EA707B1680FE1500A21259 /* backbone.js */, - C1EA707C1680FE1500A21259 /* jquery.min.js */, - C1EA707D1680FE1500A21259 /* underscore.js */, - ); - path = vendor; - sourceTree = ""; - }; - C1EA70871680FE1500A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA70881680FE1500A21259 /* base64 */, - C1EA708B1680FE1500A21259 /* common.hpp */, - C1EA708C1680FE1500A21259 /* connection.hpp */, - C1EA708D1680FE1500A21259 /* endpoint.hpp */, - C1EA708E1680FE1500A21259 /* http */, - C1EA70911680FE1500A21259 /* logger */, - C1EA70931680FE1500A21259 /* md5 */, - C1EA70971680FE1500A21259 /* messages */, - C1EA709B1680FE1500A21259 /* network_utilities.cpp */, - C1EA709C1680FE1500A21259 /* network_utilities.hpp */, - C1EA709D1680FE1500A21259 /* processors */, - C1EA70A51680FE1500A21259 /* rng */, - C1EA70AA1680FE1500A21259 /* roles */, - C1EA70AD1680FE1500A21259 /* SConscript */, - C1EA70AE1680FE1500A21259 /* sha1 */, - C1EA70B71680FE1500A21259 /* shared_const_buffer.hpp */, - C1EA70B81680FE1500A21259 /* sockets */, - C1EA70BC1680FE1500A21259 /* ssl */, - C1EA70C11680FE1500A21259 /* uri.cpp */, - C1EA70C21680FE1500A21259 /* uri.hpp */, - C1EA70C31680FE1500A21259 /* utf8_validator */, - C1EA70C51680FE1500A21259 /* websocket_frame.hpp */, - C1EA70C61680FE1500A21259 /* websocketpp.hpp */, - ); - path = src; - sourceTree = ""; - }; - C1EA70881680FE1500A21259 /* base64 */ = { - isa = PBXGroup; - children = ( - C1EA70891680FE1500A21259 /* base64.cpp */, - C1EA708A1680FE1500A21259 /* base64.h */, - ); - path = base64; - sourceTree = ""; - }; - C1EA708E1680FE1500A21259 /* http */ = { - isa = PBXGroup; - children = ( - C1EA708F1680FE1500A21259 /* constants.hpp */, - C1EA70901680FE1500A21259 /* parser.hpp */, - ); - path = http; - sourceTree = ""; - }; - C1EA70911680FE1500A21259 /* logger */ = { - isa = PBXGroup; - children = ( - C1EA70921680FE1500A21259 /* logger.hpp */, - ); - path = logger; - sourceTree = ""; - }; - C1EA70931680FE1500A21259 /* md5 */ = { - isa = PBXGroup; - children = ( - C1EA70941680FE1500A21259 /* md5.c */, - C1EA70951680FE1500A21259 /* md5.h */, - C1EA70961680FE1500A21259 /* md5.hpp */, - ); - path = md5; - sourceTree = ""; - }; - C1EA70971680FE1500A21259 /* messages */ = { - isa = PBXGroup; - children = ( - C1EA70981680FE1500A21259 /* control.hpp */, - C1EA70991680FE1500A21259 /* data.cpp */, - C1EA709A1680FE1500A21259 /* data.hpp */, - ); - path = messages; - sourceTree = ""; - }; - C1EA709D1680FE1500A21259 /* processors */ = { - isa = PBXGroup; - children = ( - C1EA709E1680FE1500A21259 /* hybi.hpp */, - C1EA709F1680FE1500A21259 /* hybi_header.cpp */, - C1EA70A01680FE1500A21259 /* hybi_header.hpp */, - C1EA70A11680FE1500A21259 /* hybi_legacy.hpp */, - C1EA70A21680FE1500A21259 /* hybi_util.cpp */, - C1EA70A31680FE1500A21259 /* hybi_util.hpp */, - C1EA70A41680FE1500A21259 /* processor.hpp */, - ); - path = processors; - sourceTree = ""; - }; - C1EA70A51680FE1500A21259 /* rng */ = { - isa = PBXGroup; - children = ( - C1EA70A61680FE1500A21259 /* blank_rng.cpp */, - C1EA70A71680FE1500A21259 /* blank_rng.hpp */, - C1EA70A81680FE1500A21259 /* boost_rng.cpp */, - C1EA70A91680FE1500A21259 /* boost_rng.hpp */, - ); - path = rng; - sourceTree = ""; - }; - C1EA70AA1680FE1500A21259 /* roles */ = { - isa = PBXGroup; - children = ( - C1EA70AB1680FE1500A21259 /* client.hpp */, - C1EA70AC1680FE1500A21259 /* server.hpp */, - ); - path = roles; - sourceTree = ""; - }; - C1EA70AE1680FE1500A21259 /* sha1 */ = { - isa = PBXGroup; - children = ( - C1EA70AF1680FE1500A21259 /* license.txt */, - C1EA70B01680FE1500A21259 /* Makefile */, - C1EA70B11680FE1500A21259 /* Makefile.nt */, - C1EA70B21680FE1500A21259 /* sha.cpp */, - C1EA70B31680FE1500A21259 /* sha1.cpp */, - C1EA70B41680FE1500A21259 /* sha1.h */, - C1EA70B51680FE1500A21259 /* shacmp.cpp */, - C1EA70B61680FE1500A21259 /* shatest.cpp */, - ); - path = sha1; - sourceTree = ""; - }; - C1EA70B81680FE1500A21259 /* sockets */ = { - isa = PBXGroup; - children = ( - C1EA70B91680FE1500A21259 /* plain.hpp */, - C1EA70BA1680FE1500A21259 /* socket_base.hpp */, - C1EA70BB1680FE1500A21259 /* tls.hpp */, - ); - path = sockets; - sourceTree = ""; - }; - C1EA70BC1680FE1500A21259 /* ssl */ = { - isa = PBXGroup; - children = ( - C1EA70BD1680FE1500A21259 /* client.pem */, - C1EA70BE1680FE1500A21259 /* dh512.pem */, - C1EA70BF1680FE1500A21259 /* server.cer */, - C1EA70C01680FE1500A21259 /* server.pem */, - ); - path = ssl; - sourceTree = ""; - }; - C1EA70C31680FE1500A21259 /* utf8_validator */ = { - isa = PBXGroup; - children = ( - C1EA70C41680FE1500A21259 /* utf8_validator.hpp */, - ); - path = utf8_validator; - sourceTree = ""; - }; - C1EA70C71680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA70C81680FE1500A21259 /* basic */, - ); - path = test; - sourceTree = ""; - }; - C1EA70C81680FE1500A21259 /* basic */ = { - isa = PBXGroup; - children = ( - C1EA70C91680FE1500A21259 /* hybi_util.cpp */, - C1EA70CA1680FE1500A21259 /* logging.cpp */, - C1EA70CB1680FE1500A21259 /* Makefile */, - C1EA70CC1680FE1500A21259 /* parsing.cpp */, - C1EA70CD1680FE1500A21259 /* uri_perf.cpp */, - ); - path = basic; - sourceTree = ""; - }; - C1EA70CF1680FE1500A21259 /* websocketpp.bbprojectd */ = { - isa = PBXGroup; - children = ( - C1EA70D01680FE1500A21259 /* project.bbprojectdata */, - C1EA70D11680FE1500A21259 /* Scratchpad.txt */, - C1EA70D21680FE1500A21259 /* Unix Worksheet.worksheet */, - C1EA70D31680FE1500A21259 /* zaphoyd.bbprojectsettings */, - ); - path = websocketpp.bbprojectd; - sourceTree = ""; - }; - C1EA70D51680FE1500A21259 /* Products */ = { - isa = PBXGroup; - children = ( - C1EA84A21680FE1B00A21259 /* libwebsocketpp.a */, - C1EA84A41680FE1B00A21259 /* libwebsocketpp.dylib */, - C1EA84A61680FE1B00A21259 /* echo_server */, - C1EA84A81680FE1B00A21259 /* chat_client */, - C1EA84AA1680FE1B00A21259 /* echo_client */, - C1EA84AC1680FE1B00A21259 /* Policy Test */, - C1EA84AE1680FE1B00A21259 /* echo_server_tls */, - C1EA84B01680FE1B00A21259 /* fuzzing_server */, - C1EA84B21680FE1B00A21259 /* fuzzing_client */, - C1EA84B41680FE1B00A21259 /* broadcast_server */, - C1EA84B61680FE1B00A21259 /* stress_client */, - C1EA84B81680FE1B00A21259 /* concurrent_server */, - C1EA84BA1680FE1B00A21259 /* wsperf */, - ); - name = Products; - sourceTree = ""; - }; - C1EA70D71680FE1500A21259 /* windows */ = { - isa = PBXGroup; - children = ( - C1EA70D81680FE1500A21259 /* vcpp2008 */, - C1EA70E31680FE1500A21259 /* vcpp2010 */, - ); - path = windows; - sourceTree = ""; - }; - C1EA70D81680FE1500A21259 /* vcpp2008 */ = { - isa = PBXGroup; - children = ( - C1EA70D91680FE1500A21259 /* .gitignore */, - C1EA70DA1680FE1500A21259 /* common.vsprops */, - C1EA70DB1680FE1500A21259 /* examples */, - C1EA70E01680FE1500A21259 /* stdint.h */, - C1EA70E11680FE1500A21259 /* websocketpp.sln */, - C1EA70E21680FE1500A21259 /* websocketpp.vcproj */, - ); - path = vcpp2008; - sourceTree = ""; - }; - C1EA70DB1680FE1500A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA70DC1680FE1500A21259 /* chatclient.vcproj */, - C1EA70DD1680FE1500A21259 /* chatserver.vcproj */, - C1EA70DE1680FE1500A21259 /* concurrent_server.vcproj */, - C1EA70DF1680FE1500A21259 /* echoserver.vcproj */, - ); - path = examples; - sourceTree = ""; - }; - C1EA70E31680FE1500A21259 /* vcpp2010 */ = { - isa = PBXGroup; - children = ( - C1EA70E41680FE1500A21259 /* .gitignore */, - C1EA70E51680FE1500A21259 /* examples */, - C1EA70F11680FE1500A21259 /* readme.txt */, - C1EA70F21680FE1500A21259 /* websocketpp.sln */, - C1EA70F31680FE1500A21259 /* websocketpp.vcxproj */, - C1EA70F41680FE1500A21259 /* websocketpp.vcxproj.filters */, - ); - path = vcpp2010; - sourceTree = ""; - }; - C1EA70E51680FE1500A21259 /* examples */ = { - isa = PBXGroup; - children = ( - C1EA70E61680FE1500A21259 /* chatclient.vcxproj */, - C1EA70E71680FE1500A21259 /* chatclient.vcxproj.filters */, - C1EA70E81680FE1500A21259 /* chatserver.vcxproj */, - C1EA70E91680FE1500A21259 /* chatserver.vcxproj.filters */, - C1EA70EA1680FE1500A21259 /* echoclient.vcxproj */, - C1EA70EB1680FE1500A21259 /* echoclient.vcxproj.filters */, - C1EA70EC1680FE1500A21259 /* echoserver.vcxproj */, - C1EA70ED1680FE1500A21259 /* echoserver.vcxproj.filters */, - C1EA70EE1680FE1500A21259 /* wsperf */, - ); - path = examples; - sourceTree = ""; - }; - C1EA70EE1680FE1500A21259 /* wsperf */ = { - isa = PBXGroup; - children = ( - C1EA70EF1680FE1500A21259 /* wsperf.vcxproj */, - C1EA70F01680FE1500A21259 /* wsperf.vcxproj.filters */, - ); - path = wsperf; - sourceTree = ""; - }; - C1EA70F51680FE1500A21259 /* js */ = { - isa = PBXGroup; - children = ( - C1EA70F61680FE1500A21259 /* account.js */, - C1EA70F71680FE1500A21259 /* amount.js */, - C1EA70F81680FE1500A21259 /* cryptojs */, - C1EA710D1680FE1500A21259 /* index.js */, - C1EA710E1680FE1500A21259 /* jsbn.js */, - C1EA710F1680FE1500A21259 /* network.js */, - C1EA71101680FE1500A21259 /* nodeutils.js */, - C1EA71111680FE1500A21259 /* remote.js */, - C1EA71121680FE1500A21259 /* serializer.js */, - C1EA71131680FE1500A21259 /* sjcl */, - C1EA71E61680FE1500A21259 /* utils.js */, - C1EA71E71680FE1500A21259 /* utils.web.js */, - ); - path = js; - sourceTree = ""; - }; - C1EA70F81680FE1500A21259 /* cryptojs */ = { - isa = PBXGroup; - children = ( - C1EA70F91680FE1500A21259 /* cryptojs.js */, - C1EA70FA1680FE1500A21259 /* lib */, - C1EA71081680FE1500A21259 /* package.json */, - C1EA71091680FE1500A21259 /* README.md */, - C1EA710A1680FE1500A21259 /* test */, - ); - path = cryptojs; - sourceTree = ""; - }; - C1EA70FA1680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA70FB1680FE1500A21259 /* AES.js */, - C1EA70FC1680FE1500A21259 /* BlockModes.js */, - C1EA70FD1680FE1500A21259 /* Crypto.js */, - C1EA70FE1680FE1500A21259 /* CryptoMath.js */, - C1EA70FF1680FE1500A21259 /* DES.js */, - C1EA71001680FE1500A21259 /* HMAC.js */, - C1EA71011680FE1500A21259 /* MARC4.js */, - C1EA71021680FE1500A21259 /* MD5.js */, - C1EA71031680FE1500A21259 /* PBKDF2.js */, - C1EA71041680FE1500A21259 /* PBKDF2Async.js */, - C1EA71051680FE1500A21259 /* Rabbit.js */, - C1EA71061680FE1500A21259 /* SHA1.js */, - C1EA71071680FE1500A21259 /* SHA256.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA710A1680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA710B1680FE1500A21259 /* PBKDF2-test.js */, - C1EA710C1680FE1500A21259 /* test.coffee */, - ); - path = test; - sourceTree = ""; - }; - C1EA71131680FE1500A21259 /* sjcl */ = { - isa = PBXGroup; - children = ( - C1EA71141680FE1500A21259 /* browserTest */, - C1EA71191680FE1500A21259 /* compress */, - C1EA71221680FE1500A21259 /* config.mk */, - C1EA71231680FE1500A21259 /* configure */, - C1EA71241680FE1500A21259 /* core */, - C1EA71381680FE1500A21259 /* core.js */, - C1EA71391680FE1500A21259 /* core_closure.js */, - C1EA713A1680FE1500A21259 /* demo */, - C1EA71401680FE1500A21259 /* jsdoc_toolkit-2.3.3-beta */, - C1EA71C11680FE1500A21259 /* lint */, - C1EA71C41680FE1500A21259 /* Makefile */, - C1EA71C51680FE1500A21259 /* README */, - C1EA71CB1680FE1500A21259 /* sjcl.js */, - C1EA71CC1680FE1500A21259 /* test */, - ); - path = sjcl; - sourceTree = ""; - }; - C1EA71141680FE1500A21259 /* browserTest */ = { - isa = PBXGroup; - children = ( - C1EA71151680FE1500A21259 /* browserTest.html */, - C1EA71161680FE1500A21259 /* browserUtil.js */, - C1EA71171680FE1500A21259 /* rhinoUtil.js */, - C1EA71181680FE1500A21259 /* test.css */, - ); - path = browserTest; - sourceTree = ""; - }; - C1EA71191680FE1500A21259 /* compress */ = { - isa = PBXGroup; - children = ( - C1EA711A1680FE1500A21259 /* compiler.jar */, - C1EA711B1680FE1500A21259 /* compress_with_closure.sh */, - C1EA711C1680FE1500A21259 /* compress_with_yui.sh */, - C1EA711D1680FE1500A21259 /* dewindowize.pl */, - C1EA711E1680FE1500A21259 /* digitize.pl */, - C1EA711F1680FE1500A21259 /* opacify.pl */, - C1EA71201680FE1500A21259 /* remove_constants.pl */, - C1EA71211680FE1500A21259 /* yuicompressor-2.4.2.jar */, - ); - path = compress; - sourceTree = ""; - }; - C1EA71241680FE1500A21259 /* core */ = { - isa = PBXGroup; - children = ( - C1EA71251680FE1500A21259 /* aes.js */, - C1EA71261680FE1500A21259 /* bitArray.js */, - C1EA71271680FE1500A21259 /* bn.js */, - C1EA71281680FE1500A21259 /* cbc.js */, - C1EA71291680FE1500A21259 /* ccm.js */, - C1EA712A1680FE1500A21259 /* codecBase64.js */, - C1EA712B1680FE1500A21259 /* codecBytes.js */, - C1EA712C1680FE1500A21259 /* codecHex.js */, - C1EA712D1680FE1500A21259 /* codecString.js */, - C1EA712E1680FE1500A21259 /* convenience.js */, - C1EA712F1680FE1500A21259 /* ecc.js */, - C1EA71301680FE1500A21259 /* hmac.js */, - C1EA71311680FE1500A21259 /* ocb2.js */, - C1EA71321680FE1500A21259 /* pbkdf2.js */, - C1EA71331680FE1500A21259 /* random.js */, - C1EA71341680FE1500A21259 /* sha1.js */, - C1EA71351680FE1500A21259 /* sha256.js */, - C1EA71361680FE1500A21259 /* sjcl.js */, - C1EA71371680FE1500A21259 /* srp.js */, - ); - path = core; - sourceTree = ""; - }; - C1EA713A1680FE1500A21259 /* demo */ = { - isa = PBXGroup; - children = ( - C1EA713B1680FE1500A21259 /* alpha-arrow.png */, - C1EA713C1680FE1500A21259 /* example.css */, - C1EA713D1680FE1500A21259 /* example.js */, - C1EA713E1680FE1500A21259 /* form.js */, - C1EA713F1680FE1500A21259 /* index.html */, - ); - path = demo; - sourceTree = ""; - }; - C1EA71401680FE1500A21259 /* jsdoc_toolkit-2.3.3-beta */ = { - isa = PBXGroup; - children = ( - C1EA71411680FE1500A21259 /* app */, - C1EA71A51680FE1500A21259 /* changes.txt */, - C1EA71A61680FE1500A21259 /* conf */, - C1EA71A81680FE1500A21259 /* java */, - C1EA71B01680FE1500A21259 /* jsdebug.jar */, - C1EA71B11680FE1500A21259 /* jsrun.jar */, - C1EA71B21680FE1500A21259 /* jsrun.sh */, - C1EA71B31680FE1500A21259 /* README.txt */, - C1EA71B41680FE1500A21259 /* templates */, - ); - path = "jsdoc_toolkit-2.3.3-beta"; - sourceTree = ""; - }; - C1EA71411680FE1500A21259 /* app */ = { - isa = PBXGroup; - children = ( - C1EA71421680FE1500A21259 /* frame */, - C1EA714C1680FE1500A21259 /* frame.js */, - C1EA714D1680FE1500A21259 /* handlers */, - C1EA71541680FE1500A21259 /* lib */, - C1EA71661680FE1500A21259 /* main.js */, - C1EA71671680FE1500A21259 /* plugins */, - C1EA716F1680FE1500A21259 /* run.js */, - C1EA71701680FE1500A21259 /* t */, - C1EA71731680FE1500A21259 /* test */, - C1EA71A41680FE1500A21259 /* test.js */, - ); - path = app; - sourceTree = ""; - }; - C1EA71421680FE1500A21259 /* frame */ = { - isa = PBXGroup; - children = ( - C1EA71431680FE1500A21259 /* Chain.js */, - C1EA71441680FE1500A21259 /* Dumper.js */, - C1EA71451680FE1500A21259 /* Hash.js */, - C1EA71461680FE1500A21259 /* Link.js */, - C1EA71471680FE1500A21259 /* Namespace.js */, - C1EA71481680FE1500A21259 /* Opt.js */, - C1EA71491680FE1500A21259 /* Reflection.js */, - C1EA714A1680FE1500A21259 /* String.js */, - C1EA714B1680FE1500A21259 /* Testrun.js */, - ); - path = frame; - sourceTree = ""; - }; - C1EA714D1680FE1500A21259 /* handlers */ = { - isa = PBXGroup; - children = ( - C1EA714E1680FE1500A21259 /* FOODOC.js */, - C1EA714F1680FE1500A21259 /* XMLDOC */, - C1EA71531680FE1500A21259 /* XMLDOC.js */, - ); - path = handlers; - sourceTree = ""; - }; - C1EA714F1680FE1500A21259 /* XMLDOC */ = { - isa = PBXGroup; - children = ( - C1EA71501680FE1500A21259 /* DomReader.js */, - C1EA71511680FE1500A21259 /* XMLDoc.js */, - C1EA71521680FE1500A21259 /* XMLParse.js */, - ); - path = XMLDOC; - sourceTree = ""; - }; - C1EA71541680FE1500A21259 /* lib */ = { - isa = PBXGroup; - children = ( - C1EA71551680FE1500A21259 /* JSDOC */, - C1EA71651680FE1500A21259 /* JSDOC.js */, - ); - path = lib; - sourceTree = ""; - }; - C1EA71551680FE1500A21259 /* JSDOC */ = { - isa = PBXGroup; - children = ( - C1EA71561680FE1500A21259 /* DocComment.js */, - C1EA71571680FE1500A21259 /* DocTag.js */, - C1EA71581680FE1500A21259 /* JsDoc.js */, - C1EA71591680FE1500A21259 /* JsPlate.js */, - C1EA715A1680FE1500A21259 /* Lang.js */, - C1EA715B1680FE1500A21259 /* Parser.js */, - C1EA715C1680FE1500A21259 /* PluginManager.js */, - C1EA715D1680FE1500A21259 /* Symbol.js */, - C1EA715E1680FE1500A21259 /* SymbolSet.js */, - C1EA715F1680FE1500A21259 /* TextStream.js */, - C1EA71601680FE1500A21259 /* Token.js */, - C1EA71611680FE1500A21259 /* TokenReader.js */, - C1EA71621680FE1500A21259 /* TokenStream.js */, - C1EA71631680FE1500A21259 /* Util.js */, - C1EA71641680FE1500A21259 /* Walker.js */, - ); - path = JSDOC; - sourceTree = ""; - }; - C1EA71671680FE1500A21259 /* plugins */ = { - isa = PBXGroup; - children = ( - C1EA71681680FE1500A21259 /* commentSrcJson.js */, - C1EA71691680FE1500A21259 /* frameworkPrototype.js */, - C1EA716A1680FE1500A21259 /* functionCall.js */, - C1EA716B1680FE1500A21259 /* publishSrcHilite.js */, - C1EA716C1680FE1500A21259 /* symbolLink.js */, - C1EA716D1680FE1500A21259 /* tagParamConfig.js */, - C1EA716E1680FE1500A21259 /* tagSynonyms.js */, - ); - path = plugins; - sourceTree = ""; - }; - C1EA71701680FE1500A21259 /* t */ = { - isa = PBXGroup; - children = ( - C1EA71711680FE1500A21259 /* runner.js */, - C1EA71721680FE1500A21259 /* TestDoc.js */, - ); - path = t; - sourceTree = ""; - }; - C1EA71731680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA71741680FE1500A21259 /* addon.js */, - C1EA71751680FE1500A21259 /* anon_inner.js */, - C1EA71761680FE1500A21259 /* augments.js */, - C1EA71771680FE1500A21259 /* augments2.js */, - C1EA71781680FE1500A21259 /* borrows.js */, - C1EA71791680FE1500A21259 /* borrows2.js */, - C1EA717A1680FE1500A21259 /* config.js */, - C1EA717B1680FE1500A21259 /* constructs.js */, - C1EA717C1680FE1500A21259 /* encoding.js */, - C1EA717D1680FE1500A21259 /* encoding_other.js */, - C1EA717E1680FE1500A21259 /* event.js */, - C1EA717F1680FE1500A21259 /* exports.js */, - C1EA71801680FE1500A21259 /* functions_anon.js */, - C1EA71811680FE1500A21259 /* functions_nested.js */, - C1EA71821680FE1500A21259 /* global.js */, - C1EA71831680FE1500A21259 /* globals.js */, - C1EA71841680FE1500A21259 /* ignore.js */, - C1EA71851680FE1500A21259 /* inner.js */, - C1EA71861680FE1500A21259 /* jsdoc_test.js */, - C1EA71871680FE1500A21259 /* lend.js */, - C1EA71881680FE1500A21259 /* memberof.js */, - C1EA71891680FE1500A21259 /* memberof2.js */, - C1EA718A1680FE1500A21259 /* memberof3.js */, - C1EA718B1680FE1500A21259 /* memberof_constructor.js */, - C1EA718C1680FE1500A21259 /* module.js */, - C1EA718D1680FE1500A21259 /* multi_methods.js */, - C1EA718E1680FE1500A21259 /* name.js */, - C1EA718F1680FE1500A21259 /* namespace_nested.js */, - C1EA71901680FE1500A21259 /* nocode.js */, - C1EA71911680FE1500A21259 /* oblit_anon.js */, - C1EA71921680FE1500A21259 /* overview.js */, - C1EA71931680FE1500A21259 /* param_inline.js */, - C1EA71941680FE1500A21259 /* params_optional.js */, - C1EA71951680FE1500A21259 /* prototype.js */, - C1EA71961680FE1500A21259 /* prototype_nested.js */, - C1EA71971680FE1500A21259 /* prototype_oblit.js */, - C1EA71981680FE1500A21259 /* prototype_oblit_constructor.js */, - C1EA71991680FE1500A21259 /* public.js */, - C1EA719A1680FE1500A21259 /* scripts */, - C1EA719D1680FE1500A21259 /* shared.js */, - C1EA719E1680FE1500A21259 /* shared2.js */, - C1EA719F1680FE1500A21259 /* shortcuts.js */, - C1EA71A01680FE1500A21259 /* static_this.js */, - C1EA71A11680FE1500A21259 /* synonyms.js */, - C1EA71A21680FE1500A21259 /* tosource.js */, - C1EA71A31680FE1500A21259 /* variable_redefine.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA719A1680FE1500A21259 /* scripts */ = { - isa = PBXGroup; - children = ( - C1EA719B1680FE1500A21259 /* code.js */, - C1EA719C1680FE1500A21259 /* notcode.txt */, - ); - path = scripts; - sourceTree = ""; - }; - C1EA71A61680FE1500A21259 /* conf */ = { - isa = PBXGroup; - children = ( - C1EA71A71680FE1500A21259 /* sample.conf */, - ); - path = conf; - sourceTree = ""; - }; - C1EA71A81680FE1500A21259 /* java */ = { - isa = PBXGroup; - children = ( - C1EA71A91680FE1500A21259 /* build.xml */, - C1EA71AA1680FE1500A21259 /* build_1.4.xml */, - C1EA71AB1680FE1500A21259 /* classes */, - C1EA71AD1680FE1500A21259 /* src */, - ); - path = java; - sourceTree = ""; - }; - C1EA71AB1680FE1500A21259 /* classes */ = { - isa = PBXGroup; - children = ( - C1EA71AC1680FE1500A21259 /* js.jar */, - ); - path = classes; - sourceTree = ""; - }; - C1EA71AD1680FE1500A21259 /* src */ = { - isa = PBXGroup; - children = ( - C1EA71AE1680FE1500A21259 /* JsDebugRun.java */, - C1EA71AF1680FE1500A21259 /* JsRun.java */, - ); - path = src; - sourceTree = ""; - }; - C1EA71B41680FE1500A21259 /* templates */ = { - isa = PBXGroup; - children = ( - C1EA71B51680FE1500A21259 /* codeview */, - ); - path = templates; - sourceTree = ""; - }; - C1EA71B51680FE1500A21259 /* codeview */ = { - isa = PBXGroup; - children = ( - C1EA71B61680FE1500A21259 /* allclasses.tmpl */, - C1EA71B71680FE1500A21259 /* allfiles.tmpl */, - C1EA71B81680FE1500A21259 /* class.tmpl */, - C1EA71B91680FE1500A21259 /* css */, - C1EA71BB1680FE1500A21259 /* index.tmpl */, - C1EA71BC1680FE1500A21259 /* publish.js */, - C1EA71BD1680FE1500A21259 /* static */, - C1EA71C01680FE1500A21259 /* symbol.tmpl */, - ); - path = codeview; - sourceTree = ""; - }; - C1EA71B91680FE1500A21259 /* css */ = { - isa = PBXGroup; - children = ( - C1EA71BA1680FE1500A21259 /* default.css */, - ); - path = css; - sourceTree = ""; - }; - C1EA71BD1680FE1500A21259 /* static */ = { - isa = PBXGroup; - children = ( - C1EA71BE1680FE1500A21259 /* header.html */, - C1EA71BF1680FE1500A21259 /* index.html */, - ); - path = static; - sourceTree = ""; - }; - C1EA71C11680FE1500A21259 /* lint */ = { - isa = PBXGroup; - children = ( - C1EA71C21680FE1500A21259 /* coding_guidelines.pl */, - C1EA71C31680FE1500A21259 /* jslint_rhino.js */, - ); - path = lint; - sourceTree = ""; - }; - C1EA71C51680FE1500A21259 /* README */ = { - isa = PBXGroup; - children = ( - C1EA71C61680FE1500A21259 /* bsd.txt */, - C1EA71C71680FE1500A21259 /* COPYRIGHT */, - C1EA71C81680FE1500A21259 /* gpl-2.0.txt */, - C1EA71C91680FE1500A21259 /* gpl-3.0.txt */, - C1EA71CA1680FE1500A21259 /* INSTALL */, - ); - path = README; - sourceTree = ""; - }; - C1EA71CC1680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA71CD1680FE1500A21259 /* aes_test.js */, - C1EA71CE1680FE1500A21259 /* aes_vectors.js */, - C1EA71CF1680FE1500A21259 /* bn_test.js */, - C1EA71D01680FE1500A21259 /* bn_vectors.js */, - C1EA71D11680FE1500A21259 /* cbc_test.js */, - C1EA71D21680FE1500A21259 /* cbc_vectors.js */, - C1EA71D31680FE1500A21259 /* ccm_test.js */, - C1EA71D41680FE1500A21259 /* ccm_vectors.js */, - C1EA71D51680FE1500A21259 /* ecdh_test.js */, - C1EA71D61680FE1500A21259 /* ecdsa_test.js */, - C1EA71D71680FE1500A21259 /* hmac_test.js */, - C1EA71D81680FE1500A21259 /* hmac_vectors.js */, - C1EA71D91680FE1500A21259 /* ocb2_test.js */, - C1EA71DA1680FE1500A21259 /* ocb2_vectors.js */, - C1EA71DB1680FE1500A21259 /* pbkdf2_test.js */, - C1EA71DC1680FE1500A21259 /* run_tests_browser.js */, - C1EA71DD1680FE1500A21259 /* run_tests_rhino.js */, - C1EA71DE1680FE1500A21259 /* sha1_test.js */, - C1EA71DF1680FE1500A21259 /* sha1_vectors.js */, - C1EA71E01680FE1500A21259 /* sha256_test.js */, - C1EA71E11680FE1500A21259 /* sha256_test_brute_force.js */, - C1EA71E21680FE1500A21259 /* sha256_vectors.js */, - C1EA71E31680FE1500A21259 /* srp_test.js */, - C1EA71E41680FE1500A21259 /* srp_vectors.js */, - C1EA71E51680FE1500A21259 /* test.js */, - ); - path = test; - sourceTree = ""; - }; - C1EA71E91680FE1500A21259 /* test */ = { - isa = PBXGroup; - children = ( - C1EA71EA1680FE1500A21259 /* amount-test.js */, - C1EA71EB1680FE1500A21259 /* buster.js */, - C1EA71EC1680FE1500A21259 /* config-example.js */, - C1EA71ED1680FE1500A21259 /* config.js */, - C1EA71EE1680FE1500A21259 /* monitor-test.js */, - C1EA71EF1680FE1500A21259 /* offer-test.js */, - C1EA71F01680FE1500A21259 /* path-test.js */, - C1EA71F11680FE1500A21259 /* remote-test.js */, - C1EA71F21680FE1500A21259 /* send-test.js */, - C1EA71F31680FE1500A21259 /* server-test.js */, - C1EA71F41680FE1500A21259 /* server.js */, - C1EA71F51680FE1500A21259 /* testconfig.js */, - C1EA71F61680FE1500A21259 /* testutils.js */, - C1EA71F71680FE1500A21259 /* utils-test.js */, - C1EA71F81680FE1500A21259 /* websocket-test.js */, - ); - name = test; - path = ../../test; - sourceTree = ""; - }; - C1EA71FA1680FE1500A21259 /* tmp */ = { - isa = PBXGroup; - children = ( - C1EA71FB1680FE1500A21259 /* server */, - ); - name = tmp; - path = ../../tmp; - sourceTree = ""; - }; - C1EA71FB1680FE1500A21259 /* server */ = { - isa = PBXGroup; - children = ( - C1EA71FC1680FE1500A21259 /* alpha */, - ); - path = server; - sourceTree = ""; - }; - C1EA71FC1680FE1500A21259 /* alpha */ = { - isa = PBXGroup; - children = ( - C1EA71FD1680FE1500A21259 /* rippled.cfg */, - ); - path = alpha; - sourceTree = ""; - }; - C1EA72001680FE1500A21259 /* web_modules */ = { - isa = PBXGroup; - children = ( - C1EA72011680FE1500A21259 /* domain.js */, - C1EA72021680FE1500A21259 /* ws.js */, - ); - name = web_modules; - path = ../../web_modules; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - C1EA4FC71680FDCA00A21259 /* NewCoin */ = { - isa = PBXNativeTarget; - buildConfigurationList = C1EA4FD21680FDCA00A21259 /* Build configuration list for PBXNativeTarget "NewCoin" */; - buildPhases = ( - C1EA4FC41680FDCA00A21259 /* Sources */, - C1EA4FC51680FDCA00A21259 /* Frameworks */, - C1EA4FC61680FDCA00A21259 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = NewCoin; - productName = NewCoin; - productReference = C1EA4FC81680FDCA00A21259 /* NewCoin */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - C1EA4FBF1680FDCA00A21259 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0450; - ORGANIZATIONNAME = Jcar; - }; - buildConfigurationList = C1EA4FC21680FDCA00A21259 /* Build configuration list for PBXProject "NewCoin" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = C1EA4FBD1680FDCA00A21259; - productRefGroup = C1EA4FC91680FDCA00A21259 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = C1EA50621680FE1100A21259 /* Products */; - ProjectRef = C1EA50611680FE1100A21259 /* NewCoin.xcodeproj */; - }, - { - ProductGroup = C1EA70D51680FE1500A21259 /* Products */; - ProjectRef = C1EA70D41680FE1500A21259 /* websocketpp.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - C1EA4FC71680FDCA00A21259 /* NewCoin */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - C1EA84A21680FE1B00A21259 /* libwebsocketpp.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libwebsocketpp.a; - remoteRef = C1EA84A11680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84A41680FE1B00A21259 /* libwebsocketpp.dylib */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.dylib"; - path = libwebsocketpp.dylib; - remoteRef = C1EA84A31680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84A61680FE1B00A21259 /* echo_server */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = echo_server; - remoteRef = C1EA84A51680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84A81680FE1B00A21259 /* chat_client */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = chat_client; - remoteRef = C1EA84A71680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84AA1680FE1B00A21259 /* echo_client */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = echo_client; - remoteRef = C1EA84A91680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84AC1680FE1B00A21259 /* Policy Test */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - name = "Policy Test"; - path = policy_test; - remoteRef = C1EA84AB1680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84AE1680FE1B00A21259 /* echo_server_tls */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = echo_server_tls; - remoteRef = C1EA84AD1680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84B01680FE1B00A21259 /* fuzzing_server */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = fuzzing_server; - remoteRef = C1EA84AF1680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84B21680FE1B00A21259 /* fuzzing_client */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = fuzzing_client; - remoteRef = C1EA84B11680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84B41680FE1B00A21259 /* broadcast_server */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = broadcast_server; - remoteRef = C1EA84B31680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84B61680FE1B00A21259 /* stress_client */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = stress_client; - remoteRef = C1EA84B51680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84B81680FE1B00A21259 /* concurrent_server */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = concurrent_server; - remoteRef = C1EA84B71680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C1EA84BA1680FE1B00A21259 /* wsperf */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = wsperf; - remoteRef = C1EA84B91680FE1B00A21259 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXSourcesBuildPhase section */ - C1EA4FC41680FDCA00A21259 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C1EA4FCD1680FDCA00A21259 /* main.cpp in Sources */, - C1EA727B1680FE1800A21259 /* ripple.pb.cc in Sources */, - C1EA727D1680FE1800A21259 /* main.cpp in Sources */, - C1EA83171680FE1A00A21259 /* database.cpp in Sources */, - C1EA83181680FE1A00A21259 /* mysqldatabase.cpp in Sources */, - C1EA83191680FE1A00A21259 /* sqlite3.c in Sources */, - C1EA831A1680FE1A00A21259 /* SqliteDatabase.cpp in Sources */, - C1EA831B1680FE1A00A21259 /* windatabase.cpp in Sources */, - C1EA831C1680FE1A00A21259 /* json_reader.cpp in Sources */, - C1EA831D1680FE1A00A21259 /* json_value.cpp in Sources */, - C1EA831E1680FE1A00A21259 /* json_writer.cpp in Sources */, - C1EA831F1680FE1A00A21259 /* AccountItems.cpp in Sources */, - C1EA83201680FE1A00A21259 /* AccountSetTransactor.cpp in Sources */, - C1EA83211680FE1A00A21259 /* AccountState.cpp in Sources */, - C1EA83221680FE1A00A21259 /* Amount.cpp in Sources */, - C1EA83231680FE1A00A21259 /* Application.cpp in Sources */, - C1EA83241680FE1A00A21259 /* BitcoinUtil.cpp in Sources */, - C1EA83251680FE1A00A21259 /* CallRPC.cpp in Sources */, - C1EA83261680FE1A00A21259 /* CanonicalTXSet.cpp in Sources */, - C1EA83271680FE1A00A21259 /* Config.cpp in Sources */, - C1EA83281680FE1A00A21259 /* ConnectionPool.cpp in Sources */, - C1EA83291680FE1A00A21259 /* Contract.cpp in Sources */, - C1EA832A1680FE1A00A21259 /* DBInit.cpp in Sources */, - C1EA832B1680FE1A00A21259 /* DeterministicKeys.cpp in Sources */, - C1EA832C1680FE1A00A21259 /* ECIES.cpp in Sources */, - C1EA832D1680FE1A00A21259 /* FeatureTable.cpp in Sources */, - C1EA832E1680FE1A00A21259 /* FieldNames.cpp in Sources */, - C1EA832F1680FE1A00A21259 /* HashedObject.cpp in Sources */, - C1EA83301680FE1A00A21259 /* HTTPRequest.cpp in Sources */, - C1EA83311680FE1A00A21259 /* HttpsClient.cpp in Sources */, - C1EA83321680FE1A00A21259 /* InstanceCounter.cpp in Sources */, - C1EA83331680FE1A00A21259 /* Interpreter.cpp in Sources */, - C1EA83341680FE1A00A21259 /* JobQueue.cpp in Sources */, - C1EA83351680FE1A00A21259 /* Ledger.cpp in Sources */, - C1EA83361680FE1A00A21259 /* LedgerAcquire.cpp in Sources */, - C1EA83371680FE1A00A21259 /* LedgerConsensus.cpp in Sources */, - C1EA83381680FE1A00A21259 /* LedgerEntrySet.cpp in Sources */, - C1EA83391680FE1A00A21259 /* LedgerFormats.cpp in Sources */, - C1EA833A1680FE1A00A21259 /* LedgerHistory.cpp in Sources */, - C1EA833B1680FE1A00A21259 /* LedgerMaster.cpp in Sources */, - C1EA833C1680FE1A00A21259 /* LedgerProposal.cpp in Sources */, - C1EA833D1680FE1A00A21259 /* LedgerTiming.cpp in Sources */, - C1EA833E1680FE1A00A21259 /* LoadManager.cpp in Sources */, - C1EA833F1680FE1A00A21259 /* LoadMonitor.cpp in Sources */, - C1EA83401680FE1A00A21259 /* Log.cpp in Sources */, - C1EA83411680FE1A00A21259 /* main.cpp in Sources */, - C1EA83421680FE1A00A21259 /* NetworkOPs.cpp in Sources */, - C1EA83431680FE1A00A21259 /* NicknameState.cpp in Sources */, - C1EA83441680FE1A00A21259 /* Offer.cpp in Sources */, - C1EA83451680FE1A00A21259 /* OfferCancelTransactor.cpp in Sources */, - C1EA83461680FE1A00A21259 /* OfferCreateTransactor.cpp in Sources */, - C1EA83471680FE1A00A21259 /* Operation.cpp in Sources */, - C1EA83481680FE1A00A21259 /* OrderBook.cpp in Sources */, - C1EA83491680FE1A00A21259 /* OrderBookDB.cpp in Sources */, - C1EA834A1680FE1A00A21259 /* PackedMessage.cpp in Sources */, - C1EA834B1680FE1A00A21259 /* ParameterTable.cpp in Sources */, - C1EA834C1680FE1A00A21259 /* ParseSection.cpp in Sources */, - C1EA834D1680FE1A00A21259 /* Pathfinder.cpp in Sources */, - C1EA834E1680FE1A00A21259 /* PaymentTransactor.cpp in Sources */, - C1EA834F1680FE1A00A21259 /* Peer.cpp in Sources */, - C1EA83501680FE1A00A21259 /* PeerDoor.cpp in Sources */, - C1EA83511680FE1A00A21259 /* PlatRand.cpp in Sources */, - C1EA83521680FE1A00A21259 /* ProofOfWork.cpp in Sources */, - C1EA83531680FE1A00A21259 /* PubKeyCache.cpp in Sources */, - C1EA83541680FE1A00A21259 /* RangeSet.cpp in Sources */, - C1EA83551680FE1A00A21259 /* RegularKeySetTransactor.cpp in Sources */, - C1EA83561680FE1A00A21259 /* rfc1751.cpp in Sources */, - C1EA83571680FE1A00A21259 /* RippleAddress.cpp in Sources */, - C1EA83581680FE1A00A21259 /* RippleCalc.cpp in Sources */, - C1EA83591680FE1A00A21259 /* RippleState.cpp in Sources */, - C1EA835A1680FE1A00A21259 /* rpc.cpp in Sources */, - C1EA835B1680FE1A00A21259 /* RPCDoor.cpp in Sources */, - C1EA835C1680FE1A00A21259 /* RPCErr.cpp in Sources */, - C1EA835D1680FE1A00A21259 /* RPCHandler.cpp in Sources */, - C1EA835E1680FE1A00A21259 /* RPCServer.cpp in Sources */, - C1EA835F1680FE1A00A21259 /* ScriptData.cpp in Sources */, - C1EA83601680FE1A00A21259 /* SerializedLedger.cpp in Sources */, - C1EA83611680FE1A00A21259 /* SerializedObject.cpp in Sources */, - C1EA83621680FE1A00A21259 /* SerializedTransaction.cpp in Sources */, - C1EA83631680FE1A00A21259 /* SerializedTypes.cpp in Sources */, - C1EA83641680FE1A00A21259 /* SerializedValidation.cpp in Sources */, - C1EA83651680FE1A00A21259 /* Serializer.cpp in Sources */, - C1EA83661680FE1A00A21259 /* SHAMap.cpp in Sources */, - C1EA83671680FE1A00A21259 /* SHAMapDiff.cpp in Sources */, - C1EA83681680FE1A00A21259 /* SHAMapNodes.cpp in Sources */, - C1EA83691680FE1A00A21259 /* SHAMapSync.cpp in Sources */, - C1EA836A1680FE1A00A21259 /* SNTPClient.cpp in Sources */, - C1EA836B1680FE1A00A21259 /* Suppression.cpp in Sources */, - C1EA836C1680FE1A00A21259 /* Transaction.cpp in Sources */, - C1EA836D1680FE1A00A21259 /* TransactionEngine.cpp in Sources */, - C1EA836E1680FE1A00A21259 /* TransactionErr.cpp in Sources */, - C1EA836F1680FE1A00A21259 /* TransactionFormats.cpp in Sources */, - C1EA83701680FE1A00A21259 /* TransactionMaster.cpp in Sources */, - C1EA83711680FE1A00A21259 /* TransactionMeta.cpp in Sources */, - C1EA83721680FE1A00A21259 /* Transactor.cpp in Sources */, - C1EA83731680FE1A00A21259 /* TrustSetTransactor.cpp in Sources */, - C1EA83741680FE1A00A21259 /* UniqueNodeList.cpp in Sources */, - C1EA83751680FE1A00A21259 /* utils.cpp in Sources */, - C1EA83761680FE1A00A21259 /* ValidationCollection.cpp in Sources */, - C1EA83771680FE1A00A21259 /* Wallet.cpp in Sources */, - C1EA83781680FE1A00A21259 /* WalletAddTransactor.cpp in Sources */, - C1EA83791680FE1A00A21259 /* WSDoor.cpp in Sources */, - C1EA837A1680FE1A00A21259 /* broadcast_server_tls.cpp in Sources */, - C1EA839A1680FE1A00A21259 /* chat_client.cpp in Sources */, - C1EA839B1680FE1A00A21259 /* chat_client_handler.cpp in Sources */, - C1EA839E1680FE1A00A21259 /* chat.cpp in Sources */, - C1EA839F1680FE1A00A21259 /* chat_server.cpp in Sources */, - C1EA83A11680FE1A00A21259 /* concurrent_server.cpp in Sources */, - C1EA83A31680FE1A00A21259 /* echo_client.cpp in Sources */, - C1EA83A51680FE1A00A21259 /* echo_server.cpp in Sources */, - C1EA83A71680FE1A00A21259 /* echo.cpp in Sources */, - C1EA83A81680FE1A00A21259 /* echo_server_tls.cpp in Sources */, - C1EA83AA1680FE1A00A21259 /* fuzzing_client.cpp in Sources */, - C1EA83AC1680FE1A00A21259 /* fuzzing_server_tls.cpp in Sources */, - C1EA83B01680FE1A00A21259 /* stress_client.cpp in Sources */, - C1EA83B21680FE1A00A21259 /* telemetry_server.cpp in Sources */, - C1EA83B31680FE1A00A21259 /* case.cpp in Sources */, - C1EA83B41680FE1A00A21259 /* generic.cpp in Sources */, - C1EA83B61680FE1A00A21259 /* request.cpp in Sources */, - C1EA83B71680FE1A00A21259 /* stress_aggregate.cpp in Sources */, - C1EA83B81680FE1A00A21259 /* stress_handler.cpp in Sources */, - C1EA83BD1680FE1A00A21259 /* wscmd.cpp in Sources */, - C1EA83BE1680FE1A00A21259 /* wsperf.cpp in Sources */, - C1EA83C01680FE1A00A21259 /* base64.cpp in Sources */, - C1EA83C11680FE1A00A21259 /* md5.c in Sources */, - C1EA83C21680FE1A00A21259 /* data.cpp in Sources */, - C1EA83C31680FE1A00A21259 /* network_utilities.cpp in Sources */, - C1EA83C41680FE1A00A21259 /* hybi_header.cpp in Sources */, - C1EA83C51680FE1A00A21259 /* hybi_util.cpp in Sources */, - C1EA83C61680FE1A00A21259 /* blank_rng.cpp in Sources */, - C1EA83C71680FE1A00A21259 /* boost_rng.cpp in Sources */, - C1EA83C91680FE1A00A21259 /* sha.cpp in Sources */, - C1EA83CA1680FE1A00A21259 /* sha1.cpp in Sources */, - C1EA83CB1680FE1A00A21259 /* shacmp.cpp in Sources */, - C1EA83CC1680FE1A00A21259 /* shatest.cpp in Sources */, - C1EA83CD1680FE1A00A21259 /* uri.cpp in Sources */, - C1EA83CE1680FE1A00A21259 /* hybi_util.cpp in Sources */, - C1EA83CF1680FE1A00A21259 /* logging.cpp in Sources */, - C1EA83D11680FE1A00A21259 /* parsing.cpp in Sources */, - C1EA83D21680FE1A00A21259 /* uri_perf.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - C1EA4FD01680FDCA00A21259 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - C1EA4FD11680FDCA00A21259 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; - SDKROOT = macosx; - }; - name = Release; - }; - C1EA4FD31680FDCA00A21259 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - HEADER_SEARCH_PATHS = /opt/local/var; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../node_modules/buster/node_modules/buster-syntax/node_modules/jsdom/node_modules/contextify/build/Release\"", - "\"$(SRCROOT)/../node_modules/buster/node_modules/buster-test/node_modules/jsdom/node_modules/contextify/build/Release\"", - "\"$(SRCROOT)/../node_modules/ws/build/Release\"", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - C1EA4FD41680FDCA00A21259 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - HEADER_SEARCH_PATHS = /opt/local/var; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/../node_modules/buster/node_modules/buster-syntax/node_modules/jsdom/node_modules/contextify/build/Release\"", - "\"$(SRCROOT)/../node_modules/buster/node_modules/buster-test/node_modules/jsdom/node_modules/contextify/build/Release\"", - "\"$(SRCROOT)/../node_modules/ws/build/Release\"", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - C1EA4FC21680FDCA00A21259 /* Build configuration list for PBXProject "NewCoin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C1EA4FD01680FDCA00A21259 /* Debug */, - C1EA4FD11680FDCA00A21259 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C1EA4FD21680FDCA00A21259 /* Build configuration list for PBXNativeTarget "NewCoin" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C1EA4FD31680FDCA00A21259 /* Debug */, - C1EA4FD41680FDCA00A21259 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = C1EA4FBF1680FDCA00A21259 /* Project object */; -} diff --git a/NewCoin/NewCoin.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/NewCoin/NewCoin.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 23a338459..000000000 --- a/NewCoin/NewCoin.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/NewCoin/NewCoin.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate b/NewCoin/NewCoin.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 8a25e7f4d5da93574a71b72955654fc58964d2d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21683 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

sLU+gpTAk;zry4qOhC?t`n*^=2_dWC2_MvQ|OZ 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 diff --git a/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/NewCoin.xcscheme b/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/NewCoin.xcscheme deleted file mode 100644 index 7d4cd49af..000000000 --- a/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/NewCoin.xcscheme +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist b/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 8edaabe80..000000000 --- a/NewCoin/NewCoin.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - SchemeUserState - - NewCoin.xcscheme - - orderHint - 0 - - - SuppressBuildableAutocreation - - C1EA4FC71680FDCA00A21259 - - primary - - - - - diff --git a/NewCoin/NewCoin/NewCoin.1 b/NewCoin/NewCoin/NewCoin.1 deleted file mode 100644 index f1c75d815..000000000 --- a/NewCoin/NewCoin/NewCoin.1 +++ /dev/null @@ -1,79 +0,0 @@ -.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. -.\"See Also: -.\"man mdoc.samples for a complete listing of options -.\"man mdoc for the short list of editing options -.\"/usr/share/misc/mdoc.template -.Dd 12/18/12 \" DATE -.Dt NewCoin 1 \" Program name and manual section number -.Os Darwin -.Sh NAME \" Section Header - required - don't modify -.Nm NewCoin, -.\" The following lines are read in generating the apropos(man -k) database. Use only key -.\" words here as the database is built based on the words here and in the .ND line. -.Nm Other_name_for_same_program(), -.Nm Yet another name for the same program. -.\" Use .Nm macro to designate other names for the documented program. -.Nd This line parsed for whatis database. -.Sh SYNOPSIS \" Section Header - required - don't modify -.Nm -.Op Fl abcd \" [-abcd] -.Op Fl a Ar path \" [-a path] -.Op Ar file \" [file] -.Op Ar \" [file ...] -.Ar arg0 \" Underlined argument - use .Ar anywhere to underline -arg2 ... \" Arguments -.Sh DESCRIPTION \" Section Header - required - don't modify -Use the .Nm macro to refer to your program throughout the man page like such: -.Nm -Underlining is accomplished with the .Ar macro like this: -.Ar underlined text . -.Pp \" Inserts a space -A list of items with descriptions: -.Bl -tag -width -indent \" Begins a tagged list -.It item a \" Each item preceded by .It macro -Description of item a -.It item b -Description of item b -.El \" Ends the list -.Pp -A list of flags and their descriptions: -.Bl -tag -width -indent \" Differs from above in tag removed -.It Fl a \"-a flag as a list item -Description of -a flag -.It Fl b -Description of -b flag -.El \" Ends the list -.Pp -.\" .Sh ENVIRONMENT \" May not be needed -.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 -.\" .It Ev ENV_VAR_1 -.\" Description of ENV_VAR_1 -.\" .It Ev ENV_VAR_2 -.\" Description of ENV_VAR_2 -.\" .El -.Sh FILES \" File used or created by the topic of the man page -.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact -.It Pa /usr/share/file_name -FILE_1 description -.It Pa /Users/joeuser/Library/really_long_file_name -FILE_2 description -.El \" Ends the list -.\" .Sh DIAGNOSTICS \" May not be needed -.\" .Bl -diag -.\" .It Diagnostic Tag -.\" Diagnostic informtion here. -.\" .It Diagnostic Tag -.\" Diagnostic informtion here. -.\" .El -.Sh SEE ALSO -.\" List links in ascending order by section, alphabetically within a section. -.\" Please do not reference files that do not exist without filing a bug report -.Xr a 1 , -.Xr b 1 , -.Xr c 1 , -.Xr a 2 , -.Xr b 2 , -.Xr a 3 , -.Xr b 3 -.\" .Sh BUGS \" Document known, unremedied bugs -.\" .Sh HISTORY \" Document history if command behaves in a unique manner \ No newline at end of file diff --git a/NewCoin/NewCoin/main.cpp b/NewCoin/NewCoin/main.cpp deleted file mode 100644 index 9e48d521d..000000000 --- a/NewCoin/NewCoin/main.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.cpp -// NewCoin -// -// Created by Jcar on 12/18/12. -// Copyright (c) 2012 Jcar. All rights reserved. -// - -#include - -int main(int argc, const char * argv[]) -{ - - // insert code here... - std::cout << "Hello, World!\n"; - return 0; -} - diff --git a/rippled/rippled/rippled.1 b/rippled.1 similarity index 100% rename from rippled/rippled/rippled.1 rename to rippled.1 diff --git a/rippled/rippled.xcodeproj/project.pbxproj b/rippled.xcodeproj/project.pbxproj similarity index 99% rename from rippled/rippled.xcodeproj/project.pbxproj rename to rippled.xcodeproj/project.pbxproj index c4c91d943..612bc73e0 100644 --- a/rippled/rippled.xcodeproj/project.pbxproj +++ b/rippled.xcodeproj/project.pbxproj @@ -927,14 +927,15 @@ children = ( C10365C8168147D200D9D15C /* ripple.pb.cc */, ); - name = build; + path = build; sourceTree = ""; }; C14F811C1681323300AAB80A = { isa = PBXGroup; children = ( + C14F812D1681323400AAB80A /* rippled.1 */, + C14F81341681326600AAB80A /* src */, C10365CA168147DF00D9D15C /* build */, - C14F812A1681323400AAB80A /* rippled */, C14F81281681323400AAB80A /* Products */, ); sourceTree = ""; @@ -947,23 +948,13 @@ name = Products; sourceTree = ""; }; - C14F812A1681323400AAB80A /* rippled */ = { - isa = PBXGroup; - children = ( - C14F81341681326600AAB80A /* src */, - C14F812D1681323400AAB80A /* rippled.1 */, - ); - path = rippled; - sourceTree = ""; - }; C14F81341681326600AAB80A /* src */ = { isa = PBXGroup; children = ( C14F81351681326600AAB80A /* cpp */, C14F832E1681326600AAB80A /* js */, ); - name = src; - path = ../../src; + path = src; sourceTree = ""; }; C14F81351681326600AAB80A /* cpp */ = { @@ -2657,6 +2648,11 @@ CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; CLANG_CXX_LIBRARY = "libstdc++"; GCC_C_LANGUAGE_STANDARD = "compiler-default"; + HEADER_SEARCH_PATHS = ( + build/proto/, + /usr/local/include/, + /opt/local/include/, + ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", /opt/local/lib, @@ -2687,6 +2683,11 @@ CLANG_CXX_LANGUAGE_STANDARD = "compiler-default"; CLANG_CXX_LIBRARY = "libstdc++"; GCC_C_LANGUAGE_STANDARD = "compiler-default"; + HEADER_SEARCH_PATHS = ( + build/proto/, + /usr/local/include/, + /opt/local/include/, + ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", /opt/local/lib, diff --git a/rippled/rippled.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/rippled.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from rippled/rippled.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to rippled.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate b/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..702a0381014dbc6265a74e52ec65c5ebb5167053 GIT binary patch literal 52221 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%0D7g$wwp=b(5Oz9Y-KH+d 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 literal 0 HcmV?d00001 diff --git a/rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/rippled.xcscheme b/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/rippled.xcscheme similarity index 100% rename from rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/rippled.xcscheme rename to rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/rippled.xcscheme diff --git a/rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist b/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist similarity index 100% rename from rippled/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist rename to rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/rippled/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate b/rippled/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index bc48b355d3a02e1838441d3bcf34198d55ae1340..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34133 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 From 16d2b5d45e9d716b2a66ddfd7818714f379ad225 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 19 Dec 2012 15:28:17 -0800 Subject: [PATCH 044/525] Partition some loging. --- src/cpp/ripple/AccountSetTransactor.cpp | 28 +++--- src/cpp/ripple/OfferCreateTransactor.cpp | 116 +++++++++++------------ src/cpp/ripple/PaymentTransactor.cpp | 26 ++--- src/cpp/ripple/TrustSetTransactor.cpp | 26 ++--- 4 files changed, 101 insertions(+), 95 deletions(-) diff --git a/src/cpp/ripple/AccountSetTransactor.cpp b/src/cpp/ripple/AccountSetTransactor.cpp index 32ded2c6f..0d1499e5a 100644 --- a/src/cpp/ripple/AccountSetTransactor.cpp +++ b/src/cpp/ripple/AccountSetTransactor.cpp @@ -1,8 +1,10 @@ #include "AccountSetTransactor.h" +SETUP_LOG(); + TER AccountSetTransactor::doApply() { - Log(lsINFO) << "doAccountSet>"; + cLog(lsINFO) << "doAccountSet>"; // // EmailHash @@ -14,13 +16,13 @@ TER AccountSetTransactor::doApply() if (!uHash) { - Log(lsINFO) << "doAccountSet: unset email hash"; + cLog(lsINFO) << "doAccountSet: unset email hash"; mTxnAccount->makeFieldAbsent(sfEmailHash); } else { - Log(lsINFO) << "doAccountSet: set email hash"; + cLog(lsINFO) << "doAccountSet: set email hash"; mTxnAccount->setFieldH128(sfEmailHash, uHash); } @@ -36,13 +38,13 @@ TER AccountSetTransactor::doApply() if (!uHash) { - Log(lsINFO) << "doAccountSet: unset wallet locator"; + cLog(lsINFO) << "doAccountSet: unset wallet locator"; mTxnAccount->makeFieldAbsent(sfEmailHash); } else { - Log(lsINFO) << "doAccountSet: set wallet locator"; + cLog(lsINFO) << "doAccountSet: set wallet locator"; mTxnAccount->setFieldH256(sfWalletLocator, uHash); } @@ -58,7 +60,7 @@ TER AccountSetTransactor::doApply() } else { - Log(lsINFO) << "doAccountSet: set message key"; + cLog(lsINFO) << "doAccountSet: set message key"; mTxnAccount->setFieldVL(sfMessageKey, mTxn.getFieldVL(sfMessageKey)); } @@ -73,13 +75,13 @@ TER AccountSetTransactor::doApply() if (vucDomain.empty()) { - Log(lsINFO) << "doAccountSet: unset domain"; + cLog(lsINFO) << "doAccountSet: unset domain"; mTxnAccount->makeFieldAbsent(sfDomain); } else { - Log(lsINFO) << "doAccountSet: set domain"; + cLog(lsINFO) << "doAccountSet: set domain"; mTxnAccount->setFieldVL(sfDomain, vucDomain); } @@ -95,25 +97,25 @@ TER AccountSetTransactor::doApply() if (!uRate || uRate == QUALITY_ONE) { - Log(lsINFO) << "doAccountSet: unset transfer rate"; + cLog(lsINFO) << "doAccountSet: unset transfer rate"; mTxnAccount->makeFieldAbsent(sfTransferRate); } else if (uRate > QUALITY_ONE) { - Log(lsINFO) << "doAccountSet: set transfer rate"; + cLog(lsINFO) << "doAccountSet: set transfer rate"; mTxnAccount->setFieldU32(sfTransferRate, uRate); } else { - Log(lsINFO) << "doAccountSet: bad transfer rate"; + cLog(lsINFO) << "doAccountSet: bad transfer rate"; return temBAD_TRANSFER_RATE; } } - Log(lsINFO) << "doAccountSet<"; + cLog(lsINFO) << "doAccountSet<"; return tesSUCCESS; -} \ No newline at end of file +} diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index 0d6ccfc3d..86cac7212 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -26,7 +26,7 @@ TER OfferCreateTransactor::takeOffers( { assert(saTakerPays && saTakerGets); - Log(lsINFO) << "takeOffers: against book: " << uBookBase.ToString(); + cLog(lsINFO) << "takeOffers: against book: " << uBookBase.ToString(); uint256 uTipIndex = uBookBase; const uint256 uBookEnd = Ledger::getQualityNext(uBookBase); @@ -55,14 +55,14 @@ TER OfferCreateTransactor::takeOffers( sleOfferDir = mEngine->entryCache(ltDIR_NODE, mEngine->getLedger()->getNextLedgerIndex(uTipIndex, uBookEnd)); if (sleOfferDir) { - Log(lsINFO) << "takeOffers: possible counter offer found"; + cLog(lsINFO) << "takeOffers: possible counter offer found"; uTipIndex = sleOfferDir->getIndex(); uTipQuality = Ledger::getQuality(uTipIndex); } else { - Log(lsINFO) << "takeOffers: counter offer book is empty: " + cLog(lsINFO) << "takeOffers: counter offer book is empty: " << uTipIndex.ToString() << " ... " << uBookEnd.ToString(); @@ -74,14 +74,14 @@ TER OfferCreateTransactor::takeOffers( || (bPassive && uTakeQuality == uTipQuality)) { // Done. - Log(lsINFO) << "takeOffers: done"; + cLog(lsINFO) << "takeOffers: done"; terResult = tesSUCCESS; } else { // Have an offer directory to consider. - Log(lsINFO) << "takeOffers: considering dir: " << sleOfferDir->getJson(0); + cLog(lsINFO) << "takeOffers: considering dir: " << sleOfferDir->getJson(0); SLE::pointer sleBookNode; unsigned int uBookEntry; @@ -91,7 +91,7 @@ TER OfferCreateTransactor::takeOffers( SLE::pointer sleOffer = mEngine->entryCache(ltOFFER, uOfferIndex); - Log(lsINFO) << "takeOffers: considering offer : " << sleOffer->getJson(0); + cLog(lsINFO) << "takeOffers: considering offer : " << sleOffer->getJson(0); const uint160 uOfferOwnerID = sleOffer->getFieldAccount(sfAccount).getAccountID(); STAmount saOfferPays = sleOffer->getFieldAmount(sfTakerGets); @@ -100,14 +100,14 @@ TER OfferCreateTransactor::takeOffers( if (sleOffer->isFieldPresent(sfExpiration) && sleOffer->getFieldU32(sfExpiration) <= mEngine->getLedger()->getParentCloseTimeNC()) { // Offer is expired. Expired offers are considered unfunded. Delete it. - Log(lsINFO) << "takeOffers: encountered expired offer"; + cLog(lsINFO) << "takeOffers: encountered expired offer"; usOfferUnfundedFound.insert(uOfferIndex); } else if (uOfferOwnerID == uTakerAccountID) { // Would take own offer. Consider old offer expired. Delete it. - Log(lsINFO) << "takeOffers: encountered taker's own old offer"; + cLog(lsINFO) << "takeOffers: encountered taker's own old offer"; usOfferUnfundedFound.insert(uOfferIndex); } @@ -115,7 +115,7 @@ TER OfferCreateTransactor::takeOffers( { // Get offer funds available. - Log(lsINFO) << "takeOffers: saOfferPays=" << saOfferPays.getFullText(); + cLog(lsINFO) << "takeOffers: saOfferPays=" << saOfferPays.getFullText(); STAmount saOfferFunds = mEngine->getNodes().accountFunds(uOfferOwnerID, saOfferPays, true); STAmount saTakerFunds = mEngine->getNodes().accountFunds(uTakerAccountID, saTakerPays, true); @@ -124,7 +124,7 @@ TER OfferCreateTransactor::takeOffers( if (!saOfferFunds.isPositive()) { // Offer is unfunded, possibly due to previous balance action. - Log(lsINFO) << "takeOffers: offer unfunded: delete"; + cLog(lsINFO) << "takeOffers: offer unfunded: delete"; boost::unordered_set::iterator account = usAccountTouched.find(uOfferOwnerID); if (account != usAccountTouched.end()) @@ -148,15 +148,15 @@ TER OfferCreateTransactor::takeOffers( STAmount saTakerIssuerFee; STAmount saOfferIssuerFee; - Log(lsINFO) << "takeOffers: applyOffer: saTakerPays: " << saTakerPays.getFullText(); - Log(lsINFO) << "takeOffers: applyOffer: saTakerPaid: " << saTakerPaid.getFullText(); - Log(lsINFO) << "takeOffers: applyOffer: saTakerFunds: " << saTakerFunds.getFullText(); - Log(lsINFO) << "takeOffers: applyOffer: saOfferFunds: " << saOfferFunds.getFullText(); - Log(lsINFO) << "takeOffers: applyOffer: saPay: " << saPay.getFullText(); - Log(lsINFO) << "takeOffers: applyOffer: saOfferPays: " << saOfferPays.getFullText(); - Log(lsINFO) << "takeOffers: applyOffer: saOfferGets: " << saOfferGets.getFullText(); - Log(lsINFO) << "takeOffers: applyOffer: saTakerPays: " << saTakerPays.getFullText(); - Log(lsINFO) << "takeOffers: applyOffer: saTakerGets: " << saTakerGets.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saTakerPays: " << saTakerPays.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saTakerPaid: " << saTakerPaid.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saTakerFunds: " << saTakerFunds.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saOfferFunds: " << saOfferFunds.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saPay: " << saPay.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saOfferPays: " << saOfferPays.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saOfferGets: " << saOfferGets.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saTakerPays: " << saTakerPays.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saTakerGets: " << saTakerGets.getFullText(); bool bOfferDelete = STAmount::applyOffer( mEngine->getNodes().rippleTransferRate(uTakerAccountID, uOfferOwnerID, uTakerPaysAccountID), @@ -172,8 +172,8 @@ TER OfferCreateTransactor::takeOffers( saTakerIssuerFee, saOfferIssuerFee); - Log(lsINFO) << "takeOffers: applyOffer: saSubTakerPaid: " << saSubTakerPaid.getFullText(); - Log(lsINFO) << "takeOffers: applyOffer: saSubTakerGot: " << saSubTakerGot.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saSubTakerPaid: " << saSubTakerPaid.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saSubTakerGot: " << saSubTakerGot.getFullText(); // Adjust offer @@ -188,7 +188,7 @@ TER OfferCreateTransactor::takeOffers( if (bOfferDelete) { // Offer now fully claimed or now unfunded. - Log(lsINFO) << "takeOffers: offer claimed: delete"; + cLog(lsINFO) << "takeOffers: offer claimed: delete"; usOfferUnfundedBecame.insert(uOfferIndex); // Delete unfunded offer on success. @@ -197,7 +197,7 @@ TER OfferCreateTransactor::takeOffers( } else { - Log(lsINFO) << "takeOffers: offer partial claim."; + cLog(lsINFO) << "takeOffers: offer partial claim."; } // Offer owner pays taker. @@ -249,13 +249,13 @@ TER OfferCreateTransactor::takeOffers( TER OfferCreateTransactor::doApply() { - Log(lsWARNING) << "doOfferCreate> " << mTxn.getJson(0); + cLog(lsWARNING) << "doOfferCreate> " << mTxn.getJson(0); const uint32 uTxFlags = mTxn.getFlags(); const bool bPassive = isSetBit(uTxFlags, tfPassive); STAmount saTakerPays = mTxn.getFieldAmount(sfTakerPays); STAmount saTakerGets = mTxn.getFieldAmount(sfTakerGets); - Log(lsINFO) << boost::str(boost::format("doOfferCreate: saTakerPays=%s saTakerGets=%s") + cLog(lsINFO) << boost::str(boost::format("doOfferCreate: saTakerPays=%s saTakerGets=%s") % saTakerPays.getFullText() % saTakerGets.getFullText()); @@ -267,7 +267,7 @@ TER OfferCreateTransactor::doApply() const uint256 uLedgerIndex = Ledger::getOfferIndex(mTxnAccountID, uSequence); - Log(lsINFO) << "doOfferCreate: Creating offer node: " << uLedgerIndex.ToString() << " uSequence=" << uSequence; + cLog(lsINFO) << "doOfferCreate: Creating offer node: " << uLedgerIndex.ToString() << " uSequence=" << uSequence; const uint160 uPaysCurrency = saTakerPays.getCurrency(); const uint160 uGetsCurrency = saTakerGets.getCurrency(); @@ -280,49 +280,49 @@ TER OfferCreateTransactor::doApply() if (uTxFlags & tfOfferCreateMask) { - Log(lsINFO) << "doOfferCreate: Malformed transaction: Invalid flags set."; + cLog(lsINFO) << "doOfferCreate: Malformed transaction: Invalid flags set."; return temINVALID_FLAG; } else if (bHaveExpiration && !uExpiration) { - Log(lsWARNING) << "doOfferCreate: Malformed offer: bad expiration"; + cLog(lsWARNING) << "doOfferCreate: Malformed offer: bad expiration"; terResult = temBAD_EXPIRATION; } else if (bHaveExpiration && mEngine->getLedger()->getParentCloseTimeNC() >= uExpiration) { - Log(lsWARNING) << "doOfferCreate: Expired transaction: offer expired"; + cLog(lsWARNING) << "doOfferCreate: Expired transaction: offer expired"; terResult = tesSUCCESS; // Only charged fee. } else if (saTakerPays.isNative() && saTakerGets.isNative()) { - Log(lsWARNING) << "doOfferCreate: Malformed offer: XRP for XRP"; + cLog(lsWARNING) << "doOfferCreate: Malformed offer: XRP for XRP"; terResult = temBAD_OFFER; } else if (!saTakerPays.isPositive() || !saTakerGets.isPositive()) { - Log(lsWARNING) << "doOfferCreate: Malformed offer: bad amount"; + cLog(lsWARNING) << "doOfferCreate: Malformed offer: bad amount"; terResult = temBAD_OFFER; } else if (uPaysCurrency == uGetsCurrency && uPaysIssuerID == uGetsIssuerID) { - Log(lsWARNING) << "doOfferCreate: Malformed offer: redundant offer"; + cLog(lsWARNING) << "doOfferCreate: Malformed offer: redundant offer"; terResult = temREDUNDANT; } else if (saTakerPays.isNative() != !uPaysIssuerID || saTakerGets.isNative() != !uGetsIssuerID) { - Log(lsWARNING) << "doOfferCreate: Malformed offer: bad issuer"; + cLog(lsWARNING) << "doOfferCreate: Malformed offer: bad issuer"; terResult = temBAD_ISSUER; } else if (!mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).isPositive()) { - Log(lsWARNING) << "doOfferCreate: delay: Offers must be at least partially funded."; + cLog(lsWARNING) << "doOfferCreate: delay: Offers must be at least partially funded."; terResult = terUNFUNDED; } @@ -343,7 +343,7 @@ TER OfferCreateTransactor::doApply() if (!sleTakerPays) { - Log(lsWARNING) << "doOfferCreate: delay: can't receive IOUs from non-existent issuer: " << RippleAddress::createHumanAccountID(uPaysIssuerID); + cLog(lsWARNING) << "doOfferCreate: delay: can't receive IOUs from non-existent issuer: " << RippleAddress::createHumanAccountID(uPaysIssuerID); terResult = terNO_ACCOUNT; } @@ -355,13 +355,13 @@ TER OfferCreateTransactor::doApply() STAmount saOfferGot; const uint256 uTakeBookBase = Ledger::getBookBase(uGetsCurrency, uGetsIssuerID, uPaysCurrency, uPaysIssuerID); - Log(lsINFO) << boost::str(boost::format("doOfferCreate: take against book: %s for %s -> %s") + cLog(lsINFO) << boost::str(boost::format("doOfferCreate: take against book: %s for %s -> %s") % uTakeBookBase.ToString() % saTakerGets.getFullText() % saTakerPays.getFullText()); // Take using the parameters of the offer. - Log(lsWARNING) << "doOfferCreate: takeOffers: BEFORE saTakerGets=" << saTakerGets.getFullText(); + cLog(lsWARNING) << "doOfferCreate: takeOffers: BEFORE saTakerGets=" << saTakerGets.getFullText(); terResult = takeOffers( bPassive, uTakeBookBase, @@ -373,11 +373,11 @@ TER OfferCreateTransactor::doApply() saOfferGot // How much was got. ); - Log(lsWARNING) << "doOfferCreate: takeOffers=" << terResult; - Log(lsWARNING) << "doOfferCreate: takeOffers: saOfferPaid=" << saOfferPaid.getFullText(); - Log(lsWARNING) << "doOfferCreate: takeOffers: saOfferGot=" << saOfferGot.getFullText(); - Log(lsWARNING) << "doOfferCreate: takeOffers: saTakerPays=" << saTakerPays.getFullText(); - Log(lsWARNING) << "doOfferCreate: takeOffers: AFTER saTakerGets=" << saTakerGets.getFullText(); + cLog(lsWARNING) << "doOfferCreate: takeOffers=" << terResult; + cLog(lsWARNING) << "doOfferCreate: takeOffers: saOfferPaid=" << saOfferPaid.getFullText(); + cLog(lsWARNING) << "doOfferCreate: takeOffers: saOfferGot=" << saOfferGot.getFullText(); + cLog(lsWARNING) << "doOfferCreate: takeOffers: saTakerPays=" << saTakerPays.getFullText(); + cLog(lsWARNING) << "doOfferCreate: takeOffers: AFTER saTakerGets=" << saTakerGets.getFullText(); if (tesSUCCESS == terResult) { @@ -386,13 +386,13 @@ TER OfferCreateTransactor::doApply() } } - Log(lsWARNING) << "doOfferCreate: takeOffers: saTakerPays=" << saTakerPays.getFullText(); - Log(lsWARNING) << "doOfferCreate: takeOffers: saTakerGets=" << saTakerGets.getFullText(); - Log(lsWARNING) << "doOfferCreate: takeOffers: mTxnAccountID=" << RippleAddress::createHumanAccountID(mTxnAccountID); - Log(lsWARNING) << "doOfferCreate: takeOffers: FUNDS=" << mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).getFullText(); + cLog(lsWARNING) << "doOfferCreate: takeOffers: saTakerPays=" << saTakerPays.getFullText(); + cLog(lsWARNING) << "doOfferCreate: takeOffers: saTakerGets=" << saTakerGets.getFullText(); + cLog(lsWARNING) << "doOfferCreate: takeOffers: mTxnAccountID=" << RippleAddress::createHumanAccountID(mTxnAccountID); + cLog(lsWARNING) << "doOfferCreate: takeOffers: FUNDS=" << mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).getFullText(); - // Log(lsWARNING) << "doOfferCreate: takeOffers: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); - // Log(lsWARNING) << "doOfferCreate: takeOffers: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); + // cLog(lsWARNING) << "doOfferCreate: takeOffers: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); + // cLog(lsWARNING) << "doOfferCreate: takeOffers: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); if (tesSUCCESS == terResult && saTakerPays // Still wanting something. @@ -400,7 +400,7 @@ TER OfferCreateTransactor::doApply() && mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).isPositive()) // Still funded. { // We need to place the remainder of the offer into its order book. - Log(lsINFO) << boost::str(boost::format("doOfferCreate: offer not fully consumed: saTakerPays=%s saTakerGets=%s") + cLog(lsINFO) << boost::str(boost::format("doOfferCreate: offer not fully consumed: saTakerPays=%s saTakerGets=%s") % saTakerPays.getFullText() % saTakerGets.getFullText()); @@ -416,7 +416,7 @@ TER OfferCreateTransactor::doApply() uint256 uBookBase = Ledger::getBookBase(uPaysCurrency, uPaysIssuerID, uGetsCurrency, uGetsIssuerID); - Log(lsINFO) << boost::str(boost::format("doOfferCreate: adding to book: %s : %s/%s -> %s/%s") + cLog(lsINFO) << boost::str(boost::format("doOfferCreate: adding to book: %s : %s/%s -> %s/%s") % uBookBase.ToString() % saTakerPays.getHumanCurrency() % RippleAddress::createHumanAccountID(saTakerPays.getIssuer()) @@ -433,13 +433,13 @@ TER OfferCreateTransactor::doApply() if (tesSUCCESS == terResult) { - Log(lsWARNING) << "doOfferCreate: sfAccount=" << RippleAddress::createHumanAccountID(mTxnAccountID); - Log(lsWARNING) << "doOfferCreate: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); - Log(lsWARNING) << "doOfferCreate: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); - Log(lsWARNING) << "doOfferCreate: saTakerPays.isNative()=" << saTakerPays.isNative(); - Log(lsWARNING) << "doOfferCreate: saTakerGets.isNative()=" << saTakerGets.isNative(); - Log(lsWARNING) << "doOfferCreate: uPaysCurrency=" << saTakerPays.getHumanCurrency(); - Log(lsWARNING) << "doOfferCreate: uGetsCurrency=" << saTakerGets.getHumanCurrency(); + cLog(lsWARNING) << "doOfferCreate: sfAccount=" << RippleAddress::createHumanAccountID(mTxnAccountID); + cLog(lsWARNING) << "doOfferCreate: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); + cLog(lsWARNING) << "doOfferCreate: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); + cLog(lsWARNING) << "doOfferCreate: saTakerPays.isNative()=" << saTakerPays.isNative(); + cLog(lsWARNING) << "doOfferCreate: saTakerGets.isNative()=" << saTakerGets.isNative(); + cLog(lsWARNING) << "doOfferCreate: uPaysCurrency=" << saTakerPays.getHumanCurrency(); + cLog(lsWARNING) << "doOfferCreate: uGetsCurrency=" << saTakerGets.getHumanCurrency(); SLE::pointer sleOffer = mEngine->entryCreate(ltOFFER, uLedgerIndex); @@ -457,7 +457,7 @@ TER OfferCreateTransactor::doApply() if (bPassive) sleOffer->setFlag(lsfPassive); - Log(lsINFO) << boost::str(boost::format("doOfferCreate: final terResult=%s sleOffer=%s") + cLog(lsINFO) << boost::str(boost::format("doOfferCreate: final terResult=%s sleOffer=%s") % transToken(terResult) % sleOffer->getJson(0)); } diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index a911dfbe7..32cfd92ce 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -5,6 +5,8 @@ #define RIPPLE_PATHS_MAX 3 +SETUP_LOG(); + TER PaymentTransactor::doApply() { // Ripple if source or destination is non-native or if there are paths. @@ -24,37 +26,37 @@ TER PaymentTransactor::doApply() const uint160 uSrcCurrency = saMaxAmount.getCurrency(); const uint160 uDstCurrency = saDstAmount.getCurrency(); - Log(lsINFO) << boost::str(boost::format("doPayment> saMaxAmount=%s saDstAmount=%s") + cLog(lsINFO) << boost::str(boost::format("doPayment> saMaxAmount=%s saDstAmount=%s") % saMaxAmount.getFullText() % saDstAmount.getFullText()); if (uTxFlags & tfPaymentMask) { - Log(lsINFO) << "doPayment: Malformed transaction: Invalid flags set."; + cLog(lsINFO) << "doPayment: Malformed transaction: Invalid flags set."; return temINVALID_FLAG; } else if (!uDstAccountID) { - Log(lsINFO) << "doPayment: Malformed transaction: Payment destination account not specified."; + cLog(lsINFO) << "doPayment: Malformed transaction: Payment destination account not specified."; return temDST_NEEDED; } else if (bMax && !saMaxAmount.isPositive()) { - Log(lsINFO) << "doPayment: Malformed transaction: bad max amount: " << saMaxAmount.getFullText(); + cLog(lsINFO) << "doPayment: Malformed transaction: bad max amount: " << saMaxAmount.getFullText(); return temBAD_AMOUNT; } else if (!saDstAmount.isPositive()) { - Log(lsINFO) << "doPayment: Malformed transaction: bad dst amount: " << saDstAmount.getFullText(); + cLog(lsINFO) << "doPayment: Malformed transaction: bad dst amount: " << saDstAmount.getFullText(); return temBAD_AMOUNT; } else if (mTxnAccountID == uDstAccountID && uSrcCurrency == uDstCurrency && !bPaths) { - Log(lsINFO) << boost::str(boost::format("doPayment: Malformed transaction: Redundant transaction: src=%s, dst=%s, src_cur=%s, dst_cur=%s") + cLog(lsINFO) << boost::str(boost::format("doPayment: Malformed transaction: Redundant transaction: src=%s, dst=%s, src_cur=%s, dst_cur=%s") % mTxnAccountID.ToString() % uDstAccountID.ToString() % uSrcCurrency.ToString() @@ -66,7 +68,7 @@ TER PaymentTransactor::doApply() && ((saMaxAmount == saDstAmount && saMaxAmount.getCurrency() == saDstAmount.getCurrency()) || (saDstAmount.isNative() && saMaxAmount.isNative()))) { - Log(lsINFO) << "doPayment: Malformed transaction: bad SendMax."; + cLog(lsINFO) << "doPayment: Malformed transaction: bad SendMax."; return temINVALID; } @@ -78,7 +80,7 @@ TER PaymentTransactor::doApply() if (!saDstAmount.isNative()) { - Log(lsINFO) << "doPayment: Delay transaction: Destination account does not exist."; + cLog(lsINFO) << "doPayment: Delay transaction: Destination account does not exist."; // Another transaction could create the account and then this transaction would succeed. return terNO_DST; @@ -86,7 +88,7 @@ TER PaymentTransactor::doApply() else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, can vote no. && saDstAmount.getNValue() < theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE)) // Reserve is not scaled by load. { - Log(lsINFO) << "doPayment: Delay transaction: Destination account does not exist. Insufficent payment to create account."; + cLog(lsINFO) << "doPayment: Delay transaction: Destination account does not exist. Insufficent payment to create account."; // Another transaction could create the account and then this transaction would succeed. return terNO_DST_INSUF_XRP; @@ -146,8 +148,8 @@ TER PaymentTransactor::doApply() && saSrcXRPBalance < saDstAmount + uReserve) // Reserve is not scaled by fee. { // Vote no. However, transaction might succeed, if applied in a different order. - Log(lsINFO) << ""; - Log(lsINFO) << boost::str(boost::format("doPayment: Delay transaction: Insufficient funds: %s / %s (%d)") + cLog(lsINFO) << ""; + cLog(lsINFO) << boost::str(boost::format("doPayment: Delay transaction: Insufficient funds: %s / %s (%d)") % saSrcXRPBalance.getText() % (saDstAmount + uReserve).getText() % uReserve); terResult = terUNFUNDED; @@ -170,7 +172,7 @@ TER PaymentTransactor::doApply() if (transResultInfo(terResult, strToken, strHuman)) { - Log(lsINFO) << boost::str(boost::format("doPayment: %s: %s") % strToken % strHuman); + cLog(lsINFO) << boost::str(boost::format("doPayment: %s: %s") % strToken % strHuman); } else { diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index 26d14fa9d..019a3735e 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -4,10 +4,12 @@ #include +SETUP_LOG(); + TER TrustSetTransactor::doApply() { TER terResult = tesSUCCESS; - Log(lsINFO) << "doTrustSet>"; + cLog(lsINFO) << "doTrustSet>"; const STAmount saLimitAmount = mTxn.getFieldAmount(sfLimitAmount); const bool bQualityIn = mTxn.isFieldPresent(sfQualityIn); @@ -29,19 +31,19 @@ TER TrustSetTransactor::doApply() if (saLimitAmount.isNegative()) { - Log(lsINFO) << "doTrustSet: Malformed transaction: Negatived credit limit."; + cLog(lsINFO) << "doTrustSet: Malformed transaction: Negatived credit limit."; return temBAD_AMOUNT; } else if (!uDstAccountID || uDstAccountID == ACCOUNT_ONE) { - Log(lsINFO) << "doTrustSet: Malformed transaction: Destination account not specified."; + cLog(lsINFO) << "doTrustSet: Malformed transaction: Destination account not specified."; return temDST_NEEDED; } else if (mTxnAccountID == uDstAccountID) { - Log(lsINFO) << "doTrustSet: Malformed transaction: Can not extend credit to self."; + cLog(lsINFO) << "doTrustSet: Malformed transaction: Can not extend credit to self."; return temDST_IS_SRC; } @@ -49,7 +51,7 @@ TER TrustSetTransactor::doApply() SLE::pointer sleDst = mEngine->entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(uDstAccountID)); if (!sleDst) { - Log(lsINFO) << "doTrustSet: Delay transaction: Destination account does not exist."; + cLog(lsINFO) << "doTrustSet: Delay transaction: Destination account does not exist."; return terNO_DST; } @@ -230,13 +232,13 @@ TER TrustSetTransactor::doApply() mEngine->entryDelete(sleRippleState); - Log(lsINFO) << "doTrustSet: Deleting ripple line"; + cLog(lsINFO) << "doTrustSet: Deleting ripple line"; } else if (bReserveIncrease && isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote no. && saSrcXRPBalance.getNValue() < uReserveCreate) // Reserve is not scaled by load. { - Log(lsINFO) << "doTrustSet: Delay transaction: Insufficent reserve to add trust line."; + cLog(lsINFO) << "doTrustSet: Delay transaction: Insufficent reserve to add trust line."; // Another transaction could provide XRP to the account and then this transaction would succeed. terResult = terINSUF_RESERVE_LINE; @@ -245,7 +247,7 @@ TER TrustSetTransactor::doApply() { mEngine->entryModify(sleRippleState); - Log(lsINFO) << "doTrustSet: Modify ripple line"; + cLog(lsINFO) << "doTrustSet: Modify ripple line"; } } // Line does not exist. @@ -253,14 +255,14 @@ TER TrustSetTransactor::doApply() && (!bQualityIn || !uQualityIn) // Not setting quality in or setting default quality in. && (!bQualityOut || !uQualityOut)) // Not setting quality out or setting default quality out. { - Log(lsINFO) << "doTrustSet: Redundant: Setting non-existent ripple line to defaults."; + cLog(lsINFO) << "doTrustSet: Redundant: Setting non-existent ripple line to defaults."; return terNO_LINE_REDUNDANT; } else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote no. && saSrcXRPBalance.getNValue() < uReserveCreate) // Reserve is not scaled by load. { - Log(lsINFO) << "doTrustSet: Delay transaction: Line does not exist. Insufficent reserve to create line."; + cLog(lsINFO) << "doTrustSet: Delay transaction: Line does not exist. Insufficent reserve to create line."; // Another transaction could create the account and then this transaction would succeed. terResult = terNO_LINE_INSUF_RESERVE; @@ -270,7 +272,7 @@ TER TrustSetTransactor::doApply() // Create a new ripple line. sleRippleState = mEngine->entryCreate(ltRIPPLE_STATE, Ledger::getRippleStateIndex(mTxnAccountID, uDstAccountID, uCurrencyID)); - Log(lsINFO) << "doTrustSet: Creating ripple line: " << sleRippleState->getIndex().ToString(); + cLog(lsINFO) << "doTrustSet: Creating ripple line: " << sleRippleState->getIndex().ToString(); sleRippleState->setFieldAmount(sfBalance, STAmount(uCurrencyID, ACCOUNT_ONE)); // Zero balance in currency. sleRippleState->setFieldAmount(!bHigh ? sfLowLimit : sfHighLimit, saLimitAllow); @@ -304,7 +306,7 @@ TER TrustSetTransactor::doApply() } } - Log(lsINFO) << "doTrustSet<"; + cLog(lsINFO) << "doTrustSet<"; return terResult; } From ca25c6c3fbdc3c04323546d2d14311537a5caad1 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 20 Dec 2012 08:46:57 -0800 Subject: [PATCH 045/525] Fix the crash on startup if instances are created before the instance tracking is initialized. --- src/cpp/ripple/InstanceCounter.cpp | 1 + src/cpp/ripple/InstanceCounter.h | 28 ++++++++++++++++++++++------ src/cpp/ripple/main.cpp | 1 + 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/InstanceCounter.cpp b/src/cpp/ripple/InstanceCounter.cpp index 564010282..8f551dff3 100644 --- a/src/cpp/ripple/InstanceCounter.cpp +++ b/src/cpp/ripple/InstanceCounter.cpp @@ -1,6 +1,7 @@ #include "InstanceCounter.h" InstanceType* InstanceType::sHeadInstance = NULL; +bool InstanceType::sMultiThreaded = false; std::vector InstanceType::getInstanceCounts(int min) { diff --git a/src/cpp/ripple/InstanceCounter.h b/src/cpp/ripple/InstanceCounter.h index ffb3665f5..aaec9efcd 100644 --- a/src/cpp/ripple/InstanceCounter.h +++ b/src/cpp/ripple/InstanceCounter.h @@ -32,6 +32,7 @@ protected: InstanceType* mNextInstance; static InstanceType* sHeadInstance; + static bool sMultiThreaded; public: typedef std::pair InstanceCount; @@ -42,17 +43,32 @@ public: sHeadInstance = this; } + static void multiThread() + { + // We can support global objects and multi-threaded code, but not both + // at the same time. Switch to multi-threaded. + sMultiThreaded = true; + } + void addInstance() { - mLock.lock(); - ++mInstances; - mLock.unlock(); + if (sMultiThreaded) + { + mLock.lock(); + ++mInstances; + mLock.unlock(); + } + else ++mInstances; } void decInstance() { - mLock.lock(); - --mInstances; - mLock.unlock(); + if (sMultiThreaded) + { + mLock.lock(); + --mInstances; + mLock.unlock(); + } + else --mInstances; } int getCount() { diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index fa3606777..22355ad93 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -145,6 +145,7 @@ int main(int argc, char* argv[]) Log::setMinSeverity(lsTRACE, true); else Log::setMinSeverity(lsWARNING, true); + InstanceType::multiThread(); if (vm.count("test")) { From 01063650989dfb77b7dc2417e7cb146a7e1cb486 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 20 Dec 2012 09:27:50 -0800 Subject: [PATCH 046/525] Improve log level selection from command line. Some extra shutdown logging. --- src/cpp/ripple/Application.cpp | 1 + src/cpp/ripple/JobQueue.cpp | 1 + src/cpp/ripple/ValidationCollection.cpp | 2 ++ src/cpp/ripple/main.cpp | 22 ++++++++++++++++++---- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 700f0b2ef..c78f377bc 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -57,6 +57,7 @@ extern int RpcDBCount, TxnDBCount, LedgerDBCount, WalletDBCount, HashNodeDBCount void Application::stop() { + cLog(lsINFO) << "Received shutdown request"; mIOService.stop(); mJobQueue.shutdown(); mHashedObjectStore.bulkWrite(); diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index b029dab5e..5abfbb81a 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -181,6 +181,7 @@ void JobQueue::shutdown() mJobCond.notify_all(); while (mThreadCount != 0) mJobCond.wait(sl); + cLog(lsDEBUG) << "Job queue has shut down"; } void JobQueue::setThreadCount(int c) diff --git a/src/cpp/ripple/ValidationCollection.cpp b/src/cpp/ripple/ValidationCollection.cpp index 9057bd082..173dc3d65 100644 --- a/src/cpp/ripple/ValidationCollection.cpp +++ b/src/cpp/ripple/ValidationCollection.cpp @@ -260,6 +260,7 @@ void ValidationCollection::flush() { bool anyNew = false; + cLog(lsINFO) << "Flushing validations"; boost::mutex::scoped_lock sl(mValidationLock); BOOST_FOREACH(u160_val_pair& it, mCurrentValidations) { @@ -276,6 +277,7 @@ void ValidationCollection::flush() boost::this_thread::sleep(boost::posix_time::milliseconds(100)); sl.lock(); } + cLog(lsDEBUG) << "Validations flushed"; } void ValidationCollection::condWrite() diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index 22355ad93..515d6b6a6 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -90,7 +90,7 @@ int main(int argc, char* argv[]) // // Set up option parsing. // - po::options_description desc("Options"); + po::options_description desc("General Options"); desc.add_options() ("help,h", "Display this message.") ("conf", po::value(), "Specify the configuration file.") @@ -99,12 +99,21 @@ int main(int argc, char* argv[]) ("test,t", "Perform unit tests.") ("parameters", po::value< vector >(), "Specify comma separated parameters.") ("quiet,q", "Reduce diagnotics.") - ("verbose,v", "Increase log level.") + ("verbose,v", "Verbose logging.") ("load", "Load the current ledger from the local DB.") ("start", "Start from a fresh Ledger.") ("net", "Get the initial ledger from the network.") ; + po::options_description hidden("Hidden Options"); + hidden.add_options() + ("trace,vvv", "Trace level logging") + ("debug,vv", "Debug level logging") + ; + + po::options_description all("All Options"); + all.add(desc).add(hidden); + // Interpret positional arguments as --parameters. po::positional_options_description p; p.add("parameters", -1); @@ -129,7 +138,7 @@ int main(int argc, char* argv[]) // Parse options, if no error. try { po::store(po::command_line_parser(argc, argv) - .options(desc) // Parse options. + .options(all) // Parse options. .positional(p) // Remainder as --parameters. .run(), vm); @@ -141,10 +150,15 @@ int main(int argc, char* argv[]) } } - if (vm.count("verbose")) + if (vm.count("trace")) Log::setMinSeverity(lsTRACE, true); + else if (vm.count("debug")) + Log::setMinSeverity(lsDEBUG, true); + else if (vm.count("verbose")) + Log::setMinSeverity(lsINFO, true); else Log::setMinSeverity(lsWARNING, true); + InstanceType::multiThread(); if (vm.count("test")) From 125984cd78ccb924cd82dcb454f723cdc25de72b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 20 Dec 2012 11:23:01 -0800 Subject: [PATCH 047/525] Begin the infrastructure for putting fees in the ledger. --- src/cpp/ripple/LedgerFormats.cpp | 7 +++++++ src/cpp/ripple/LedgerFormats.h | 2 ++ src/cpp/ripple/SerializeProto.h | 4 ++++ src/cpp/ripple/TransactionFormats.cpp | 8 ++++++++ src/cpp/ripple/TransactionFormats.h | 2 ++ 5 files changed, 23 insertions(+) diff --git a/src/cpp/ripple/LedgerFormats.cpp b/src/cpp/ripple/LedgerFormats.cpp index 1e553398a..ae443179c 100644 --- a/src/cpp/ripple/LedgerFormats.cpp +++ b/src/cpp/ripple/LedgerFormats.cpp @@ -103,6 +103,13 @@ static bool LEFInit() << SOElement(sfFeatures, SOE_REQUIRED) ; + DECLARE_LEF(FeeSettings, ltFEE_SETTINGS) + << SOElement(sfBaseFee, SOE_REQUIRED) + << SOElement(sfReferenceFeeUnits, SOE_REQUIRED) + << SOElement(sfReserveBase, SOE_REQUIRED) + << SOElement(sfReserveIncrement, SOE_REQUIRED) + ; + return true; } diff --git a/src/cpp/ripple/LedgerFormats.h b/src/cpp/ripple/LedgerFormats.h index 3bc0afb50..e39e7a894 100644 --- a/src/cpp/ripple/LedgerFormats.h +++ b/src/cpp/ripple/LedgerFormats.h @@ -16,6 +16,7 @@ enum LedgerEntryType ltCONTRACT = 'c', ltLEDGER_HASHES = 'h', ltFEATURES = 'f', + ltFEE_SETTINGS = 's', }; // Used as a prefix for computing ledger indexes (keys). @@ -32,6 +33,7 @@ enum LedgerNameSpace spaceContract = 'c', spaceSkipList = 's', spaceFeature = 'f', + spaceFee = 's', }; enum LedgerSpecificFlags diff --git a/src/cpp/ripple/SerializeProto.h b/src/cpp/ripple/SerializeProto.h index 286cf617f..e536f9d19 100644 --- a/src/cpp/ripple/SerializeProto.h +++ b/src/cpp/ripple/SerializeProto.h @@ -60,6 +60,9 @@ FIELD(LastLedgerSequence, UINT32, 27) FIELD(TransactionIndex, UINT32, 28) FIELD(OperationLimit, UINT32, 29) + FIELD(ReferenceFeeUnits, UINT32, 30) + FIELD(ReserveBase, UINT32, 31) + FIELD(ReserveIncrement, UINT32, 32) // 64-bit integers FIELD(IndexNext, UINT64, 1) @@ -69,6 +72,7 @@ FIELD(BaseFee, UINT64, 5) FIELD(ExchangeRate, UINT64, 6) + // 128-bit FIELD(EmailHash, HASH128, 1) diff --git a/src/cpp/ripple/TransactionFormats.cpp b/src/cpp/ripple/TransactionFormats.cpp index 683517892..b428ed764 100644 --- a/src/cpp/ripple/TransactionFormats.cpp +++ b/src/cpp/ripple/TransactionFormats.cpp @@ -76,6 +76,14 @@ static bool TFInit() << SOElement(sfFeature, SOE_REQUIRED) ; + DECLARE_TF(SetFee, ttFEE) + << SOElement(sfFeatures, SOE_REQUIRED) + << SOElement(sfBaseFee, SOE_REQUIRED) + << SOElement(sfReferenceFeeUnits, SOE_REQUIRED) + << SOElement(sfReserveBase, SOE_REQUIRED) + << SOElement(sfReserveIncrement, SOE_REQUIRED) + ; + return true; } diff --git a/src/cpp/ripple/TransactionFormats.h b/src/cpp/ripple/TransactionFormats.h index a9cab9ba8..602b1fb3e 100644 --- a/src/cpp/ripple/TransactionFormats.h +++ b/src/cpp/ripple/TransactionFormats.h @@ -6,6 +6,7 @@ enum TransactionType { ttINVALID = -1, + ttPAYMENT = 0, ttCLAIM = 1, // open ttWALLET_ADD = 2, @@ -21,6 +22,7 @@ enum TransactionType ttTRUST_SET = 20, ttFEATURE = 100, + ttFEE = 101, }; class TransactionFormat From 979bace8002d8f76c7ddc75ab9258a5e451888f1 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 20 Dec 2012 12:47:57 -0800 Subject: [PATCH 048/525] JS: Add tipple alphabet. --- src/js/amount.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/js/amount.js b/src/js/amount.js index 97b019002..cdd3c322c 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -10,7 +10,8 @@ var BigInteger = jsbn.BigInteger; var nbi = jsbn.nbi; var alphabets = { - 'ripple' : "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz", + 'ripple' : "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz", + 'tipple' : "RPShNAF39wBUDnEGHJKLM4pQrsT7VWXYZ2bcdeCg65jkm8ofqi1tuvaxyz", 'bitcoin' : "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" }; From 3aad343b84cc3960ec9235f6b765a316a58db9cc Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 20 Dec 2012 12:59:15 -0800 Subject: [PATCH 049/525] Sanitize this. --- src/cpp/ripple/main.cpp | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index 515d6b6a6..cf9ff77c7 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -105,15 +105,6 @@ int main(int argc, char* argv[]) ("net", "Get the initial ledger from the network.") ; - po::options_description hidden("Hidden Options"); - hidden.add_options() - ("trace,vvv", "Trace level logging") - ("debug,vv", "Debug level logging") - ; - - po::options_description all("All Options"); - all.add(desc).add(hidden); - // Interpret positional arguments as --parameters. po::positional_options_description p; p.add("parameters", -1); @@ -138,7 +129,7 @@ int main(int argc, char* argv[]) // Parse options, if no error. try { po::store(po::command_line_parser(argc, argv) - .options(all) // Parse options. + .options(desc) // Parse options. .positional(p) // Remainder as --parameters. .run(), vm); @@ -150,14 +141,12 @@ int main(int argc, char* argv[]) } } - if (vm.count("trace")) - Log::setMinSeverity(lsTRACE, true); - else if (vm.count("debug")) - Log::setMinSeverity(lsDEBUG, true); + if (vm.count("quiet")) + Log::setMinSeverity(lsFATAL, true); else if (vm.count("verbose")) - Log::setMinSeverity(lsINFO, true); + Log::setMinSeverity(lsTRACE, true); else - Log::setMinSeverity(lsWARNING, true); + Log::setMinSeverity(lsINFO, true); InstanceType::multiThread(); From 4fb2220891a3f043e3c545e9b2ede873e75ea2cd Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 20 Dec 2012 13:02:05 -0800 Subject: [PATCH 050/525] New fee stuff. CAUTION: Code is currently in an untested state. --- src/cpp/ripple/Application.cpp | 2 +- src/cpp/ripple/Application.h | 3 +- src/cpp/ripple/Ledger.cpp | 59 +++++++++++++++++++ src/cpp/ripple/Ledger.h | 30 ++++++++++ src/cpp/ripple/LoadManager.cpp | 75 +++++++++--------------- src/cpp/ripple/LoadManager.h | 19 +++--- src/cpp/ripple/OfferCreateTransactor.cpp | 2 +- src/cpp/ripple/PaymentTransactor.cpp | 4 +- src/cpp/ripple/TrustSetTransactor.cpp | 2 +- 9 files changed, 131 insertions(+), 65 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index c78f377bc..475f41d26 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -40,7 +40,7 @@ DatabaseCon::~DatabaseCon() Application::Application() : mIOWork(mIOService), mAuxWork(mAuxService), mUNL(mIOService), mNetOps(mIOService, &mLedgerMaster), mTempNodeCache("NodeCache", 16384, 90), mHashedObjectStore(16384, 300), - mSNTPClient(mAuxService), mRPCHandler(&mNetOps), mFeeTrack(theConfig.TRANSACTION_FEE_BASE, theConfig.FEE_DEFAULT), + mSNTPClient(mAuxService), mRPCHandler(&mNetOps), mFeeTrack(), mRpcDB(NULL), mTxnDB(NULL), mLedgerDB(NULL), mWalletDB(NULL), mHashNodeDB(NULL), mNetNodeDB(NULL), mConnectionPool(mIOService), mPeerDoor(NULL), mRPCDoor(NULL), mWSPublicDoor(NULL), mWSPrivateDoor(NULL), mSweepTimer(mAuxService) diff --git a/src/cpp/ripple/Application.h b/src/cpp/ripple/Application.h index bfaac4c83..31772c30a 100644 --- a/src/cpp/ripple/Application.h +++ b/src/cpp/ripple/Application.h @@ -112,6 +112,7 @@ public: boost::recursive_mutex& getMasterLock() { return mMasterLock; } ProofOfWorkGenerator& getPowGen() { return mPOWGen; } LoadManager& getLoadManager() { return mLoadMgr; } + LoadFeeTrack& getFeeTrack() { return mFeeTrack; } TXQueue& getTxnQueue() { return mTxnQueue; } @@ -121,8 +122,6 @@ public: bool isNewFlag(const uint256& s, int f) { return mSuppressions.setFlag(s, f); } bool running() { return mTxnDB != NULL; } bool getSystemTimeOffset(int& offset) { return mSNTPClient.getOffset(offset); } - uint64 scaleFeeBase(uint64 fee) { return mFeeTrack.scaleFeeBase(fee); } - uint64 scaleFeeLoad(uint64 fee) { return mFeeTrack.scaleFeeLoad(fee); } DatabaseCon* getRpcDB() { return mRpcDB; } DatabaseCon* getTxnDB() { return mTxnDB; } diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index c9c76beee..cd3bcd469 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -37,6 +37,7 @@ Ledger::Ledger(const RippleAddress& masterID, uint64 startAmount) : mTotCoins(st mAccountStateMap->armDirty(); writeBack(lepCREATE, startAccount->getSLE()); SHAMap::flushDirty(*mAccountStateMap->disarmDirty(), 256, hotACCOUNT_NODE, mLedgerSeq); + zeroFees(); } Ledger::Ledger(const uint256 &parentHash, const uint256 &transHash, const uint256 &accountHash, @@ -55,6 +56,7 @@ Ledger::Ledger(const uint256 &parentHash, const uint256 &transHash, const uint25 mAccountStateMap->fetchRoot(mAccountHash); mTransactionMap->setImmutable(); mAccountStateMap->setImmutable(); + zeroFees(); } Ledger::Ledger(Ledger& ledger, bool isMutable) : mTotCoins(ledger.mTotCoins), mLedgerSeq(ledger.mLedgerSeq), @@ -65,6 +67,7 @@ Ledger::Ledger(Ledger& ledger, bool isMutable) : mTotCoins(ledger.mTotCoins), mL mAccountStateMap(ledger.mAccountStateMap->snapShot(isMutable)) { // Create a new ledger that's a snapshot of this one updateHash(); + zeroFees(); } @@ -88,6 +91,7 @@ Ledger::Ledger(bool /* dummy */, Ledger& prevLedger) : } else mCloseTime = prevLedger.mCloseTime + mCloseResolution; + zeroFees(); } Ledger::Ledger(const std::vector& rawLedger) : @@ -95,6 +99,7 @@ Ledger::Ledger(const std::vector& rawLedger) : { Serializer s(rawLedger); setRaw(s); + zeroFees(); } Ledger::Ledger(const std::string& rawLedger) : @@ -102,6 +107,7 @@ Ledger::Ledger(const std::string& rawLedger) : { Serializer s(rawLedger); setRaw(s); + zeroFees(); } void Ledger::updateHash() @@ -899,6 +905,13 @@ uint256 Ledger::getAccountRootIndex(const uint160& uAccountID) return s.getSHA512Half(); } +uint256 Ledger::getLedgerFeeIndex() +{ // get the index of the node that holds the fee schedul + Serializer s(2); + s.add16(spaceFee); + return s.getSHA512Half(); +} + uint256 Ledger::getLedgerFeatureIndex() { // get the index of the node that holds the last 256 ledgers Serializer s(2); @@ -1185,5 +1198,51 @@ void Ledger::qualityDirDescriber(SLE::ref sle, sle->setFieldU64(sfExchangeRate, uRate); } +void Ledger::zeroFees() +{ + mBaseFee = 0; + mReferenceFeeUnits = 0; + mReserveBase = 0; + mReserveIncrement = 0; +} + +void Ledger::updateFees() +{ + mBaseFee = theConfig.FEE_DEFAULT; + mReferenceFeeUnits = 10; + mReserveBase = theConfig.FEE_ACCOUNT_RESERVE; + mReserveIncrement = theConfig.FEE_OWNER_RESERVE; + + LedgerStateParms p = lepNONE; + SLE::pointer sle = getASNode(p, Ledger::getLedgerFeeIndex(), ltFEE_SETTINGS); + if (!sle) + return; + + if (sle->getFieldIndex(sfBaseFee) != -1) + mBaseFee = sle->getFieldU64(sfBaseFee); + + if (sle->getFieldIndex(sfReferenceFeeUnits) != -1) + mReferenceFeeUnits = sle->getFieldU32(sfReferenceFeeUnits); + + if (sle->getFieldIndex(sfReserveBase) != -1) + mReserveBase = sle->getFieldU32(sfReserveBase); + + if (sle->getFieldIndex(sfReserveIncrement) != -1) + mReserveIncrement = sle->getFieldU32(sfReserveIncrement); +} + +uint64 Ledger::scaleFeeBase(uint64 fee) +{ + if (!mBaseFee) + updateFees(); + return theApp->getFeeTrack().scaleFeeBase(fee, mBaseFee, mReferenceFeeUnits); +} + +uint64 Ledger::scaleFeeLoad(uint64 fee) +{ + if (!mBaseFee) + updateFees(); + return theApp->getFeeTrack().scaleFeeLoad(fee, mBaseFee, mReferenceFeeUnits); +} // vim:ts=4 diff --git a/src/cpp/ripple/Ledger.h b/src/cpp/ripple/Ledger.h index bfbe40534..92d4d0d06 100644 --- a/src/cpp/ripple/Ledger.h +++ b/src/cpp/ripple/Ledger.h @@ -78,6 +78,10 @@ private: uint32 mCloseFlags; // flags indicating how this ledger close took place bool mClosed, mValidHash, mAccepted, mImmutable; + uint32 mReferenceFeeUnits; // Fee units for the reference transaction + uint32 mReserveBase, mReserveIncrement; // Reserve basse and increment in fee units + uint64 mBaseFee; // Ripple cost of the reference transaction + SHAMap::pointer mTransactionMap, mAccountStateMap; mutable boost::recursive_mutex mLock; @@ -95,6 +99,9 @@ protected: static void decPendingSaves(); void saveAcceptedLedger(bool fromConsensus, LoadEvent::pointer); + void updateFees(); + void zeroFees(); + public: Ledger(const RippleAddress& masterID, uint64 startAmount); // used for the starting bootstrap ledger @@ -193,6 +200,7 @@ public: static int getLedgerHashOffset(uint32 desiredLedgerIndex, uint32 currentLedgerIndex); static uint256 getLedgerFeatureIndex(); + static uint256 getLedgerFeeIndex(); // index calculation functions static uint256 getAccountRootIndex(const uint160& uAccountID); @@ -304,6 +312,28 @@ public: SLE::pointer getRippleState(const uint160& uiA, const uint160& uiB, const uint160& uCurrency) { return getRippleState(getRippleStateIndex(RippleAddress::createAccountID(uiA), RippleAddress::createAccountID(uiB), uCurrency)); } + uint32 getReferenceFeeUnits() + { + if (!mBaseFee) updateFees(); + return mReferenceFeeUnits; + } + + uint64 getBaseFee() + { + if (!mBaseFee) updateFees(); + return mBaseFee; + } + + uint64 getReserve(int increments) + { + if (!mBaseFee) updateFees(); + return scaleFeeBase(static_cast(increments) * mReserveIncrement + mReserveBase); + } + + uint64 scaleFeeBase(uint64 fee); + uint64 scaleFeeLoad(uint64 fee); + + Json::Value getJson(int options); void addJson(Json::Value&, int options); diff --git a/src/cpp/ripple/LoadManager.cpp b/src/cpp/ripple/LoadManager.cpp index a538204a5..ad40a174a 100644 --- a/src/cpp/ripple/LoadManager.cpp +++ b/src/cpp/ripple/LoadManager.cpp @@ -138,7 +138,7 @@ bool LoadManager::adjust(LoadSource& source, int credits) const return false; } -uint64 LoadFeeTrack::mulDiv(uint64 value, uint32 mul, uint32 div) +uint64 LoadFeeTrack::mulDiv(uint64 value, uint32 mul, uint64 div) { // compute (value)*(mul)/(div) - avoid overflow but keep precision static uint64 boundary = (0x00000000FFFFFFFF); if (value > boundary) // Large value, avoid overflow @@ -147,45 +147,32 @@ uint64 LoadFeeTrack::mulDiv(uint64 value, uint32 mul, uint32 div) return (value * mul) / div; } -uint64 LoadFeeTrack::scaleFeeLoad(uint64 fee) +uint64 LoadFeeTrack::scaleFeeLoad(uint64 fee, uint64 baseFee, uint32 referenceFeeUnits) { static uint64 midrange(0x00000000FFFFFFFF); + bool big = (fee > midrange); + if (big) // big fee, divide first to avoid overflow + fee /= baseFee; + else // normal fee, multiply first for accuracy + fee *= referenceFeeUnits; { boost::mutex::scoped_lock sl(mLock); - - if (big) // big fee, divide first to avoid overflow - fee /= mBaseFee; - else // normal fee, multiply first for accuracy - fee *= mBaseRef; - fee = mulDiv(fee, std::max(mLocalTxnLoadFee, mRemoteTxnLoadFee), lftNormalFee); - - if (big) // Fee was big to start, must now multiply - fee *= mBaseRef; - else // Fee was small to start, mst now divide - fee /= mBaseFee; } + if (big) // Fee was big to start, must now multiply + fee *= referenceFeeUnits; + else // Fee was small to start, mst now divide + fee /= baseFee; + return fee; } -uint64 LoadFeeTrack::scaleFeeBase(uint64 fee) +uint64 LoadFeeTrack::scaleFeeBase(uint64 fee, uint64 baseFee, uint32 referenceFeeUnits) { - - { - boost::mutex::scoped_lock sl(mLock); - fee = mulDiv(fee, mBaseRef, mBaseFee); - } - - return fee; -} - -uint32 LoadFeeTrack::getBaseFee() -{ - boost::mutex::scoped_lock sl(mLock); - return mBaseFee; + return mulDiv(fee, referenceFeeUnits, baseFee); } uint32 LoadFeeTrack::getRemoteFee() @@ -200,12 +187,6 @@ uint32 LoadFeeTrack::getLocalFee() return mLocalTxnLoadFee; } -uint32 LoadFeeTrack::getBaseRef() -{ - boost::mutex::scoped_lock sl(mLock); - return mBaseRef; -} - void LoadFeeTrack::setRemoteFee(uint32 f) { boost::mutex::scoped_lock sl(mLock); @@ -233,7 +214,7 @@ void LoadFeeTrack::lowerLocalFee() mLocalTxnLoadFee = lftNormalFee; } -Json::Value LoadFeeTrack::getJson(int) +Json::Value LoadFeeTrack::getJson(uint64 baseFee, uint32 referenceFeeUnits) { Json::Value j(Json::objectValue); @@ -241,11 +222,11 @@ Json::Value LoadFeeTrack::getJson(int) boost::mutex::scoped_lock sl(mLock); // base_fee = The cost to send a "reference" transaction under no load, in millionths of a Ripple - j["base_fee"] = Json::Value::UInt(mBaseFee); + j["base_fee"] = Json::Value::UInt(baseFee); // load_fee = The cost to send a "reference" transaction now, in millionths of a Ripple j["load_fee"] = Json::Value::UInt( - mulDiv(mBaseFee, std::max(mLocalTxnLoadFee, mRemoteTxnLoadFee), lftNormalFee)); + mulDiv(baseFee, std::max(mLocalTxnLoadFee, mRemoteTxnLoadFee), lftNormalFee)); } return j; @@ -258,20 +239,20 @@ BOOST_AUTO_TEST_CASE(LoadFeeTrack_test) cLog(lsDEBUG) << "Running load fee track test"; Config d; // get a default configuration object - LoadFeeTrack l(d.TRANSACTION_FEE_BASE, d.FEE_DEFAULT); + LoadFeeTrack l; - BOOST_REQUIRE_EQUAL(l.scaleFeeBase(10000), 10000); - BOOST_REQUIRE_EQUAL(l.scaleFeeLoad(10000), 10000); - BOOST_REQUIRE_EQUAL(l.scaleFeeBase(1), 1); - BOOST_REQUIRE_EQUAL(l.scaleFeeLoad(1), 1); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(10000, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE), 10000); + BOOST_REQUIRE_EQUAL(l.scaleFeeLoad(10000, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE), 10000); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(1, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE), 1); + BOOST_REQUIRE_EQUAL(l.scaleFeeLoad(1, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE), 1); // Check new default fee values give same fees as old defaults - BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_DEFAULT), 10); - BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_ACCOUNT_RESERVE), 200 * SYSTEM_CURRENCY_PARTS); - BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_OWNER_RESERVE), 50 * SYSTEM_CURRENCY_PARTS); - BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_NICKNAME_CREATE), 1000); - BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_OFFER), 10); - BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_CONTRACT_OPERATION), 1); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_DEFAULT, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE), 10); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_ACCOUNT_RESERVE, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE), 200 * SYSTEM_CURRENCY_PARTS); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_OWNER_RESERVE, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE), 50 * SYSTEM_CURRENCY_PARTS); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_NICKNAME_CREATE, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE), 1000); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_OFFER, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE), 10); + BOOST_REQUIRE_EQUAL(l.scaleFeeBase(d.FEE_CONTRACT_OPERATION, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE), 1); } diff --git a/src/cpp/ripple/LoadManager.h b/src/cpp/ripple/LoadManager.h index f6f18274e..30618d2c7 100644 --- a/src/cpp/ripple/LoadManager.h +++ b/src/cpp/ripple/LoadManager.h @@ -123,32 +123,29 @@ protected: static const int lftFeeDecFraction = 16; // decrease fee by 1/16 static const int lftFeeMax = lftNormalFee * 1000000; - uint32 mBaseRef; // The number of fee units a reference transaction costs - uint32 mBaseFee; // The cost in millionths of a ripple of a reference transaction uint32 mLocalTxnLoadFee; // Scale factor, lftNormalFee = normal fee uint32 mRemoteTxnLoadFee; // Scale factor, lftNormalFee = normal fee boost::mutex mLock; - static uint64 mulDiv(uint64 value, uint32 mul, uint32 div); + static uint64 mulDiv(uint64 value, uint32 mul, uint64 div); public: - LoadFeeTrack(uint32 baseRef, uint32 baseFee) : mBaseRef(baseRef), mBaseFee(baseFee), - mLocalTxnLoadFee(lftNormalFee), mRemoteTxnLoadFee(lftNormalFee) + LoadFeeTrack() : mLocalTxnLoadFee(lftNormalFee), mRemoteTxnLoadFee(lftNormalFee) { ; } - uint64 scaleFeeBase(uint64 fee); // Scale from fee units to millionths of a ripple - uint64 scaleFeeLoad(uint64 fee); // Scale using load as well as base rate + // Scale from fee units to millionths of a ripple + uint64 scaleFeeBase(uint64 fee, uint64 baseFee, uint32 referenceFeeUnits); + + // Scale using load as well as base rate + uint64 scaleFeeLoad(uint64 fee, uint64 baseFee, uint32 referenceFeeUnits); uint32 getRemoteFee(); uint32 getLocalFee(); - uint32 getBaseRef(); - uint32 getBaseFee(); - Json::Value getJson(int); + Json::Value getJson(uint64 baseFee, uint32 referenceFeeUnits); - void setBaseFee(uint32); void setRemoteFee(uint32); void raiseLocalFee(); void lowerLocalFee(); diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index 86cac7212..a83ed93d2 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -331,7 +331,7 @@ TER OfferCreateTransactor::doApply() const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); // The reserve required to create the line. - const uint64 uReserveCreate = theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE + uOwnerCount*theConfig.FEE_OWNER_RESERVE); + const uint64 uReserveCreate = mEngine->getLedger()->getReserve(uOwnerCount); if (saSrcXRPBalance.getNValue() < uReserveCreate) // Have enough reserve prior to creating offer? terResult = terINSUF_RESERVE_OFFER; diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index 32cfd92ce..f87d8f80e 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -86,7 +86,7 @@ TER PaymentTransactor::doApply() return terNO_DST; } else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, can vote no. - && saDstAmount.getNValue() < theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE)) // Reserve is not scaled by load. + && saDstAmount.getNValue() < mEngine->getLedger()->getReserve(0)) // Reserve is not scaled by load. { cLog(lsINFO) << "doPayment: Delay transaction: Destination account does not exist. Insufficent payment to create account."; @@ -141,7 +141,7 @@ TER PaymentTransactor::doApply() const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); - const uint64 uReserve = theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE + uOwnerCount * theConfig.FEE_OWNER_RESERVE); + const uint64 uReserve = mEngine->getLedger()->getReserve(uOwnerCount); // Make sure have enough reserve to send. if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote. diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index 019a3735e..143130aff 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -59,7 +59,7 @@ TER TrustSetTransactor::doApply() const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); // The reserve required to create the line. - const uint64 uReserveCreate = theApp->scaleFeeBase(theConfig.FEE_ACCOUNT_RESERVE + (uOwnerCount+1)* theConfig.FEE_OWNER_RESERVE); + const uint64 uReserveCreate = mEngine->getLedger()->getReserve(uOwnerCount + 1); STAmount saLimitAllow = saLimitAmount; saLimitAllow.setIssuer(mTxnAccountID); From 530e05e52b6cf927c99d214d00bf7db570376493 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 20 Dec 2012 14:42:27 -0800 Subject: [PATCH 051/525] Improve OfferCreate reserve behavior. --- src/cpp/ripple/OfferCreateTransactor.cpp | 49 ++++++++++++++++-------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index a83ed93d2..e3dbe02ef 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -326,16 +326,6 @@ TER OfferCreateTransactor::doApply() terResult = terUNFUNDED; } - else if (isSetBit(mParams, tapOPEN_LEDGER)) // Ledger is not final, can vote no. - { - const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); - const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); - // The reserve required to create the line. - const uint64 uReserveCreate = mEngine->getLedger()->getReserve(uOwnerCount); - - if (saSrcXRPBalance.getNValue() < uReserveCreate) // Have enough reserve prior to creating offer? - terResult = terINSUF_RESERVE_OFFER; - } if (tesSUCCESS == terResult && !saTakerPays.isNative()) { @@ -349,10 +339,11 @@ TER OfferCreateTransactor::doApply() } } + STAmount saOfferPaid; + STAmount saOfferGot; + if (tesSUCCESS == terResult) { - STAmount saOfferPaid; - STAmount saOfferGot; const uint256 uTakeBookBase = Ledger::getBookBase(uGetsCurrency, uGetsIssuerID, uPaysCurrency, uPaysIssuerID); cLog(lsINFO) << boost::str(boost::format("doOfferCreate: take against book: %s for %s -> %s") @@ -394,10 +385,36 @@ TER OfferCreateTransactor::doApply() // cLog(lsWARNING) << "doOfferCreate: takeOffers: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); // cLog(lsWARNING) << "doOfferCreate: takeOffers: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); - if (tesSUCCESS == terResult - && saTakerPays // Still wanting something. - && saTakerGets // Still offering something. - && mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).isPositive()) // Still funded. + if (tesSUCCESS != terResult + || !saTakerPays // Wants nothing more. + || !saTakerGets // Offering nothing more. + || !mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).isPositive()) // Not funded. + { + // Complete as is. + nothing(); + } + else if (mTxnAccount->getFieldAmount(sfBalance).getNValue() < mEngine->getLedger()->getReserve(mTxnAccount->getFieldU32(sfOwnerCount)+1)) + { + if (isSetBit(mParams, tapOPEN_LEDGER)) // Ledger is not final, can vote no. + { + // Hope for more reserve to come in or more offers to consume. + terResult = terINSUF_RESERVE_OFFER; + } + else if (!saOfferPaid && !saOfferGot) + { + // Ledger is final, insufficent reserve to create offer, processed nothing. + + terResult = tepINSUF_RESERVE_OFFER; + } + else + { + // Ledger is final, insufficent reserve to create offer, processed something. + + // Consider the offer unfunded. Treat as tesSUCCESS. + nothing(); + } + } + else { // We need to place the remainder of the offer into its order book. cLog(lsINFO) << boost::str(boost::format("doOfferCreate: offer not fully consumed: saTakerPays=%s saTakerGets=%s") From ed48face1243895fec75daef14217cf4d20bf0ec Mon Sep 17 00:00:00 2001 From: Jcar Date: Wed, 19 Dec 2012 15:41:25 -0800 Subject: [PATCH 052/525] Added TransactionQueue to XCode list. Note to self: You have to do this every time. --- rippled.xcodeproj/project.pbxproj | 28 ++++++++++++++---- .../UserInterfaceState.xcuserstate | Bin 52221 -> 49596 bytes .../xcdebugger/Breakpoints.xcbkptlist | 20 +++++++++++++ 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist diff --git a/rippled.xcodeproj/project.pbxproj b/rippled.xcodeproj/project.pbxproj index 612bc73e0..4b9b74010 100644 --- a/rippled.xcodeproj/project.pbxproj +++ b/rippled.xcodeproj/project.pbxproj @@ -7,7 +7,6 @@ objects = { /* Begin PBXBuildFile section */ - C10365C9168147D200D9D15C /* ripple.pb.cc in Sources */ = {isa = PBXBuildFile; fileRef = C10365C8168147D200D9D15C /* ripple.pb.cc */; }; C14F812E1681323400AAB80A /* rippled.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C14F812D1681323400AAB80A /* rippled.1 */; }; C14F842F1681326700AAB80A /* database.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F81371681326600AAB80A /* database.cpp */; }; C14F84311681326700AAB80A /* sqlite3.c in Sources */ = {isa = PBXBuildFile; fileRef = C14F813C1681326600AAB80A /* sqlite3.c */; }; @@ -116,6 +115,8 @@ C14F84DF1681326700AAB80A /* boost_rng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82E11681326600AAB80A /* boost_rng.cpp */; }; C14F84E21681326700AAB80A /* sha1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82EC1681326600AAB80A /* sha1.cpp */; }; C14F84E51681326700AAB80A /* uri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F82FA1681326600AAB80A /* uri.cpp */; }; + C1637B0416827C5B0067A9B4 /* ripple.pb.cc in Sources */ = {isa = PBXBuildFile; fileRef = C1637B0216827C5B0067A9B4 /* ripple.pb.cc */; }; + C1637B07168284510067A9B4 /* TransactionQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C1637B05168284510067A9B4 /* TransactionQueue.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXBuildRule section */ @@ -239,7 +240,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - C10365C8168147D200D9D15C /* ripple.pb.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ripple.pb.cc; path = ../build/proto/ripple.pb.cc; sourceTree = ""; }; C14F81271681323400AAB80A /* rippled */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = rippled; sourceTree = BUILT_PRODUCTS_DIR; }; C14F812D1681323400AAB80A /* rippled.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = rippled.1; sourceTree = ""; }; C14F81371681326600AAB80A /* database.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = database.cpp; sourceTree = ""; }; @@ -909,6 +909,10 @@ C14F841E1681326600AAB80A /* test.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = test.js; sourceTree = ""; }; C14F841F1681326600AAB80A /* utils.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.js; sourceTree = ""; }; C14F84201681326600AAB80A /* utils.web.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = utils.web.js; sourceTree = ""; }; + C1637B0216827C5B0067A9B4 /* ripple.pb.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ripple.pb.cc; sourceTree = ""; }; + C1637B0316827C5B0067A9B4 /* ripple.pb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ripple.pb.h; sourceTree = ""; }; + C1637B05168284510067A9B4 /* TransactionQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransactionQueue.cpp; sourceTree = ""; }; + C1637B06168284510067A9B4 /* TransactionQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionQueue.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -925,7 +929,7 @@ C10365CA168147DF00D9D15C /* build */ = { isa = PBXGroup; children = ( - C10365C8168147D200D9D15C /* ripple.pb.cc */, + C1637B0116827C5B0067A9B4 /* proto */, ); path = build; sourceTree = ""; @@ -1030,6 +1034,8 @@ C14F81571681326600AAB80A /* ripple */ = { isa = PBXGroup; children = ( + C1637B05168284510067A9B4 /* TransactionQueue.cpp */, + C1637B06168284510067A9B4 /* TransactionQueue.h */, C14F81581681326600AAB80A /* AccountItems.cpp */, C14F81591681326600AAB80A /* AccountItems.h */, C14F815A1681326600AAB80A /* AccountSetTransactor.cpp */, @@ -2274,6 +2280,15 @@ path = test; sourceTree = ""; }; + C1637B0116827C5B0067A9B4 /* proto */ = { + isa = PBXGroup; + children = ( + C1637B0216827C5B0067A9B4 /* ripple.pb.cc */, + C1637B0316827C5B0067A9B4 /* ripple.pb.h */, + ); + path = proto; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -2453,6 +2468,7 @@ C14F84481681326700AAB80A /* HTTPRequest.cpp in Sources */, C14F84491681326700AAB80A /* HttpsClient.cpp in Sources */, C14F844A1681326700AAB80A /* InstanceCounter.cpp in Sources */, + C1637B0416827C5B0067A9B4 /* ripple.pb.cc in Sources */, C14F844B1681326700AAB80A /* Interpreter.cpp in Sources */, C14F844C1681326700AAB80A /* JobQueue.cpp in Sources */, C14F844D1681326700AAB80A /* Ledger.cpp in Sources */, @@ -2534,7 +2550,7 @@ C14F84DF1681326700AAB80A /* boost_rng.cpp in Sources */, C14F84E21681326700AAB80A /* sha1.cpp in Sources */, C14F84E51681326700AAB80A /* uri.cpp in Sources */, - C10365C9168147D200D9D15C /* ripple.pb.cc in Sources */, + C1637B07168284510067A9B4 /* TransactionQueue.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2568,7 +2584,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../build/proto/, + build/proto/, /usr/local/include/, /opt/local/include/, ); @@ -2615,7 +2631,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( - ../build/proto/, + build/proto/, /usr/local/include/, /opt/local/include/, ); diff --git a/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate b/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate index 702a0381014dbc6265a74e52ec65c5ebb5167053..892901d283041d41f4497c6e603d3b337f313fab 100644 GIT binary patch literal 49596 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 literal 52221 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%0D7g$wwp=b(5Oz9Y-KH+d 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 diff --git a/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist b/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist new file mode 100644 index 000000000..e5eb0138a --- /dev/null +++ b/rippled.xcodeproj/xcuserdata/jcar.xcuserdatad/xcdebugger/Breakpoints.xcbkptlist @@ -0,0 +1,20 @@ + + + + + + + From b8318705765cb71878fe2fbea56d841452ff15b5 Mon Sep 17 00:00:00 2001 From: Jcar Date: Thu, 20 Dec 2012 11:18:02 -0800 Subject: [PATCH 053/525] Playing around with the tests --- .../UserInterfaceState.xcuserstate | Bin 49596 -> 49840 bytes test/server-test.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate b/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate index 892901d283041d41f4497c6e603d3b337f313fab..5c7299419628dbbf81317d033bb9623e69699779 100644 GIT binary patch delta 25052 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 VB29Pi?&#>d9(?_-|If%f{{?dyAL{@B delta 24911 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

F+Z1rn~(9$=hTo?9zjl8h?P&6e)ISEpCk<`h*| z*J`ViY8ooE6Y^_IMwdiutE*9}sUI&^gOVi{b!~;RuFtU@tT}7JT4F3~g>7f8SsS(= zYs=bVw^%#Y9!qBJSx52tnkL@bh=hcVQIdce8;qCAxwPIDSQpk+e7M$1(Zjm2?&42t z2g=XQSWmPavtE#}eHo}(Uv|)c+BcXT!uqoTkg$V0Lw|vCcxYU1w`JDN$RRT~@sjquBWWR5F20M3ayV33o_%>nCAwpOR_VmUV18n*j+ANO=8+rkUuFHeRo37Sc3} z&4z@hG^k4iO#E_Pi0*&q0&%d~e{dKXAs#`#na`pur<y+RO~0NEBu3@}2@WFs1`j~Mm8 z1~jo9?9A5;=#uD-jnFJ36O2v5<@uQ-&(F;Do5h%(p*nV<9+uk{zqWSRH)No1#jIdg zz04KZ)sPt4XG}NN*2Au2d)W1m7zT-vkO+D;K%3aDe@_9}ZR~bPAQu}Uc%lqbJhH*w zmfged{|D8Z>;XuOg2ZUF$Nsg!)|NfY9{C5!QT7-lf*~;mkpyl`eCbuESrnDFvhTAW zuxHp0*|Y3N>^b&h_B@MXR2U?}ArS$Iv5<&_#5hQdheQ-4q9GBpmHmYMREn6GGkb-- z%6`s%!Cr$zEF|Kj$cavJL_H+lfW&S{9EZdiDJIy5YV)&eOKRe@RbphTh4@K}xdvG! zrD>tsoZ5l{ZIzURiNCgt6SG^*B8~g7i4`S9H7P~fsTn2N4dt~pNmW{H-$;MQqD1Jm zn+EKU>;p9P?0rbYce6i1A_2uZ*w#OSeZ)SN8h(XDVmJF6B$5Q*r0DFTvOYHAc2-l zEd=N(p?J7`Q!eMid1C5+uSauU9C{wZp#_r*3G_e~#dR&p6!mrBgUj9jwGMoV8_W&C zSk9jd-~zd!+%Rsqc&a0bCn_OP2#IP)6bPZB>&$>O4wZX0a6w!!H--!0knKf~D1k&N zB+4LBj?Dgqi$H=bxX6siJQU}P@{6=pdi9I{Es560WG;$}7O&2di82^93^ zLSi8#L`W=x#A3bI%@;qP>!9Pdb9<2I{p;fkZZEe_U%e-0Lt>8Pd8m3Xc^-^Qn^2NI zVVd8N05npA1`nF?y2HJ#`i>ihC38n0F<;85h-v}l8uK)|7xJG^^{=IE=Z>SPRH5~^ z0L`VSo43cBJFY*u5)1T!mpdm7!^evSKKW~tb)Wk!8bj)1fBoN zvTOQc4fieg{lCrCm>d!c>)qWlK7py;&~++1RmvL>tFc-&+zL1Z(ra|cvIetH|H&S zePIKN@0%g94HDZSu|w|+y~D)Y@DBgw3cMqa9!8-@$;3uTZ0d6b(Qu(z(5q0xd&)D< z`$7Wc>U}f6gQ+=kxiZzi-F<6uuY|sBH1B;F*~+EW4^mdb6`y+Txsons>i`(&sDq>VGiT z@U@UQ3W;MVE|f2_(eaJE6l3JuLOhBwC;Ai;B!wW~42kz3ar%`)ZT!rC$n4}%I5-K3 zQ-Wvu%Zi9oP>Wo8>$7|wzwjS?BEN`&#QTu=04X!R&D!`gei^@jXnH&egh&{$#2GP@LRB3;*D9cy3ZhiBLCUff(E~h-!AP^ z(isWu0w4A5QTi3c??HPMzn9;~@8{p-4?yA^Bv4#94+)gLTtv?Da*vWXCV7MT@BKz6 zZAX9KaQIWwhJ$?N|Gwe;%`E;LGHf$S{gW{iOfE^LU+ztd`A;NQUM-CU(oWi?_{;p2 zEF(8G=BeeP`)ntYzlw_K_Om_ZV+{WVe@)ym+m%?yUl+H{b{9`UCmnwiNufKXN}aSt zp?3|@6+vyD{=LCEZPi8oHvesMVhxI10>CKD5@l&#*brqRLTy9eWpDz0hrwy|Ee2=Nw-{Wc zbe~aIs4u7+=!*<~Ltj(iLx-Z0YAd}273j{=U!$7T�F46xESlFaUjX0EfOaK+Tw< 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 diff --git a/test/server-test.js b/test/server-test.js index f44379162..39616f7fe 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -9,7 +9,7 @@ var alpha; buster.testCase("Standalone server startup", { "server start and stop" : function (done) { - alpha = Server.from_config("alpha"); + alpha = Server.from_config("alpha",true); alpha .on('started', function () { From aebfa168e6aa60098c0e6c2703950503fe1ce847 Mon Sep 17 00:00:00 2001 From: Jcar Date: Thu, 20 Dec 2012 11:45:06 -0800 Subject: [PATCH 054/525] test/server.js asserts on exit that stop() has been called (to detect improper exit) --- test/server-test.js | 2 +- test/server.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/test/server-test.js b/test/server-test.js index 39616f7fe..dd28ed618 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -9,7 +9,7 @@ var alpha; buster.testCase("Standalone server startup", { "server start and stop" : function (done) { - alpha = Server.from_config("alpha",true); + alpha = Server.from_config("alpha"); //ADD ,true for verbosity alpha .on('started', function () { diff --git a/test/server.js b/test/server.js index 400abf6ae..c1ffd09e1 100644 --- a/test/server.js +++ b/test/server.js @@ -31,6 +31,7 @@ var Server = function (name, config, verbose) { this.config = config; this.started = false; this.quiet = !verbose; + this.stopping = false; //Not sure if we need this... }; Server.prototype = new EventEmitter; @@ -99,6 +100,7 @@ Server.prototype._serverSpawnSync = function() { this.child.on('exit', function(code, signal) { // If could not exec: code=127, signal=null // If regular exit: code=0, signal=null + buster.assert(!self.stopping); //Fail the test if the server is exiting without having called "stop" if (!self.quiet) console.log("server: spawn: server exited code=%s: signal=%s", code, signal); }); }; @@ -148,7 +150,7 @@ Server.prototype.start = function () { // Stop a standalone server. Server.prototype.stop = function () { var self = this; - + self.stopping = true; //Tell the caller that the server is properly stopping. if (this.child) { // Update the on exit to invoke done. this.child.on('exit', function (code, signal) { From 496070edfd637d64f351d02a47ac9cca68037aac Mon Sep 17 00:00:00 2001 From: Jcar Date: Thu, 20 Dec 2012 11:46:07 -0800 Subject: [PATCH 055/525] Making a new test --- test/test-test.js | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 test/test-test.js diff --git a/test/test-test.js b/test/test-test.js new file mode 100644 index 000000000..9a8766753 --- /dev/null +++ b/test/test-test.js @@ -0,0 +1,66 @@ +var async = require("async"); +var buster = require("buster"); + +var Amount = require("../src/js/amount.js").Amount; +var Remote = require("../src/js/remote.js").Remote; +var Server = require("./server.js").Server; + + +var testutils = require("./testutils.js"); + +buster.spec.expose(); + +describe("My thing", function () { + it("states the obvious", function () { + expect(true).toBe(true);; + }); +}); + +buster.testCase("Basic Path finding", { + 'setUp' : testutils.build_setup(), + 'tearDown' : testutils.build_teardown(), + + "two parallel paths, a -> c and a -> b -> c" : + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["sally","bob","rod"], callback); + }, + function (callback) { + self.what = "Set credit limits."; + + testutils.credit_limits(self.remote, + { + "rod" : "40/USD/alice", + "bob" : "100/USD/alice", + "rod" : "37/USD/bob", + }, + callback); + }, + + function (callback) { + self.what = "Find path from alice to rod"; + + self.remote.request_ripple_path_find("alice", "rod", "55/USD/rod", + [ { 'currency' : "USD" } ]) + .on('success', function (m) { + // 2 alternatives. + buster.assert.equals(2, m.alternatives.length) + // Path is empty. + //buster.assert.equals(0, m.alternatives[0].paths_canonical.length) + + callback(); + }) + .request(); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, + +}); \ No newline at end of file From 4a95549466a337b1b28b3d486e1a665d5f5d0587 Mon Sep 17 00:00:00 2001 From: Jcar Date: Thu, 20 Dec 2012 13:23:21 -0800 Subject: [PATCH 056/525] more playing with tests --- rippled.xcodeproj/project.pbxproj | 2 ++ .../UserInterfaceState.xcuserstate | Bin 49840 -> 95823 bytes .../xcdebugger/Breakpoints.xcbkptlist | 15 --------------- test/server-test.js | 2 +- 4 files changed, 3 insertions(+), 16 deletions(-) diff --git a/rippled.xcodeproj/project.pbxproj b/rippled.xcodeproj/project.pbxproj index 4b9b74010..6e28208f0 100644 --- a/rippled.xcodeproj/project.pbxproj +++ b/rippled.xcodeproj/project.pbxproj @@ -2675,6 +2675,7 @@ /usr/local/Cellar/boost/1.50.0/lib, /usr/local/Cellar/protobuf/2.4.1/lib, ); + ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "-lssl", "-lcrypto", @@ -2710,6 +2711,7 @@ /usr/local/Cellar/boost/1.50.0/lib, /usr/local/Cellar/protobuf/2.4.1/lib, ); + ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = ( "-lssl", "-lcrypto", diff --git a/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate b/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate index 5c7299419628dbbf81317d033bb9623e69699779..2bda6bf295c94a9ca141ffafc0dc9fde13694e1f 100644 GIT binary patch literal 95823 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 Gm;VRF7=4id delta 24961 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 - - - - diff --git a/test/server-test.js b/test/server-test.js index dd28ed618..6df9f4b76 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -9,7 +9,7 @@ var alpha; buster.testCase("Standalone server startup", { "server start and stop" : function (done) { - alpha = Server.from_config("alpha"); //ADD ,true for verbosity + alpha = Server.from_config("alpha",true); //ADD ,true for verbosity alpha .on('started', function () { From 099ffbddc0439309d58093f4909670076e1ac0be Mon Sep 17 00:00:00 2001 From: Jcar Date: Thu, 20 Dec 2012 15:55:37 -0800 Subject: [PATCH 057/525] Further testing --- .../UserInterfaceState.xcuserstate | Bin 95823 -> 68280 bytes test/send-test.js | 6 ++-- test/server-test.js | 4 ++- test/server.js | 6 ++-- test/test-test.js | 26 +++++++++++++++++- 5 files changed, 34 insertions(+), 8 deletions(-) diff --git a/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate b/rippled.xcodeproj/project.xcworkspace/xcuserdata/jcar.xcuserdatad/UserInterfaceState.xcuserstate index 2bda6bf295c94a9ca141ffafc0dc9fde13694e1f..23030d30069c9d08c0445e73790a59cef8b9e3fd 100644 GIT binary patch delta 24214 zcma&N2VB#~`#7HW3dws%6Og?T5E+6C7l;c7vQZLbFPQ@F5zf7Ey}>vcAxxR#Y~7=^ z?mcSVt5&U}TD4XCzYw(c^KDE-{gqNh~Ec5_^f0#6{vJ@sRY8^py0G^pgyf_)CUJhD%0D#z=xC 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 literal 95823 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 Gm;VRF7=4id diff --git a/test/send-test.js b/test/send-test.js index 85c4487cd..d64d028d1 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -40,10 +40,10 @@ buster.testCase("Fee Changes", { */ buster.testCase("Sending", { - 'setUp' : testutils.build_setup(), - 'tearDown' : testutils.build_teardown(), + 'setUp' : testutils.build_setup(), // + 'tearDown' : testutils.build_teardown(), - "send XRP to non-existent account with insufficent fee" : + "send XRP to non-existent account with insufficent fee" : // => to run only that. function (done) { var self = this; var ledgers = 20; diff --git a/test/server-test.js b/test/server-test.js index 6df9f4b76..c4502e5f0 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -1,5 +1,5 @@ var buster = require("buster"); - +var testutils = require("./testutils.js"); var Server = require("./server.js").Server; // How long to wait for server to start. @@ -8,6 +8,8 @@ var Server = require("./server.js").Server; var alpha; buster.testCase("Standalone server startup", { + + "server start and stop" : function (done) { alpha = Server.from_config("alpha",true); //ADD ,true for verbosity diff --git a/test/server.js b/test/server.js index c1ffd09e1..9fecec2f7 100644 --- a/test/server.js +++ b/test/server.js @@ -31,7 +31,7 @@ var Server = function (name, config, verbose) { this.config = config; this.started = false; this.quiet = !verbose; - this.stopping = false; //Not sure if we need this... + this.stopping = false; }; Server.prototype = new EventEmitter; @@ -100,7 +100,7 @@ Server.prototype._serverSpawnSync = function() { this.child.on('exit', function(code, signal) { // If could not exec: code=127, signal=null // If regular exit: code=0, signal=null - buster.assert(!self.stopping); //Fail the test if the server is exiting without having called "stop" + buster.assert(!self.stopping); //Fail the test if the server has called "stop" if (!self.quiet) console.log("server: spawn: server exited code=%s: signal=%s", code, signal); }); }; @@ -150,7 +150,7 @@ Server.prototype.start = function () { // Stop a standalone server. Server.prototype.stop = function () { var self = this; - self.stopping = true; //Tell the caller that the server is properly stopping. + self.stopping = true; if (this.child) { // Update the on exit to invoke done. this.child.on('exit', function (code, signal) { diff --git a/test/test-test.js b/test/test-test.js index 9a8766753..109454e99 100644 --- a/test/test-test.js +++ b/test/test-test.js @@ -6,6 +6,9 @@ var Remote = require("../src/js/remote.js").Remote; var Server = require("./server.js").Server; +var child = require("child_process"); //Testing spawn + + var testutils = require("./testutils.js"); buster.spec.expose(); @@ -14,8 +17,27 @@ describe("My thing", function () { it("states the obvious", function () { expect(true).toBe(true);; }); + + //var spawn = child.spawn, + + ls = child.spawn('ls', ['-lh', '/']); + + ls.stdout.on('data', function (data) { + console.log('stdout: ' + data); + }); + + ls.stderr.on('data', function (data) { + console.log('stderr: ' + data); + }); + + ls.on('exit', function (code) { + console.log('child process exited with code ' + code); + }); + }); +/* + buster.testCase("Basic Path finding", { 'setUp' : testutils.build_setup(), 'tearDown' : testutils.build_teardown(), @@ -63,4 +85,6 @@ buster.testCase("Basic Path finding", { }); }, -}); \ No newline at end of file +}); + +*/ \ No newline at end of file From b51ac04aff5479697ee387150c1db849fdb09d8d Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 20 Dec 2012 22:02:07 -0800 Subject: [PATCH 058/525] Error changes for offer reserves. --- src/cpp/ripple/TransactionErr.cpp | 1 + src/cpp/ripple/TransactionErr.h | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index 3b8838774..3198f0ef7 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -46,6 +46,7 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { tepPATH_DRY, "tepPATH_DRY", "Path could not send partial amount." }, { tepPATH_PARTIAL, "tepPATH_PARTIAL", "Path could not send full amount." }, + { tepINSUF_RESERVE_OFFER, "tepINSUF_RESERVE_OFFER", "Insufficent reserve to create offer." }, { terDIR_FULL, "terDIR_FULL", "Can not add entry to full dir." }, { terFUNDS_SPENT, "terFUNDS_SPENT", "Can't set password, password set funds already spent." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 552b4fcb9..e5947aaa7 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -108,9 +108,10 @@ enum TER // aka TransactionEngineResult // - Forwarded // Only allowed as a return code of appliedTransaction when !tapRetry. Otherwise, treated as terRETRY. // CAUTION: The numerical values for these results are part of the binary formats - tepPARTIAL = 100, - tepPATH_DRY = 101, - tepPATH_PARTIAL = 102, + tepPARTIAL = 100, + tepPATH_DRY = 101, + tepPATH_PARTIAL = 102, + tepINSUF_RESERVE_OFFER = 103, }; #define isTelLocal(x) ((x) >= telLOCAL_ERROR && (x) < temMALFORMED) From 37c073a79b9d7c43caacdca7a26ed327e6db912d Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 20 Dec 2012 22:06:16 -0800 Subject: [PATCH 059/525] UT: Fix reporting of errors on server exit. --- test/server.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/server.js b/test/server.js index 9fecec2f7..8606c003b 100644 --- a/test/server.js +++ b/test/server.js @@ -100,7 +100,8 @@ Server.prototype._serverSpawnSync = function() { this.child.on('exit', function(code, signal) { // If could not exec: code=127, signal=null // If regular exit: code=0, signal=null - buster.assert(!self.stopping); //Fail the test if the server has called "stop" + buster.assert(self.stopping); //Fail the test if the server has not called "stop". + if (!self.quiet) console.log("server: spawn: server exited code=%s: signal=%s", code, signal); }); }; @@ -150,7 +151,9 @@ Server.prototype.start = function () { // Stop a standalone server. Server.prototype.stop = function () { var self = this; + self.stopping = true; + if (this.child) { // Update the on exit to invoke done. this.child.on('exit', function (code, signal) { From fadf9aa4421b13ec41a5d95039f4b035233b34d8 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 20 Dec 2012 22:23:10 -0800 Subject: [PATCH 060/525] Prevent offers spending from XRP reserve. --- src/cpp/ripple/LedgerEntrySet.cpp | 22 +++++++++--- test/offer-test.js | 57 ++++++++++++------------------- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index d47be76c9..4d560750d 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -19,9 +19,9 @@ DECLARE_INSTANCE(LedgerEntrySet) void LedgerEntrySet::init(Ledger::ref ledger, const uint256& transactionID, uint32 ledgerID) { mEntries.clear(); - mLedger = ledger; + mLedger = ledger; mSet.init(transactionID, ledgerID); - mSeq = 0; + mSeq = 0; } void LedgerEntrySet::clear() @@ -1013,7 +1013,7 @@ STAmount LedgerEntrySet::rippleHolds(const uint160& uAccountID, const uint160& u } else if (uAccountID > uIssuerID) { - if (bAvail) + if (false && bAvail) { saBalance = sleRippleState->getFieldAmount(sfLowLimit); saBalance -= sleRippleState->getFieldAmount(sfBalance); @@ -1028,7 +1028,7 @@ STAmount LedgerEntrySet::rippleHolds(const uint160& uAccountID, const uint160& u } else { - if (bAvail) + if (false && bAvail) { saBalance = sleRippleState->getFieldAmount(sfHighLimit); saBalance += sleRippleState->getFieldAmount(sfBalance); @@ -1052,8 +1052,18 @@ STAmount LedgerEntrySet::accountHolds(const uint160& uAccountID, const uint160& if (!uCurrencyID) { SLE::pointer sleAccount = entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(uAccountID)); + uint64 uReserve = mLedger->getReserve(sleAccount->getFieldU32(sfOwnerCount)); - saAmount = sleAccount->getFieldAmount(sfBalance); + saAmount = sleAccount->getFieldAmount(sfBalance)-uReserve; + + if (saAmount < uReserve) + { + saAmount.zero(); + } + else + { + saAmount -= uReserve; + } } else { @@ -1070,7 +1080,9 @@ STAmount LedgerEntrySet::accountHolds(const uint160& uAccountID, const uint160& // Returns the funds available for uAccountID for a currency/issuer. // Use when you need a default for rippling uAccountID's currency. +// XXX Should take into account quality? // --> saDefault/currency/issuer +// --> bAvail: true to include going into debt. // <-- saFunds: Funds available. May be negative. // If the issuer is the same as uAccountID, funds are unlimited, use result is saDefault. STAmount LedgerEntrySet::accountFunds(const uint160& uAccountID, const STAmount& saDefault, bool bAvail) diff --git a/test/offer-test.js b/test/offer-test.js index d7949bc26..8cb033286 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -481,54 +481,41 @@ buster.testCase("Offer tests", { .offer_create("bob", "50/USD/alice", "200/EUR/carol") .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); - callback(m.result !== 'tesSUCCESS'); + callback(m.result !== 'terUNFUNDED'); seq = m.tx_json.Sequence; }) .submit(); }, // function (callback) { -// self.what = "Alice converts USD to EUR via ripple."; +// self.what = "Alice converts USD to EUR via offer."; // // self.remote.transaction() -// .payment("alice", "alice", "10/EUR/carol") -// .send_max("50/USD/alice") +// .offer_create("alice", "200/EUR/carol", "50/USD/alice") // .on('proposed', function (m) { -// // console.log("proposed: %s", JSON.stringify(m)); -// +// // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); // callback(m.result !== 'tesSUCCESS'); +// +// seq = m.tx_json.Sequence; // }) // .submit(); // }, - function (callback) { - self.what = "Alice converts USD to EUR via offer."; - - self.remote.transaction() - .offer_create("alice", "200/EUR/carol", "50/USD/alice") - .on('proposed', function (m) { - // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); - callback(m.result !== 'tesSUCCESS'); - - seq = m.tx_json.Sequence; - }) - .submit(); - }, - function (callback) { - self.what = "Verify balances."; - - testutils.verify_balances(self.remote, - { - "alice" : [ "-50/USD/bob", "200/EUR/carol" ], - "bob" : [ "50/USD/alice", "-200/EUR/carol" ], - "carol" : [ "-200/EUR/alice", "200/EUR/bob" ], - }, - callback); - }, - function (callback) { - self.what = "Verify offer consumed."; - - testutils.verify_offer_not_found(self.remote, "bob", seq, callback); - }, +// function (callback) { +// self.what = "Verify balances."; +// +// testutils.verify_balances(self.remote, +// { +// "alice" : [ "-50/USD/bob", "200/EUR/carol" ], +// "bob" : [ "50/USD/alice", "-200/EUR/carol" ], +// "carol" : [ "-200/EUR/alice", "200/EUR/bob" ], +// }, +// callback); +// }, +// function (callback) { +// self.what = "Verify offer consumed."; +// +// testutils.verify_offer_not_found(self.remote, "bob", seq, callback); +// }, ], function (error) { buster.refute(error, self.what); done(); From 8f35b7865186d3577dcdcc066ac29a4392807ec8 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 20 Dec 2012 23:19:20 -0800 Subject: [PATCH 061/525] Exit with code 3 if network port is in use. --- src/cpp/ripple/Application.cpp | 48 +++++++++++++++++++++++++++++++--- src/cpp/ripple/RPCDoor.cpp | 17 +++++++----- src/cpp/ripple/WSDoor.cpp | 7 +++-- 3 files changed, 57 insertions(+), 15 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 475f41d26..5abf6bbc1 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -158,7 +158,17 @@ void Application::run() // if (!theConfig.RUN_STANDALONE && !theConfig.PEER_IP.empty() && theConfig.PEER_PORT) { - mPeerDoor = new PeerDoor(mIOService); + try + { + mPeerDoor = new PeerDoor(mIOService); + } + catch (const std::exception& e) + { + // Must run as directed or exit. + cLog(lsFATAL) << boost::str(boost::format("Can not open peer service: %s") % e.what()); + + exit(3); + } } else { @@ -170,7 +180,17 @@ void Application::run() // if (!theConfig.RPC_IP.empty() && theConfig.RPC_PORT) { - mRPCDoor = new RPCDoor(mIOService); + try + { + mRPCDoor = new RPCDoor(mIOService); + } + catch (const std::exception& e) + { + // Must run as directed or exit. + cLog(lsFATAL) << boost::str(boost::format("Can not open RPC service: %s") % e.what()); + + exit(3); + } } else { @@ -182,7 +202,17 @@ void Application::run() // if (!theConfig.WEBSOCKET_IP.empty() && theConfig.WEBSOCKET_PORT) { - mWSPrivateDoor = WSDoor::createWSDoor(theConfig.WEBSOCKET_IP, theConfig.WEBSOCKET_PORT, false); + try + { + mWSPrivateDoor = WSDoor::createWSDoor(theConfig.WEBSOCKET_IP, theConfig.WEBSOCKET_PORT, false); + } + catch (const std::exception& e) + { + // Must run as directed or exit. + cLog(lsFATAL) << boost::str(boost::format("Can not open private websocket service: %s") % e.what()); + + exit(3); + } } else { @@ -194,7 +224,17 @@ void Application::run() // if (!theConfig.WEBSOCKET_PUBLIC_IP.empty() && theConfig.WEBSOCKET_PUBLIC_PORT) { - mWSPublicDoor = WSDoor::createWSDoor(theConfig.WEBSOCKET_PUBLIC_IP, theConfig.WEBSOCKET_PUBLIC_PORT, true); + try + { + mWSPublicDoor = WSDoor::createWSDoor(theConfig.WEBSOCKET_PUBLIC_IP, theConfig.WEBSOCKET_PUBLIC_PORT, true); + } + catch (const std::exception& e) + { + // Must run as directed or exit. + cLog(lsFATAL) << boost::str(boost::format("Can not open public websocket service: %s") % e.what()); + + exit(3); + } } else { diff --git a/src/cpp/ripple/RPCDoor.cpp b/src/cpp/ripple/RPCDoor.cpp index 9d98a2462..40c1e0f67 100644 --- a/src/cpp/ripple/RPCDoor.cpp +++ b/src/cpp/ripple/RPCDoor.cpp @@ -5,18 +5,20 @@ #include #include +SETUP_LOG(); + using namespace std; using namespace boost::asio::ip; RPCDoor::RPCDoor(boost::asio::io_service& io_service) : mAcceptor(io_service, tcp::endpoint(address::from_string(theConfig.RPC_IP), theConfig.RPC_PORT)) { - Log(lsINFO) << "RPC port: " << theConfig.RPC_IP << " " << theConfig.RPC_PORT << " allow remote: " << theConfig.RPC_ALLOW_REMOTE; + cLog(lsINFO) << "RPC port: " << theConfig.RPC_IP << " " << theConfig.RPC_PORT << " allow remote: " << theConfig.RPC_ALLOW_REMOTE; startListening(); } RPCDoor::~RPCDoor() { - Log(lsINFO) << "RPC port: " << theConfig.RPC_IP << " " << theConfig.RPC_PORT << " allow remote: " << theConfig.RPC_ALLOW_REMOTE; + cLog(lsINFO) << "RPC port: " << theConfig.RPC_IP << " " << theConfig.RPC_PORT << " allow remote: " << theConfig.RPC_ALLOW_REMOTE; } void RPCDoor::startListening() @@ -31,25 +33,26 @@ void RPCDoor::startListening() bool RPCDoor::isClientAllowed(const std::string& ip) { - if(theConfig.RPC_ALLOW_REMOTE) return(true); - if(ip=="127.0.0.1") return(true); + if (theConfig.RPC_ALLOW_REMOTE) return(true); + if (ip=="127.0.0.1") return(true); + return(false); } void RPCDoor::handleConnect(RPCServer::pointer new_connection, const boost::system::error_code& error) { - if(!error) + if (!error) { // Restrict callers by IP - if(!isClientAllowed(new_connection->getSocket().remote_endpoint().address().to_string())) + if (!isClientAllowed(new_connection->getSocket().remote_endpoint().address().to_string())) { return; } new_connection->connected(); } - else Log(lsINFO) << "RPCDoor::handleConnect Error: " << error; + else cLog(lsINFO) << "RPCDoor::handleConnect Error: " << error; startListening(); } diff --git a/src/cpp/ripple/WSDoor.cpp b/src/cpp/ripple/WSDoor.cpp index a992d667c..d75c30cc5 100644 --- a/src/cpp/ripple/WSDoor.cpp +++ b/src/cpp/ripple/WSDoor.cpp @@ -58,7 +58,7 @@ void WSDoor::startListening() SSL_CTX_set_tmp_dh_callback(mCtx->native_handle(), handleTmpDh); - if(theConfig.WEBSOCKET_SECURE) + if (theConfig.WEBSOCKET_SECURE) { // Construct a single handler for all requests. websocketpp::server_tls::handler::ptr handler(new WSServerHandler(mCtx, mPublic)); @@ -94,7 +94,8 @@ void WSDoor::startListening() } delete mSEndpoint; - }else + } + else { // Construct a single handler for all requests. websocketpp::server::handler::ptr handler(new WSServerHandler(mCtx, mPublic)); @@ -131,7 +132,6 @@ void WSDoor::startListening() delete mEndpoint; } - } WSDoor* WSDoor::createWSDoor(const std::string& strIp, const int iPort, bool bPublic) @@ -163,5 +163,4 @@ void WSDoor::stop() } } - // vim:ts=4 From cb5719d550cd083ef71fd80afcfdd261df33c127 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 21 Dec 2012 07:13:30 -0800 Subject: [PATCH 062/525] Fix a small leak. --- src/cpp/ripple/Log.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Log.cpp b/src/cpp/ripple/Log.cpp index d1eb01962..a4fd2ef6e 100644 --- a/src/cpp/ripple/Log.cpp +++ b/src/cpp/ripple/Log.cpp @@ -166,9 +166,9 @@ void Log::setLogFile(boost::filesystem::path path) if (outStream != NULL) delete outStream; outStream = newStream; - if (outStream) - Log(lsINFO) << "Starting up"; + if (pathToLog != NULL) + delete pathToLog; pathToLog = new boost::filesystem::path(path); } From d34c0e6a451f1d1b0cf4a4f17fcc156ea2833cce Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 21 Dec 2012 07:38:51 -0800 Subject: [PATCH 063/525] Make running out of file descriptors non fatal. Fix a bug that kills the RPC door if it gets a prohibited connection --- src/cpp/ripple/PeerDoor.cpp | 23 +++++++++++++++---- src/cpp/ripple/PeerDoor.h | 1 + src/cpp/ripple/RPCDoor.cpp | 29 +++++++++++++++++++----- src/cpp/ripple/RPCDoor.h | 4 +++- src/cpp/websocketpp/src/roles/server.hpp | 14 ++++++++---- 5 files changed, 56 insertions(+), 15 deletions(-) diff --git a/src/cpp/ripple/PeerDoor.cpp b/src/cpp/ripple/PeerDoor.cpp index 947dca9f6..e65e72d7e 100644 --- a/src/cpp/ripple/PeerDoor.cpp +++ b/src/cpp/ripple/PeerDoor.cpp @@ -9,6 +9,9 @@ #include "Application.h" #include "Config.h" #include "utils.h" +#include "Log.h" + +SETUP_LOG(); using namespace std; using namespace boost::asio::ip; @@ -21,7 +24,7 @@ static DH* handleTmpDh(SSL* ssl, int is_export, int iKeyLength) PeerDoor::PeerDoor(boost::asio::io_service& io_service) : mAcceptor(io_service, tcp::endpoint(address().from_string(theConfig.PEER_IP), theConfig.PEER_PORT)), - mCtx(boost::asio::ssl::context::sslv23) + mCtx(boost::asio::ssl::context::sslv23), mDelayTimer(io_service) { mCtx.set_options( boost::asio::ssl::context::default_workarounds @@ -32,7 +35,7 @@ PeerDoor::PeerDoor(boost::asio::io_service& io_service) : if (1 != SSL_CTX_set_cipher_list(mCtx.native_handle(), theConfig.PEER_SSL_CIPHER_LIST.c_str())) std::runtime_error("Error setting cipher list (no valid ciphers)."); - cerr << "Peer port: " << theConfig.PEER_IP << " " << theConfig.PEER_PORT << endl; + Log(lsINFO) << "Peer port: " << theConfig.PEER_IP << " " << theConfig.PEER_PORT; startListening(); } @@ -50,13 +53,25 @@ void PeerDoor::startListening() void PeerDoor::handleConnect(Peer::pointer new_connection, const boost::system::error_code& error) { + bool delay = false; if (!error) { new_connection->connected(error); } - else cerr << "Error: " << error; + else + { + if (error == boost::system::errc::too_many_files_open) + delay = true; + cLog(lsERROR) << error; + } - startListening(); + if (delay) + { + mDelayTimer.expires_from_now(boost::posix_time::milliseconds(500)); + mDelayTimer.async_wait(boost::bind(&PeerDoor::startListening, this)); + } + else + startListening(); } void initSSLContext(boost::asio::ssl::context& context, diff --git a/src/cpp/ripple/PeerDoor.h b/src/cpp/ripple/PeerDoor.h index ac472ee0e..9ea247152 100644 --- a/src/cpp/ripple/PeerDoor.h +++ b/src/cpp/ripple/PeerDoor.h @@ -18,6 +18,7 @@ class PeerDoor private: boost::asio::ip::tcp::acceptor mAcceptor; boost::asio::ssl::context mCtx; + boost::asio::deadline_timer mDelayTimer; void startListening(); void handleConnect(Peer::pointer new_connection, const boost::system::error_code& error); diff --git a/src/cpp/ripple/RPCDoor.cpp b/src/cpp/ripple/RPCDoor.cpp index 40c1e0f67..b52e675f5 100644 --- a/src/cpp/ripple/RPCDoor.cpp +++ b/src/cpp/ripple/RPCDoor.cpp @@ -11,11 +11,13 @@ using namespace std; using namespace boost::asio::ip; RPCDoor::RPCDoor(boost::asio::io_service& io_service) : - mAcceptor(io_service, tcp::endpoint(address::from_string(theConfig.RPC_IP), theConfig.RPC_PORT)) + mAcceptor(io_service, tcp::endpoint(address::from_string(theConfig.RPC_IP), theConfig.RPC_PORT)), + mDelayTimer(io_service) { cLog(lsINFO) << "RPC port: " << theConfig.RPC_IP << " " << theConfig.RPC_PORT << " allow remote: " << theConfig.RPC_ALLOW_REMOTE; startListening(); } + RPCDoor::~RPCDoor() { cLog(lsINFO) << "RPC port: " << theConfig.RPC_IP << " " << theConfig.RPC_PORT << " allow remote: " << theConfig.RPC_ALLOW_REMOTE; @@ -33,27 +35,42 @@ void RPCDoor::startListening() bool RPCDoor::isClientAllowed(const std::string& ip) { - if (theConfig.RPC_ALLOW_REMOTE) return(true); - if (ip=="127.0.0.1") return(true); + if (theConfig.RPC_ALLOW_REMOTE) + return true; + if (ip == "127.0.0.1") + return true; - return(false); + return false; } void RPCDoor::handleConnect(RPCServer::pointer new_connection, const boost::system::error_code& error) { + bool delay = false; if (!error) { // Restrict callers by IP if (!isClientAllowed(new_connection->getSocket().remote_endpoint().address().to_string())) { + startListening(); return; } new_connection->connected(); } - else cLog(lsINFO) << "RPCDoor::handleConnect Error: " << error; + else + { + if (error == boost::system::errc::too_many_files_open) + delay = true; + cLog(lsINFO) << "RPCDoor::handleConnect Error: " << error; + } - startListening(); + if (delay) + { + mDelayTimer.expires_from_now(boost::posix_time::milliseconds(1000)); + mDelayTimer.async_wait(boost::bind(&RPCDoor::startListening, this)); + } + else + startListening(); } // vim:ts=4 diff --git a/src/cpp/ripple/RPCDoor.h b/src/cpp/ripple/RPCDoor.h index ab60539c6..b1e01e2e3 100644 --- a/src/cpp/ripple/RPCDoor.h +++ b/src/cpp/ripple/RPCDoor.h @@ -7,7 +7,9 @@ Handles incoming connections from people making RPC Requests class RPCDoor { - boost::asio::ip::tcp::acceptor mAcceptor; + boost::asio::ip::tcp::acceptor mAcceptor; + boost::asio::deadline_timer mDelayTimer; + void startListening(); void handleConnect(RPCServer::pointer new_connection, const boost::system::error_code& error); diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index 339935580..e256a5d44 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -388,6 +388,8 @@ template void server::handle_accept(connection_ptr con, const boost::system::error_code& error) { + bool delay = false; + boost::lock_guard lock(m_endpoint.m_lock); try @@ -398,10 +400,8 @@ void server::handle_accept(connection_ptr con, if (error == boost::system::errc::too_many_files_open) { con->m_fail_reason = "too many files open"; + delay = true; - // TODO: make this configurable - //m_timer.expires_from_now(boost::posix_time::milliseconds(1000)); - //m_timer.async_wait(boost::bind(&type::start_accept,this)); } else if (error == boost::asio::error::operation_aborted) { con->m_fail_reason = "io_service operation canceled"; @@ -426,7 +426,13 @@ void server::handle_accept(connection_ptr con, << "handle_accept caught exception: " << e.what() << log::endl; } - this->start_accept(); + if (delay) + { // Don't spin if too many files are open DJS + m_timer.expires_from_now(boost::posix_time::milliseconds(500)); + m_timer.async_wait(boost::bind(&type::start_accept,this)); + } + else + this->start_accept(); } // server::connection Implimentation From 34456b019cf09110b99fa812d7e5df49bf638aac Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 21 Dec 2012 12:10:26 -0800 Subject: [PATCH 064/525] Cleanup thread creation. --- src/cpp/ripple/Application.cpp | 4 +--- src/cpp/ripple/HashedObject.cpp | 3 +-- src/cpp/ripple/JobQueue.cpp | 3 +-- src/cpp/ripple/Ledger.cpp | 5 ++--- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 5abf6bbc1..b4bbb5713 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -103,9 +103,7 @@ void Application::run() LogPartition::setSeverity(lsDEBUG); } - boost::thread auxThread(boost::bind(&boost::asio::io_service::run, &mAuxService)); - auxThread.detach(); - + boost::thread(boost::bind(&boost::asio::io_service::run, &mAuxService)).detach(); if (!theConfig.RUN_STANDALONE) mSNTPClient.init(theConfig.SNTP_SERVERS); diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index f59a186fe..e7432ec72 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -42,8 +42,7 @@ bool HashedObjectStore::store(HashedObjectType type, uint32 index, if (!mWritePending) { mWritePending = true; - boost::thread t(boost::bind(&HashedObjectStore::bulkWrite, this)); - t.detach(); + boost::thread(boost::bind(&HashedObjectStore::bulkWrite, this)).detach(); } } // else diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index 5abfbb81a..508398b1f 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -204,8 +204,7 @@ void JobQueue::setThreadCount(int c) while (mThreadCount < c) { ++mThreadCount; - boost::thread t(boost::bind(&JobQueue::threadEntry, this)); - t.detach(); + boost::thread(boost::bind(&JobQueue::threadEntry, this)).detach(); } while (mThreadCount > c) { diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index cd3bcd469..7cad5e55b 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -1167,9 +1167,8 @@ void Ledger::pendSave(bool fromConsensus) if (!fromConsensus && !theApp->isNewFlag(getHash(), SF_SAVED)) return; - boost::thread thread(boost::bind(&Ledger::saveAcceptedLedger, shared_from_this(), - fromConsensus, theApp->getJobQueue().getLoadEvent(jtDISK))); - thread.detach(); + boost::thread(boost::bind(&Ledger::saveAcceptedLedger, shared_from_this(), + fromConsensus, theApp->getJobQueue().getLoadEvent(jtDISK))).detach(); boost::recursive_mutex::scoped_lock sl(sPendingSaveLock); ++sPendingSaves; From 401e7e37442508929cc24968e008e0e27555a2a2 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 21 Dec 2012 13:49:45 -0800 Subject: [PATCH 065/525] Whitespace. --- src/cpp/ripple/Application.cpp | 4 ++++ src/cpp/ripple/Log.cpp | 23 ++++++++++++----------- src/cpp/ripple/Log.h | 2 ++ 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 5abf6bbc1..28ab221a6 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -124,11 +124,13 @@ void Application::run() if (theConfig.START_UP == Config::FRESH) { cLog(lsINFO) << "Starting new Ledger"; + startNewLedger(); } else if (theConfig.START_UP == Config::LOAD) { cLog(lsINFO) << "Loading Old Ledger"; + loadOldLedger(); } else if (theConfig.START_UP == Config::NETWORK) @@ -251,6 +253,7 @@ void Application::run() if (theConfig.RUN_STANDALONE) { cLog(lsWARNING) << "Running in standalone mode"; + mNetOps.setStandAlone(); } else @@ -360,4 +363,5 @@ void Application::loadOldLedger() exit(-1); } } + // vim:ts=4 diff --git a/src/cpp/ripple/Log.cpp b/src/cpp/ripple/Log.cpp index d1eb01962..2ef578e20 100644 --- a/src/cpp/ripple/Log.cpp +++ b/src/cpp/ripple/Log.cpp @@ -47,6 +47,7 @@ Log::~Log() logMsg += " " + mPartitionName + ":"; else logMsg += " "; + switch (mSeverity) { case lsTRACE: logMsg += "TRC "; break; @@ -57,16 +58,18 @@ Log::~Log() case lsFATAL: logMsg += "FTL "; break; case lsINVALID: assert(false); return; } + logMsg += oss.str(); + boost::recursive_mutex::scoped_lock sl(sLock); + if (mSeverity >= sMinSeverity) std::cerr << logMsg << std::endl; if (outStream != NULL) (*outStream) << logMsg << std::endl; } - -std::string Log::rotateLog(void) +std::string Log::rotateLog(void) { boost::recursive_mutex::scoped_lock sl(sLock); boost::filesystem::path abs_path; @@ -83,15 +86,15 @@ std::string Log::rotateLog(void) if (failsafe == std::numeric_limits::max()) { return "unable to create new log file; too many log files!"; } - abs_path = boost::filesystem::absolute(""); - abs_path /= *pathToLog; - abs_path_str = abs_path.parent_path().string(); + abs_path = boost::filesystem::absolute(""); + abs_path /= *pathToLog; + abs_path_str = abs_path.parent_path().string(); + out << logRotateCounter; s = out.str(); + abs_new_path_str = abs_path_str + "/" + s + "_" + pathToLog->filename().string(); - abs_new_path_str = abs_path_str + "/" + s + + "_" + pathToLog->filename().string(); - logRotateCounter++; } while (boost::filesystem::exists(boost::filesystem::path(abs_new_path_str))); @@ -99,17 +102,15 @@ std::string Log::rotateLog(void) outStream->close(); boost::filesystem::rename(abs_path, boost::filesystem::path(abs_new_path_str)); - - setLogFile(*pathToLog); return abs_new_path_str; - } void Log::setMinSeverity(LogSeverity s, bool all) { boost::recursive_mutex::scoped_lock sl(sLock); + sMinSeverity = s; if (all) LogPartition::setSeverity(s); @@ -118,6 +119,7 @@ void Log::setMinSeverity(LogSeverity s, bool all) LogSeverity Log::getMinSeverity() { boost::recursive_mutex::scoped_lock sl(sLock); + return sMinSeverity; } @@ -133,7 +135,6 @@ std::string Log::severityToString(LogSeverity s) case lsFATAL: return "Fatal"; default: assert(false); return "Unknown"; } - } LogSeverity Log::stringToSeverity(const std::string& s) diff --git a/src/cpp/ripple/Log.h b/src/cpp/ripple/Log.h index 6da9e0b5c..9f72af817 100644 --- a/src/cpp/ripple/Log.h +++ b/src/cpp/ripple/Log.h @@ -104,3 +104,5 @@ public: }; #endif + +// vim:ts=4 From c05d4fb5590398ad39781d13771dd4413de70554 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 21 Dec 2012 17:05:31 -0800 Subject: [PATCH 066/525] Clean up - Ledger breaking changes. --- src/cpp/ripple/LedgerFormats.cpp | 2 +- src/cpp/ripple/SerializeProto.h | 2 +- src/cpp/ripple/TransactionFormats.h | 5 ++--- src/js/remote.js | 3 +-- test/offer-test.js | 4 ++-- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/LedgerFormats.cpp b/src/cpp/ripple/LedgerFormats.cpp index ae443179c..2b9f01e80 100644 --- a/src/cpp/ripple/LedgerFormats.cpp +++ b/src/cpp/ripple/LedgerFormats.cpp @@ -19,6 +19,7 @@ static bool LEFInit() << SOElement(sfAccount, SOE_REQUIRED) << SOElement(sfSequence, SOE_REQUIRED) << SOElement(sfBalance, SOE_REQUIRED) + << SOElement(sfOwnerCount, SOE_REQUIRED) << SOElement(sfPreviousTxnID, SOE_REQUIRED) << SOElement(sfPreviousTxnLgrSeq, SOE_REQUIRED) << SOElement(sfRegularKey, SOE_OPTIONAL) @@ -28,7 +29,6 @@ static bool LEFInit() << SOElement(sfMessageKey, SOE_OPTIONAL) << SOElement(sfTransferRate, SOE_OPTIONAL) << SOElement(sfDomain, SOE_OPTIONAL) - << SOElement(sfOwnerCount, SOE_OPTIONAL) ; DECLARE_LEF(Contract, ltCONTRACT) diff --git a/src/cpp/ripple/SerializeProto.h b/src/cpp/ripple/SerializeProto.h index e536f9d19..6b3d66115 100644 --- a/src/cpp/ripple/SerializeProto.h +++ b/src/cpp/ripple/SerializeProto.h @@ -43,7 +43,7 @@ FIELD(Expiration, UINT32, 10) FIELD(TransferRate, UINT32, 11) FIELD(WalletSize, UINT32, 12) - FIELD(OwnerCount, UINT32, 13) // Reorder on ledger reset. + FIELD(OwnerCount, UINT32, 13) // 32-bit integers (uncommon) FIELD(HighQualityIn, UINT32, 16) diff --git a/src/cpp/ripple/TransactionFormats.h b/src/cpp/ripple/TransactionFormats.h index 602b1fb3e..6af1a74d9 100644 --- a/src/cpp/ripple/TransactionFormats.h +++ b/src/cpp/ripple/TransactionFormats.h @@ -62,11 +62,10 @@ const int TransactionMaxLen = 1048576; const uint32 tfPassive = 0x00010000; const uint32 tfOfferCreateMask = ~(tfPassive); -// Payment flags: (renumber on ledger wipe) -const uint32 tfPaymentLegacy = 0x00010000; // Left here to avoid ledger change. +// Payment flags: +const uint32 tfNoRippleDirect = 0x00010000; const uint32 tfPartialPayment = 0x00020000; const uint32 tfLimitQuality = 0x00040000; -const uint32 tfNoRippleDirect = 0x00080000; const uint32 tfPaymentMask = ~(tfPartialPayment|tfLimitQuality|tfNoRippleDirect); diff --git a/src/js/remote.js b/src/js/remote.js index 97ae40939..eaca50651 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -267,10 +267,9 @@ Remote.flags = { }, 'Payment' : { - 'PaymentLegacy' : 0x00010000, + 'NoRippleDirect' : 0x00010000, 'PartialPayment' : 0x00020000, 'LimitQuality' : 0x00040000, - 'NoRippleDirect' : 0x00080000, }, }; diff --git a/test/offer-test.js b/test/offer-test.js index 8cb033286..3716fc9c6 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -346,9 +346,9 @@ buster.testCase("Offer tests", { testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "mtgox"], callback); }, function (callback) { - self.what = "Owner count undefined."; + self.what = "Owner count 0."; - testutils.verify_owner_count(self.remote, "bob", undefined, callback); + testutils.verify_owner_count(self.remote, "bob", 0, callback); }, function (callback) { self.what = "Set limits."; From 1f74c1e30e5de29a9887e2ad999992f29e7b0300 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 22 Dec 2012 14:07:42 -0800 Subject: [PATCH 067/525] Remove redundant set, log before assert. --- src/cpp/ripple/LedgerEntrySet.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 4d560750d..7fe09927c 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -626,12 +626,11 @@ TER LedgerEntrySet::dirDelete( uint64 uNodeCur = uNodeDir; SLE::pointer sleNode = entryCache(ltDIR_NODE, uNodeCur ? Ledger::getDirNodeIndex(uRootIndex, uNodeCur) : uRootIndex); - assert(sleNode); - if (!sleNode) { cLog(lsWARNING) << "dirDelete: no such node"; + assert(false); return tefBAD_LEDGER; } From f0ee9e6cbf94d4a98ccc0ff59e062eb124e283a0 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Thu, 20 Dec 2012 12:38:29 -0800 Subject: [PATCH 068/525] New build system for SJCL. --- grunt.js | 41 +++++++++++++++++++++++++++++++++++++++++ src/js/amount.js | 4 ++-- 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 grunt.js diff --git a/grunt.js b/grunt.js new file mode 100644 index 000000000..b96db799f --- /dev/null +++ b/grunt.js @@ -0,0 +1,41 @@ +module.exports = function(grunt) { + grunt.initConfig({ + pkg: ' - v<%= pkg.version %> - ' + + '<%= grunt.template.today("yyyy-mm-dd") %>\n' + + '<%= pkg.homepage ? "* " + pkg.homepage + "\n" : "" %>' + + '* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' + + ' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */' + }, + concat: { + sjcl: { + src: [ + "src/js/sjcl/core/sjcl.js", +// "src/js/sjcl/core/aes.js", + "src/js/sjcl/core/bitArray.js", + "src/js/sjcl/core/codecString.js", + "src/js/sjcl/core/codecHex.js", + "src/js/sjcl/core/codecBase64.js", + "src/js/sjcl/core/codecBytes.js", + "src/js/sjcl/core/sha256.js", + "src/js/sjcl/core/sha1.js", +// "src/js/sjcl/core/ccm.js", +// "src/js/sjcl/core/cbc.js", +// "src/js/sjcl/core/ocb2.js", +// "src/js/sjcl/core/hmac.js", +// "src/js/sjcl/core/pbkdf2.js", + "src/js/sjcl/core/random.js", + "src/js/sjcl/core/convenience.js", + "src/js/sjcl/core/bn.js", + "src/js/sjcl/core/ecc.js", + "src/js/sjcl/core/srp.js" + ], + dest: 'build/sjcl.js' + } + }, + }); + + // Tasks + grunt.registerTask('default', 'concat:sjcl'); +}; diff --git a/src/js/amount.js b/src/js/amount.js index cdd3c322c..489fbc240 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -1,8 +1,8 @@ // Represent Ripple amounts and currencies. // - Numbers in hex are big-endian. -var sjcl = require('./sjcl/core.js'); -var bn = require('./sjcl/core.js').bn; +var sjcl = require('../../build/sjcl'); +var bn = sjcl.bn; var utils = require('./utils.js'); var jsbn = require('./jsbn.js'); From f00a82a554304a9fffe6b8267c7c45b7b7a39bc0 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Thu, 20 Dec 2012 12:45:53 -0800 Subject: [PATCH 069/525] The command "grunt" now builds everything. Switched webpack build over to grunt. --- grunt.js | 20 +++++++++++++++- package.json | 2 +- webpack.js | 68 ---------------------------------------------------- 3 files changed, 20 insertions(+), 70 deletions(-) delete mode 100644 webpack.js diff --git a/grunt.js b/grunt.js index b96db799f..273215e08 100644 --- a/grunt.js +++ b/grunt.js @@ -1,4 +1,6 @@ module.exports = function(grunt) { + grunt.loadNpmTasks('grunt-webpack'); + grunt.initConfig({ pkg: '.js" + }, + lib_debug: { + src: "src/js/index.js", + dest: "build/ripple-<%= pkg.version %>.js", + debug: true + }, + lib_min: { + src: "src/js/index.js", + dest: "build/ripple-<%= pkg.version %>.js", + minimize: true + } + } }); // Tasks - grunt.registerTask('default', 'concat:sjcl'); + grunt.registerTask('default', 'concat:sjcl webpack'); }; diff --git a/package.json b/package.json index 2ec474aab..00f345360 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ }, "devDependencies": { "buster": "~0.6.2", - "webpack": "~0.7.17" + "grunt-webpack": "~0.4.0" }, "scripts": { "test": "buster test" diff --git a/webpack.js b/webpack.js deleted file mode 100644 index 6f50aaf5d..000000000 --- a/webpack.js +++ /dev/null @@ -1,68 +0,0 @@ -var pkg = require('./package.json'); -var webpack = require("webpack"); -var async = require("async"); -var extend = require("extend"); - -var cfg = { - // General settings - baseName: pkg.name, - programPath: __dirname + "/src/js/index.js", - - // CLI-configurable options - watch: false, - outputDir: __dirname + "/build" -}; -for (var i = 0, l = process.argv.length; i < l; i++) { - var arg = process.argv[i]; - if (arg === '-w' || arg === '--watch') { - cfg.watch = true; - } else if (arg === '-o') { - cfg.outputDir = process.argv[++i]; - } -}; - -var builds = [{ - filename: 'ripple-'+pkg.version+'.js', -},{ - filename: 'ripple-'+pkg.version+'-debug.js', - debug: true -},{ - filename: 'ripple-'+pkg.version+'-min.js', - minimize: true -}]; - -var defaultOpts = { - // [sic] Yes, this is the spelling upstream. - libary: 'ripple', - // However, it's fixed in webpack 0.8, so we include the correct spelling too: - library: 'ripple', - watch: cfg.watch -}; - -function build(opts) { - var opts = extend({}, defaultOpts, opts); - opts.output = cfg.outputDir + "/"+opts.filename; - return function (callback) { - var filename = opts.filename; - webpack(cfg.programPath, opts, function (err, result) { - console.log(' '+filename, result.hash, '['+result.modulesCount+']'); - if ("function" === typeof callback) { - callback(err); - } - }); - } -} - -if (!cfg.watch) { - console.log('Compiling Ripple JavaScript...'); - async.series(builds.map(build), function (err) { - if (err) { - console.error(err); - } - }); -} else { - console.log('Watching files for changes...'); - builds.map(build).forEach(function (build) { - build(); - }); -} From a9149e71e872e32cbe102454ba5890d920384bb3 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Sun, 23 Dec 2012 00:48:41 +0100 Subject: [PATCH 070/525] Add watch task (automatic recompilation). --- grunt.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/grunt.js b/grunt.js index 273215e08..4b9fd1294 100644 --- a/grunt.js +++ b/grunt.js @@ -51,6 +51,16 @@ module.exports = function(grunt) { dest: "build/ripple-<%= pkg.version %>.js", minimize: true } + }, + watch: { + sjcl: { + files: [''], + tasks: 'concat:sjcl' + }, + lib: { + files: 'src/js/*.js', + tasks: 'webpack' + } } }); From a201a91ab0cc8e7f5d11b4668fd9b7f5248f8919 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 22 Dec 2012 16:25:42 -0800 Subject: [PATCH 071/525] Make RPC submit more robust. --- src/cpp/ripple/RPCHandler.cpp | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index c7a999a25..000ae1235 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -868,6 +868,10 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) RippleAddress naSeed; RippleAddress raSrcAddressID; + cLog(lsDEBUG) + << boost::str(boost::format("doSubmit: %s") + % jvRequest); + if (!jvRequest.isMember("secret") || !jvRequest.isMember("tx_json")) { return rpcError(rpcINVALID_PARAMS); @@ -875,6 +879,10 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) Json::Value txJSON = jvRequest["tx_json"]; + if (!txJSON.isObject()) + { + return rpcError(rpcINVALID_PARAMS); + } if (!naSeed.setSeedGeneric(jvRequest["secret"].asString())) { return rpcError(rpcBAD_SEED); @@ -887,18 +895,14 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) { return rpcError(rpcSRC_ACT_MALFORMED); } + if (!txJSON.isMember("TransactionType")) + { + return rpcError(rpcINVALID_PARAMS); + } AccountState::pointer asSrc = mNetOps->getAccountState(mNetOps->getCurrentLedger(), raSrcAddressID); if (!asSrc) return rpcError(rpcSRC_ACT_MALFORMED); - if (!txJSON.isMember("Fee") - && ("OfferCreate" == txJSON["TransactionType"].asString() - || "OfferCancel" == txJSON["TransactionType"].asString() - || "TrustSet" == txJSON["TransactionType"].asString())) - { - txJSON["Fee"] = (int) theConfig.FEE_DEFAULT; - } - if ("Payment" == txJSON["TransactionType"].asString()) { @@ -976,8 +980,16 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) } } - if (!txJSON.isMember("Sequence")) txJSON["Sequence"]=asSrc->getSeq(); - if (!txJSON.isMember("Flags")) txJSON["Flags"]=0; + if (!txJSON.isMember("Fee") + && ("OfferCreate" == txJSON["TransactionType"].asString() + || "OfferCancel" == txJSON["TransactionType"].asString() + || "TrustSet" == txJSON["TransactionType"].asString())) + { + txJSON["Fee"] = (int) theConfig.FEE_DEFAULT; + } + + if (!txJSON.isMember("Sequence")) txJSON["Sequence"] = asSrc->getSeq(); + if (!txJSON.isMember("Flags")) txJSON["Flags"] = 0; Ledger::pointer lpCurrent = mNetOps->getCurrentLedger(); SLE::pointer sleAccountRoot = mNetOps->getSLE(lpCurrent, Ledger::getAccountRootIndex(raSrcAddressID.getAccountID())); @@ -991,7 +1003,6 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) bool bHaveAuthKey = false; RippleAddress naAuthorizedPublic; - RippleAddress naSecret = RippleAddress::createSeedGeneric(jvRequest["secret"].asString()); RippleAddress naMasterGenerator = RippleAddress::createGeneratorPublic(naSecret); From 3e3d0c295b427c8f3b9c0d236c296aff2b70098a Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 22 Dec 2012 16:51:46 -0800 Subject: [PATCH 072/525] More robustness fixes for RPC. --- src/cpp/ripple/RPCHandler.cpp | 41 ++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 000ae1235..280ad703e 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -292,6 +292,9 @@ Json::Value RPCHandler::doConnect(Json::Value jvRequest) if (theConfig.RUN_STANDALONE) return "cannot connect in standalone mode"; + if (!jvRequest.isMember("ip")) + return rpcError(rpcINVALID_PARAMS); + std::string strIp = jvRequest["ip"].asString(); int iPort = jvRequest.isMember("port") ? jvRequest["port"].asInt() : -1; @@ -306,6 +309,9 @@ Json::Value RPCHandler::doConnect(Json::Value jvRequest) // } Json::Value RPCHandler::doDataDelete(Json::Value jvRequest) { + if (!jvRequest.isMember("key")) + return rpcError(rpcINVALID_PARAMS); + std::string strKey = jvRequest["key"].asString(); Json::Value ret = Json::Value(Json::objectValue); @@ -327,6 +333,9 @@ Json::Value RPCHandler::doDataDelete(Json::Value jvRequest) // } Json::Value RPCHandler::doDataFetch(Json::Value jvRequest) { + if (!jvRequest.isMember("key")) + return rpcError(rpcINVALID_PARAMS); + std::string strKey = jvRequest["key"].asString(); std::string strValue; @@ -345,6 +354,10 @@ Json::Value RPCHandler::doDataFetch(Json::Value jvRequest) // } Json::Value RPCHandler::doDataStore(Json::Value jvRequest) { + if (!jvRequest.isMember("key") + || !jvRequest.isMember("value")) + return rpcError(rpcINVALID_PARAMS); + std::string strKey = jvRequest["key"].asString(); std::string strValue = jvRequest["value"].asString(); @@ -400,6 +413,9 @@ Json::Value RPCHandler::doNicknameInfo(Json::Value params) // XXX This would be better if it too the ledger. Json::Value RPCHandler::doOwnerInfo(Json::Value jvRequest) { + if (!jvRequest.isMember("ident")) + return rpcError(rpcINVALID_PARAMS); + std::string strIdent = jvRequest["ident"].asString(); bool bIndex; int iIndex = jvRequest.isMember("account_index") ? jvRequest["account_index"].asUInt() : 0; @@ -535,6 +551,9 @@ Json::Value RPCHandler::doAccountLines(Json::Value jvRequest) if (!lpLedger) return jvResult; + if (!jvRequest.isMember("account")) + return rpcError(rpcINVALID_PARAMS); + std::string strIdent = jvRequest["account"].asString(); bool bIndex = jvRequest.isMember("account_index"); int iIndex = bIndex ? jvRequest["account_index"].asUInt() : 0; @@ -610,6 +629,9 @@ Json::Value RPCHandler::doAccountOffers(Json::Value jvRequest) if (!lpLedger) return jvResult; + if (!jvRequest.isMember("account")) + return rpcError(rpcINVALID_PARAMS); + std::string strIdent = jvRequest["account"].asString(); bool bIndex = jvRequest.isMember("account_index"); int iIndex = bIndex ? jvRequest["account_index"].asUInt() : 0; @@ -671,8 +693,11 @@ Json::Value RPCHandler::doRandom(Json::Value jvRequest) try { getRand(uRandom.begin(), uRandom.size()); + Json::Value jvResult; + jvResult["random"] = uRandom.ToString(); + return jvResult; } catch (...) @@ -1147,6 +1172,9 @@ Json::Value RPCHandler::doServerInfo(Json::Value) // } Json::Value RPCHandler::doTxHistory(Json::Value jvRequest) { + if (!jvRequest.isMember("start")) + return rpcError(rpcINVALID_PARAMS); + unsigned int startIndex = jvRequest["start"].asUInt(); Json::Value obj; Json::Value txs; @@ -1178,6 +1206,9 @@ Json::Value RPCHandler::doTxHistory(Json::Value jvRequest) // } Json::Value RPCHandler::doTx(Json::Value jvRequest) { + if (!jvRequest.isMember("transaction")) + return rpcError(rpcINVALID_PARAMS); + std::string strTransaction = jvRequest["transaction"].asString(); if (Transaction::isHexTxID(strTransaction)) @@ -1198,6 +1229,7 @@ Json::Value RPCHandler::doTx(Json::Value jvRequest) Json::Value RPCHandler::doLedgerClosed(Json::Value) { Json::Value jvResult; + uint256 uLedger = mNetOps->getClosedLedgerHash(); jvResult["ledger_index"] = mNetOps->getLedgerID(uLedger); @@ -1535,6 +1567,10 @@ Json::Value RPCHandler::doWalletSeed(Json::Value jvRequest) // } Json::Value RPCHandler::doLogin(Json::Value jvRequest) { + if (!jvRequest.isMember("username") + || !jvRequest.isMember("password")) + return rpcError(rpcINVALID_PARAMS); + if (jvRequest["username"].asString() == theConfig.RPC_USER && jvRequest["password"].asString() == theConfig.RPC_PASSWORD) { //mRole=ADMIN; @@ -1640,7 +1676,10 @@ Json::Value RPCHandler::doUnlAdd(Json::Value jvRequest) // } Json::Value RPCHandler::doUnlDelete(Json::Value jvRequest) { - std::string strNode = jvRequest[0u].asString(); + if (!jvRequest.isMember("node")) + return rpcError(rpcINVALID_PARAMS); + + std::string strNode = jvRequest["node"].asString(); RippleAddress raNodePublic; From f95ed4c3f502d189efa470b86f3328188a5e370d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 23 Dec 2012 15:09:10 -0800 Subject: [PATCH 073/525] Properly handle tec return codes. This won't compile until isTecClaim exists. --- src/cpp/ripple/TransactionEngine.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index e4cadfb99..825ddabb3 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -110,13 +110,31 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa cLog(lsINFO) << "applyTransaction: terResult=" << strToken << " : " << terResult << " : " << strHuman; - if (isTepPartial(terResult) && isSetBit(params, tapRETRY)) - { - // Partial result and allowed to retry, reclassify as a retry. - terResult = terRETRY; + bool applyTransaction = false; + + if (terResult == tesSUCCESS) + applyTransaction = true; + else if (isTepPartial(terResult) && !isSetBit(params, tapRETRY)) + applyTransaction = true; + else if (isTecClaim(terResult) && !isSetBit(params, tapRETRY)) + { // only claim the transaction fee + mNodes.clear(); + + SLE::pointer txnAcct = entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(txn.getSourceAccount())); + STAmount fee = txn.getTransactionFee(); + STAmount balance = txnAcct->getFieldAmount(sfBalance); + + if (balance < fee) + terResult = terINSUF_FEE_B; + else + { + txnAcct->setFieldAmount(sfBalance, balance - fee); + applyTransaction = true; + entryModify(txnAcct); + } } - if ((tesSUCCESS == terResult) || isTepPartial(terResult)) + if (applyTransaction) { // Transaction succeeded fully or (retries are not allowed and the transaction succeeded partially). Serializer m; From f89eda7efd4f2cc809dc2f05fcfca44ec3ce46c8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 23 Dec 2012 15:15:21 -0800 Subject: [PATCH 074/525] Fix a bug. We mishandle the sequence. --- src/cpp/ripple/TransactionEngine.cpp | 35 +++++++++++++++++++++------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index 825ddabb3..1d9b33cc7 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -121,16 +121,35 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa mNodes.clear(); SLE::pointer txnAcct = entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(txn.getSourceAccount())); - STAmount fee = txn.getTransactionFee(); - STAmount balance = txnAcct->getFieldAmount(sfBalance); - - if (balance < fee) - terResult = terINSUF_FEE_B; + if (!txnAcct) + terResult = terNO_ACCOUNT; else { - txnAcct->setFieldAmount(sfBalance, balance - fee); - applyTransaction = true; - entryModify(txnAcct); + uint32 t_seq = txn.getSequence(); + uint32 a_seq = txnAcct->getFieldU32(sfSequence); + + if (t_seq != a_seq) + { + if (a_seq < t_seq) + terResult = terPRE_SEQ; + else + terResult = tefPAST_SEQ; + } + else + { + STAmount fee = txn.getTransactionFee(); + STAmount balance = txnAcct->getFieldAmount(sfBalance); + + if (balance < fee) + terResult = terINSUF_FEE_B; + else + { + txnAcct->setFieldAmount(sfBalance, balance - fee); + txnAcct->setFieldU32(sfSequence, t_seq + 1); + applyTransaction = true; + entryModify(txnAcct); + } + } } } From 194053c87e285b099c0f6a771589a5c47a442aea Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 23 Dec 2012 15:52:59 -0800 Subject: [PATCH 075/525] Add and move to new tecCLAIM result codes. --- src/cpp/ripple/LedgerEntrySet.cpp | 2 +- src/cpp/ripple/OfferCreateTransactor.cpp | 6 +-- src/cpp/ripple/PaymentTransactor.cpp | 6 +-- src/cpp/ripple/RippleCalc.cpp | 21 +++++----- src/cpp/ripple/TransactionErr.cpp | 29 ++++++++----- src/cpp/ripple/TransactionErr.h | 52 +++++++++++++++--------- src/cpp/ripple/TrustSetTransactor.cpp | 8 ++-- src/cpp/ripple/WalletAddTransactor.cpp | 6 ++- test/offer-test.js | 2 +- test/send-test.js | 10 ++--- 10 files changed, 82 insertions(+), 60 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 7fe09927c..0060479b9 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -568,7 +568,7 @@ TER LedgerEntrySet::dirAdd( // Add to new node. else if (!++uNodeDir) { - return terDIR_FULL; + return tecDIR_FULL; } else { diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index e3dbe02ef..23741e8e3 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -324,7 +324,7 @@ TER OfferCreateTransactor::doApply() { cLog(lsWARNING) << "doOfferCreate: delay: Offers must be at least partially funded."; - terResult = terUNFUNDED; + terResult = tecUNFUNDED; } if (tesSUCCESS == terResult && !saTakerPays.isNative()) @@ -398,13 +398,13 @@ TER OfferCreateTransactor::doApply() if (isSetBit(mParams, tapOPEN_LEDGER)) // Ledger is not final, can vote no. { // Hope for more reserve to come in or more offers to consume. - terResult = terINSUF_RESERVE_OFFER; + terResult = tecINSUF_RESERVE_OFFER; } else if (!saOfferPaid && !saOfferGot) { // Ledger is final, insufficent reserve to create offer, processed nothing. - terResult = tepINSUF_RESERVE_OFFER; + terResult = tecINSUF_RESERVE_OFFER; } else { diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index f87d8f80e..b74e6d16d 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -83,7 +83,7 @@ TER PaymentTransactor::doApply() cLog(lsINFO) << "doPayment: Delay transaction: Destination account does not exist."; // Another transaction could create the account and then this transaction would succeed. - return terNO_DST; + return tecNO_DST; } else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, can vote no. && saDstAmount.getNValue() < mEngine->getLedger()->getReserve(0)) // Reserve is not scaled by load. @@ -91,7 +91,7 @@ TER PaymentTransactor::doApply() cLog(lsINFO) << "doPayment: Delay transaction: Destination account does not exist. Insufficent payment to create account."; // Another transaction could create the account and then this transaction would succeed. - return terNO_DST_INSUF_XRP; + return tecNO_DST_INSUF_XRP; } // Create the account. @@ -152,7 +152,7 @@ TER PaymentTransactor::doApply() cLog(lsINFO) << boost::str(boost::format("doPayment: Delay transaction: Insufficient funds: %s / %s (%d)") % saSrcXRPBalance.getText() % (saDstAmount + uReserve).getText() % uReserve); - terResult = terUNFUNDED; + terResult = tecUNFUNDED; } else { diff --git a/src/cpp/ripple/RippleCalc.cpp b/src/cpp/ripple/RippleCalc.cpp index 6b2fa117d..23e210a5d 100644 --- a/src/cpp/ripple/RippleCalc.cpp +++ b/src/cpp/ripple/RippleCalc.cpp @@ -114,7 +114,7 @@ TER PathState::pushImply( // Append a node and insert before it any implied nodes. // Offers may go back to back. -// <-- terResult: tesSUCCESS, temBAD_PATH, terNO_LINE, tepPATH_DRY +// <-- terResult: tesSUCCESS, temBAD_PATH, terNO_LINE, tecPATH_DRY TER PathState::pushNode( const int iType, const uint160& uAccountID, @@ -235,7 +235,7 @@ TER PathState::pushNode( if (!saOwed.isPositive() && *saOwed.negate() >= lesEntries.rippleLimit(pnCur.uAccountID, pnBck.uAccountID, pnCur.uCurrencyID)) { - terResult = tepPATH_DRY; + terResult = tecPATH_DRY; } } } @@ -1148,7 +1148,7 @@ TER RippleCalc::calcNodeDeliverRev( } if (!saOutAct) - terResult = tepPATH_DRY; + terResult = tecPATH_DRY; return terResult; } @@ -1540,7 +1540,7 @@ void RippleCalc::calcNodeRipple( // Reedems are limited based on IOUs previous has on hand. // Issues are limited based on credit limits and amount owed. // No account balance adjustments as we don't know how much is going to actually be pushed through yet. -// <-- tesSUCCESS or tepPATH_DRY +// <-- tesSUCCESS or tecPATH_DRY TER RippleCalc::calcNodeAccountRev(const unsigned int uNode, PathState& psCur, const bool bMultiQuality) { TER terResult = tesSUCCESS; @@ -1688,7 +1688,7 @@ TER RippleCalc::calcNodeAccountRev(const unsigned int uNode, PathState& psCur, c if (!saCurWantedAct) { // Must have processed something. - terResult = tepPATH_DRY; + terResult = tecPATH_DRY; } } else @@ -1751,7 +1751,7 @@ TER RippleCalc::calcNodeAccountRev(const unsigned int uNode, PathState& psCur, c if (!saCurRedeemAct && !saCurIssueAct) { // Did not make progress. - terResult = tepPATH_DRY; + terResult = tecPATH_DRY; } cLog(lsINFO) << boost::str(boost::format("calcNodeAccountRev: ^|account --> ACCOUNT --> account : saCurRedeemReq=%s saCurIssueReq=%s saPrvOwed=%s saCurRedeemAct=%s saCurIssueAct=%s") @@ -1790,7 +1790,7 @@ TER RippleCalc::calcNodeAccountRev(const unsigned int uNode, PathState& psCur, c if (!saCurDeliverAct) { // Must want something. - terResult = tepPATH_DRY; + terResult = tecPATH_DRY; } cLog(lsINFO) << boost::str(boost::format("calcNodeAccountRev: saCurDeliverReq=%s saCurDeliverAct=%s saPrvOwed=%s") @@ -1870,7 +1870,7 @@ TER RippleCalc::calcNodeAccountRev(const unsigned int uNode, PathState& psCur, c if (!saCurDeliverAct) { // Must want something. - terResult = tepPATH_DRY; + terResult = tecPATH_DRY; } } @@ -2224,7 +2224,7 @@ TER RippleCalc::calcNodeFwd(const unsigned int uNode, PathState& psCur, const bo // Calculate a node and its previous nodes. // From the destination work in reverse towards the source calculating how much must be asked for. // Then work forward, figuring out how much can actually be delivered. -// <-- terResult: tesSUCCESS or tepPATH_DRY +// <-- terResult: tesSUCCESS or tecPATH_DRY // <-> pnNodes: // --> [end]saWanted.mAmount // --> [all]saWanted.mCurrency @@ -2579,8 +2579,7 @@ cLog(lsDEBUG) << boost::str(boost::format("rippleCalc: Summary: %d rate: %s qual else if (!saDstAmountAct) { // No payment at all. - terResult = tepPATH_DRY; - lesActive = lesBase; // Revert to just fees charged. + terResult = tecPATH_DRY; // Revert to just fees charged is built into tec. } else { diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index 3198f0ef7..cbc61cae4 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -8,6 +8,18 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) const char* cpToken; const char* cpHuman; } transResultInfoA[] = { + { tecCLAIM, "tecCLAIM", "Fee claim. Sequence used. No action." }, + { tecDIR_FULL, "tecDIR_FULL", "Can not add entry to full dir." }, + { tecINSUF_RESERVE_LINE, "tecINSUF_RESERVE_LINE", "Insufficent reserve to add trust line." }, + { tecINSUF_RESERVE_OFFER, "tecINSUF_RESERVE_OFFER", "Insufficent reserve to create offer." }, + { tecNO_DST, "tecNO_DST", "Destination does not exist. Send XRP to create it." }, + { tecNO_DST_INSUF_XRP, "tecNO_DST_INSUF_XRP", "Destination does not exist. Too little XRP sent to create it." }, + { tecNO_LINE_INSUF_RESERVE, "tecNO_LINE_INSUF_RESERVE", "No such line. Too little reserve to create it." }, + { tecNO_LINE_REDUNDANT, "tecNO_LINE_REDUNDANT", "Can't set non-existant line to default." }, + { tecPATH_DRY, "tecPATH_DRY", "Path could not send partial amount." }, + { tecUNFUNDED, "tecUNFUNDED", "Source account had insufficient balance for transaction." }, + + { tefFAILURE, "tefFAILURE", "Failed to apply." }, { tefALREADY, "tefALREADY", "The exact transaction was already in this ledger." }, { tefBAD_ADD_AUTH, "tefBAD_ADD_AUTH", "Not authorized to add account." }, { tefBAD_AUTH, "tefBAD_AUTH", "Transaction's public key is not authorized." }, @@ -20,9 +32,11 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { tefGEN_IN_USE, "tefGEN_IN_USE", "Generator already in use." }, { tefPAST_SEQ, "tefPAST_SEQ", "This sequence number has already past" }, + { telLOCAL_ERROR, "telLOCAL_ERROR", "Local failure." }, { telBAD_PATH_COUNT, "telBAD_PATH_COUNT", "Malformed: too many paths." }, { telINSUF_FEE_P, "telINSUF_FEE_P", "Fee insufficient." }, + { temMALFORMED, "temMALFORMED", "Malformed transaction." }, { temBAD_AMOUNT, "temBAD_AMOUNT", "Can only send positive amounts." }, { temBAD_AUTH_MASTER, "temBAD_AUTH_MASTER", "Auth for unclaimed account needs correct master key." }, { temBAD_EXPIRATION, "temBAD_EXPIRATION", "Malformed." }, @@ -44,24 +58,17 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temUNCERTAIN, "temUNCERTAIN", "In process of determining result. Never returned." }, { temUNKNOWN, "temUNKNOWN", "The transactions requires logic not implemented yet." }, - { tepPATH_DRY, "tepPATH_DRY", "Path could not send partial amount." }, - { tepPATH_PARTIAL, "tepPATH_PARTIAL", "Path could not send full amount." }, + { tepPARTIAL, "tepPARTIAL", "Partial success." }, { tepINSUF_RESERVE_OFFER, "tepINSUF_RESERVE_OFFER", "Insufficent reserve to create offer." }, + { tepPATH_DRY, "tepPATH_DRY", "Path could not send partial amount. Obsolete." }, + { tepPATH_PARTIAL, "tepPATH_PARTIAL", "Path could not send full amount." }, - { terDIR_FULL, "terDIR_FULL", "Can not add entry to full dir." }, + { terRETRY, "terRETRY", "Retry transaction." }, { terFUNDS_SPENT, "terFUNDS_SPENT", "Can't set password, password set funds already spent." }, { terINSUF_FEE_B, "terINSUF_FEE_B", "Account balance can't pay fee." }, - { terINSUF_RESERVE_LINE, "terINSUF_RESERVE_LINE", "Insufficent reserve to add trust line." }, - { terINSUF_RESERVE_OFFER, "terINSUF_RESERVE_OFFER", "Insufficent reserve to create offer." }, { terNO_ACCOUNT, "terNO_ACCOUNT", "The source account does not exist." }, - { terNO_DST, "terNO_DST", "Destination does not exist. Send XRP to create it." }, - { terNO_DST_INSUF_XRP, "terNO_DST_INSUF_XRP", "Destination does not exist. Too little XRP sent to create it." }, { terNO_LINE, "terNO_LINE", "No such line." }, - { terNO_LINE_INSUF_RESERVE, "terNO_LINE_INSUF_RESERVE", "No such line. Too little reserve to create it." }, - { terNO_LINE_REDUNDANT, "terNO_LINE_REDUNDANT", "Can't set non-existant line to default." }, { terPRE_SEQ, "terPRE_SEQ", "Missing/inapplicable prior transaction." }, - { terSET_MISSING_DST, "terSET_MISSING_DST", "Can't set password, destination missing." }, - { terUNFUNDED, "terUNFUNDED", "Source account had insufficient balance for transaction." }, { tesSUCCESS, "tesSUCCESS", "The transaction was applied." }, }; diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index e5947aaa7..df3c5e9b8 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -76,21 +76,13 @@ enum TER // aka TransactionEngineResult // - Not forwarded // - Might succeed later // - Hold + // - Makes hole in sequence which jams transactions. terRETRY = -99, - terDIR_FULL, - terFUNDS_SPENT, - terINSUF_FEE_B, - terINSUF_RESERVE_LINE, - terINSUF_RESERVE_OFFER, - terNO_ACCOUNT, - terNO_DST, - terNO_DST_INSUF_XRP, - terNO_LINE, - terNO_LINE_INSUF_RESERVE, - terNO_LINE_REDUNDANT, - terPRE_SEQ, - terSET_MISSING_DST, - terUNFUNDED, + terFUNDS_SPENT, // This is a free transaction, therefore don't burden network. + terINSUF_FEE_B, // Can't pay fee, therefore don't burden network. + terNO_ACCOUNT, // Can't pay fee, therefore don't burden network. + terNO_LINE, // Internal flag. + terPRE_SEQ, // Can't pay fee, no point in forwarding, therefore don't burden network. // 0: S Success (success) // Causes: @@ -100,18 +92,39 @@ enum TER // aka TransactionEngineResult // - Forwarded tesSUCCESS = 0, - // 100 .. P Partial success (SR) (ripple transaction with no good paths, pay to non-existent account) + // 100 .. 119 P Partial success (SR) (ripple transaction with no good paths, pay to non-existent account) // Causes: // - Success, but does not achieve optimal result. // Implications: // - Applied // - Forwarded // Only allowed as a return code of appliedTransaction when !tapRetry. Otherwise, treated as terRETRY. - // CAUTION: The numerical values for these results are part of the binary formats + // + // DO NOT CHANGE THESE NUMBERS: They appear in ledger meta data. tepPARTIAL = 100, - tepPATH_DRY = 101, + tepPATH_DRY = 101, // Obsolete. May exist in ledger. tepPATH_PARTIAL = 102, - tepINSUF_RESERVE_OFFER = 103, + tepINSUF_RESERVE_OFFER = 103, // Obsolete. May exist in ledger. + + // 120 .. C Claim fee only (CO) (no path) + // Causes: + // - Invalid transaction or no effect, but claim fee to use the sequence number. + // Implications: + // - Applied + // - Forwarded + // Only allowed as a return code of appliedTransaction when !tapRetry. Otherwise, treated as terRETRY. + // + // DO NOT CHANGE THESE NUMBERS: They appear in ledger meta data. + tecCLAIM = 120, + tecDIR_FULL = 121, + tecINSUF_RESERVE_LINE = 122, + tecINSUF_RESERVE_OFFER = 123, + tecNO_DST = 124, + tecNO_DST_INSUF_XRP = 125, + tecNO_LINE_INSUF_RESERVE = 126, + tecNO_LINE_REDUNDANT = 127, + tecPATH_DRY = 128, + tecUNFUNDED = 129, }; #define isTelLocal(x) ((x) >= telLOCAL_ERROR && (x) < temMALFORMED) @@ -119,7 +132,8 @@ enum TER // aka TransactionEngineResult #define isTefFailure(x) ((x) >= tefFAILURE && (x) < terRETRY) #define isTerRetry(x) ((x) >= terRETRY && (x) < tesSUCCESS) #define isTepSuccess(x) ((x) >= tesSUCCESS) -#define isTepPartial(x) ((x) >= tepPATH_PARTIAL) +#define isTepPartial(x) ((x) >= tepPATH_PARTIAL && (x) < tecCLAIM) +#define isTecClaim(x) ((x) >= tepCLAIM) bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman); std::string transToken(TER terCode); diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index 143130aff..aff2fa00b 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -53,7 +53,7 @@ TER TrustSetTransactor::doApply() { cLog(lsINFO) << "doTrustSet: Delay transaction: Destination account does not exist."; - return terNO_DST; + return tecNO_DST; } const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); @@ -241,7 +241,7 @@ TER TrustSetTransactor::doApply() cLog(lsINFO) << "doTrustSet: Delay transaction: Insufficent reserve to add trust line."; // Another transaction could provide XRP to the account and then this transaction would succeed. - terResult = terINSUF_RESERVE_LINE; + terResult = tecINSUF_RESERVE_LINE; } else { @@ -257,7 +257,7 @@ TER TrustSetTransactor::doApply() { cLog(lsINFO) << "doTrustSet: Redundant: Setting non-existent ripple line to defaults."; - return terNO_LINE_REDUNDANT; + return tecNO_LINE_REDUNDANT; } else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote no. && saSrcXRPBalance.getNValue() < uReserveCreate) // Reserve is not scaled by load. @@ -265,7 +265,7 @@ TER TrustSetTransactor::doApply() cLog(lsINFO) << "doTrustSet: Delay transaction: Line does not exist. Insufficent reserve to create line."; // Another transaction could create the account and then this transaction would succeed. - terResult = terNO_LINE_INSUF_RESERVE; + terResult = tecNO_LINE_INSUF_RESERVE; } else { diff --git a/src/cpp/ripple/WalletAddTransactor.cpp b/src/cpp/ripple/WalletAddTransactor.cpp index b821abd34..2567d8f1b 100644 --- a/src/cpp/ripple/WalletAddTransactor.cpp +++ b/src/cpp/ripple/WalletAddTransactor.cpp @@ -38,7 +38,7 @@ TER WalletAddTransactor::doApply() % saAmount.getText()) << std::endl; - return terUNFUNDED; + return tecUNFUNDED; } // Deduct initial balance from source account. @@ -55,4 +55,6 @@ TER WalletAddTransactor::doApply() std::cerr << "WalletAdd<" << std::endl; return tesSUCCESS; -} \ No newline at end of file +} + +// vim:ts=4 diff --git a/test/offer-test.js b/test/offer-test.js index 3716fc9c6..ec629c66d 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -481,7 +481,7 @@ buster.testCase("Offer tests", { .offer_create("bob", "50/USD/alice", "200/EUR/carol") .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); - callback(m.result !== 'terUNFUNDED'); + callback(m.result !== 'tecUNFUNDED'); seq = m.tx_json.Sequence; }) diff --git a/test/send-test.js b/test/send-test.js index d64d028d1..c73d9e220 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -80,7 +80,7 @@ buster.testCase("Sending", { // Transaction got an error. // console.log("proposed: %s", JSON.stringify(m)); - buster.assert.equals(m.result, 'terNO_DST_INSUF_XRP'); + buster.assert.equals(m.result, 'tecNO_DST_INSUF_XRP'); got_proposed = true; @@ -100,15 +100,15 @@ buster.testCase("Sending", { .submit(); }, - // Also test transaction becomes lost after terNO_DST. - "credit_limit to non-existent account = terNO_DST" : + // Also test transaction becomes lost after tecNO_DST. + "credit_limit to non-existent account = tecNO_DST" : function (done) { this.remote.transaction() .ripple_line_set("root", "100/USD/alice") .on('proposed', function (m) { //console.log("proposed: %s", JSON.stringify(m)); - buster.assert.equals(m.result, 'terNO_DST'); + buster.assert.equals(m.result, 'tecNO_DST'); done(); }) @@ -431,7 +431,7 @@ buster.testCase("Sending future", { .payment('bob', 'alice', "1/USD/bob") .once('proposed', function (m) { // console.log("proposed: %s", JSON.stringify(m)); - callback(m.result !== 'tepPATH_DRY'); + callback(m.result !== 'tecPATH_DRY'); }) .submit(); }, From adb9561c2c7347466bff1382f5ca9f603db69974 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 23 Dec 2012 16:05:20 -0800 Subject: [PATCH 076/525] Typo. --- src/cpp/ripple/TransactionErr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index df3c5e9b8..40242e291 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -133,7 +133,7 @@ enum TER // aka TransactionEngineResult #define isTerRetry(x) ((x) >= terRETRY && (x) < tesSUCCESS) #define isTepSuccess(x) ((x) >= tesSUCCESS) #define isTepPartial(x) ((x) >= tepPATH_PARTIAL && (x) < tecCLAIM) -#define isTecClaim(x) ((x) >= tepCLAIM) +#define isTecClaim(x) ((x) >= tecCLAIM) bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman); std::string transToken(TER terCode); From 2c535940ac5dadd41fcecd9c893abebe2224ebb4 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 23 Dec 2012 17:42:04 -0800 Subject: [PATCH 077/525] Make the transaction engine report whether it added the transaction. --- src/cpp/ripple/LedgerConsensus.cpp | 33 ++++++++++++++++------------ src/cpp/ripple/LedgerMaster.cpp | 9 +++++--- src/cpp/ripple/TransactionEngine.cpp | 17 +++++++------- src/cpp/ripple/TransactionEngine.h | 2 +- 4 files changed, 34 insertions(+), 27 deletions(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 7953a1146..ee9c02478 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1090,14 +1090,15 @@ void LedgerConsensus::playbackProposals() void LedgerConsensus::applyTransaction(TransactionEngine& engine, SerializedTransaction::ref txn, Ledger::ref ledger, CanonicalTXSet& failedTransactions, bool openLedger) -{ +{ // FIXME: Needs to handle partial success TransactionEngineParams parms = openLedger ? tapOPEN_LEDGER : tapNONE; #ifndef TRUST_NETWORK try { #endif - TER result = engine.applyTransaction(*txn, parms); - if (isTerRetry(result)) + bool didApply; + TER result = engine.applyTransaction(*txn, parms, didApply); + if (!didApply && !isTefFailure(result) && !isTemMalformed(result)) { cLog(lsINFO) << " retry"; assert(!ledger->hasTransaction(txn->getTransactionID())); @@ -1108,12 +1109,6 @@ void LedgerConsensus::applyTransaction(TransactionEngine& engine, SerializedTran cLog(lsTRACE) << " success"; assert(ledger->hasTransaction(txn->getTransactionID())); } - else if (isTemMalformed(result) || isTefFailure(result)) - { - cLog(lsINFO) << " hard fail"; - } - else - assert(false); #ifndef TRUST_NETWORK } catch (...) @@ -1160,14 +1155,24 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger { try { - TER result = engine.applyTransaction(*it->second, parms); - if (result <= 0) - { - if (result == 0) ++successes; + bool didApply; + TER result = engine.applyTransaction(*it->second, parms, didApply); + if (isTelLocal(result)) + { // should never happen + assert(false); + it = failedTransactions.erase(it); + } + else if (didApply) + { // transaction was applied, remove from set + ++successes; + it = failedTransactions.erase(it); + } + else if (isTefFailure(result) || isTemMalformed(result)) + { // transaction cannot apply. tef is expected, tem should never happen it = failedTransactions.erase(it); } else - { + { // try again ++it; } } diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 00a60898f..53041814f 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -91,8 +91,9 @@ Ledger::pointer LedgerMaster::closeLedger(bool recover) { try { - TER result = mEngine.applyTransaction(*it->second, tapOPEN_LEDGER); - if (isTepSuccess(result)) + bool didApply; + mEngine.applyTransaction(*it->second, tapOPEN_LEDGER, didApply); + if (didApply) ++recovers; } catch (...) @@ -112,7 +113,9 @@ Ledger::pointer LedgerMaster::closeLedger(bool recover) TER LedgerMaster::doTransaction(const SerializedTransaction& txn, TransactionEngineParams params) { - TER result = mEngine.applyTransaction(txn, params); + bool didApply; + TER result = mEngine.applyTransaction(txn, params, didApply); + // CHECKME: Should we call this even on gross failures? theApp->getOPs().pubProposedTransaction(mEngine.getLedger(), txn, result); return result; } diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index 1d9b33cc7..cd6b1bd6a 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -67,9 +67,11 @@ void TransactionEngine::txnWrite() } } -TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, TransactionEngineParams params) +TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, TransactionEngineParams params, + bool& didApply) { cLog(lsTRACE) << "applyTransaction>"; + didApply = false; assert(mLedger); mNodes.init(mLedger, txn.getTransactionID(), mLedger->getLedgerSeq()); @@ -110,12 +112,10 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa cLog(lsINFO) << "applyTransaction: terResult=" << strToken << " : " << terResult << " : " << strHuman; - bool applyTransaction = false; - if (terResult == tesSUCCESS) - applyTransaction = true; + didApply = true; else if (isTepPartial(terResult) && !isSetBit(params, tapRETRY)) - applyTransaction = true; + didApply = true; else if (isTecClaim(terResult) && !isSetBit(params, tapRETRY)) { // only claim the transaction fee mNodes.clear(); @@ -146,14 +146,14 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa { txnAcct->setFieldAmount(sfBalance, balance - fee); txnAcct->setFieldU32(sfSequence, t_seq + 1); - applyTransaction = true; + didApply = true; entryModify(txnAcct); } } } } - if (applyTransaction) + if (didApply) { // Transaction succeeded fully or (retries are not allowed and the transaction succeeded partially). Serializer m; @@ -183,8 +183,7 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa mTxnAccount.reset(); mNodes.clear(); - if (!isSetBit(params, tapOPEN_LEDGER) - && (isTemMalformed(terResult) || isTefFailure(terResult))) + if (!isSetBit(params, tapOPEN_LEDGER) && isTemMalformed(terResult)) { // XXX Malformed or failed transaction in closed ledger must bow out. } diff --git a/src/cpp/ripple/TransactionEngine.h b/src/cpp/ripple/TransactionEngine.h index 0139c4291..67a53447b 100644 --- a/src/cpp/ripple/TransactionEngine.h +++ b/src/cpp/ripple/TransactionEngine.h @@ -78,7 +78,7 @@ public: void entryDelete(SLE::ref sleEntry) { mNodes.entryDelete(sleEntry); } void entryModify(SLE::ref sleEntry) { mNodes.entryModify(sleEntry); } - TER applyTransaction(const SerializedTransaction&, TransactionEngineParams); + TER applyTransaction(const SerializedTransaction&, TransactionEngineParams, bool& didApply); }; inline TransactionEngineParams operator|(const TransactionEngineParams& l1, const TransactionEngineParams& l2) From 9689f94f5aa5c321b69ae299a87f3ae1c93cf2fe Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 23 Dec 2012 17:52:34 -0800 Subject: [PATCH 078/525] Cleanups. --- src/cpp/ripple/LedgerConsensus.cpp | 2 +- src/cpp/ripple/TransactionEngine.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index ee9c02478..04e37d2c8 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1104,7 +1104,7 @@ void LedgerConsensus::applyTransaction(TransactionEngine& engine, SerializedTran assert(!ledger->hasTransaction(txn->getTransactionID())); failedTransactions.push_back(txn); } - else if (isTepSuccess(result)) // FIXME: Need to do partial success + else if (didApply) // FIXME: Need to do partial success { cLog(lsTRACE) << " success"; assert(ledger->hasTransaction(txn->getTransactionID())); diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index cd6b1bd6a..1a7c40f85 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -118,6 +118,7 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa didApply = true; else if (isTecClaim(terResult) && !isSetBit(params, tapRETRY)) { // only claim the transaction fee + cLog(lsINFO) << "Reprocessing to only claim fee"; mNodes.clear(); SLE::pointer txnAcct = entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(txn.getSourceAccount())); @@ -152,6 +153,7 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa } } } + else cLog(lsINFO) << "Not applying transaction"; if (didApply) { From 6bd2839c62072f3e279f1a1a3c3d8b8985f5c227 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 23 Dec 2012 18:14:51 -0800 Subject: [PATCH 079/525] Fix PaymentTransactor for new result codes. --- src/cpp/ripple/PaymentTransactor.cpp | 3 +-- test/send-test.js | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index b74e6d16d..d9c837681 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -85,8 +85,7 @@ TER PaymentTransactor::doApply() // Another transaction could create the account and then this transaction would succeed. return tecNO_DST; } - else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, can vote no. - && saDstAmount.getNValue() < mEngine->getLedger()->getReserve(0)) // Reserve is not scaled by load. + else if (saDstAmount.getNValue() < mEngine->getLedger()->getReserve(0)) // Reserve is not scaled by load. { cLog(lsINFO) << "doPayment: Delay transaction: Destination account does not exist. Insufficent payment to create account."; diff --git a/test/send-test.js b/test/send-test.js index c73d9e220..547a59a41 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -43,7 +43,7 @@ buster.testCase("Sending", { 'setUp' : testutils.build_setup(), // 'tearDown' : testutils.build_teardown(), - "send XRP to non-existent account with insufficent fee" : // => to run only that. + "send XRP to non-existent account with insufficent fee" : function (done) { var self = this; var ledgers = 20; @@ -87,9 +87,9 @@ buster.testCase("Sending", { self.remote.ledger_accept(); // Move it along. }) .on('final', function (m) { - // console.log("final: %s", JSON.stringify(m)); + // console.log("final: %s", JSON.stringify(m, undefined, 2)); - buster.assert(false, "Should not have got a final."); + buster.assert.equals(m.metadata.TransactionResult, 'tecNO_DST_INSUF_XRP'); done(); }) .on('error', function(m) { From f7ca067db34d7f353691bcc0650ca1ca15740b98 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 23 Dec 2012 18:43:11 -0800 Subject: [PATCH 080/525] Just charge fee when unable to meet reserve. --- src/cpp/ripple/PaymentTransactor.cpp | 3 +-- src/cpp/ripple/Transactor.cpp | 2 +- src/cpp/ripple/TrustSetTransactor.cpp | 4 +--- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index d9c837681..c4aba2871 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -143,8 +143,7 @@ TER PaymentTransactor::doApply() const uint64 uReserve = mEngine->getLedger()->getReserve(uOwnerCount); // Make sure have enough reserve to send. - if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote. - && saSrcXRPBalance < saDstAmount + uReserve) // Reserve is not scaled by fee. + if (saSrcXRPBalance < saDstAmount + uReserve) // Reserve is not scaled by fee. { // Vote no. However, transaction might succeed, if applied in a different order. cLog(lsINFO) << ""; diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index 01861525f..7b0091a3a 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -57,7 +57,7 @@ TER Transactor::payFee() return telINSUF_FEE_P; } - if( !saPaid ) return tesSUCCESS; + if (!saPaid) return tesSUCCESS; // Deduct the fee, so it's not available during the transaction. // Will only write the account back, if the transaction succeeds. diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index aff2fa00b..a3239f23d 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -235,7 +235,6 @@ TER TrustSetTransactor::doApply() cLog(lsINFO) << "doTrustSet: Deleting ripple line"; } else if (bReserveIncrease - && isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote no. && saSrcXRPBalance.getNValue() < uReserveCreate) // Reserve is not scaled by load. { cLog(lsINFO) << "doTrustSet: Delay transaction: Insufficent reserve to add trust line."; @@ -259,8 +258,7 @@ TER TrustSetTransactor::doApply() return tecNO_LINE_REDUNDANT; } - else if (isSetBit(mParams, tapOPEN_LEDGER) // Ledger is not final, we can vote no. - && saSrcXRPBalance.getNValue() < uReserveCreate) // Reserve is not scaled by load. + else if (saSrcXRPBalance.getNValue() < uReserveCreate) // Reserve is not scaled by load. { cLog(lsINFO) << "doTrustSet: Delay transaction: Line does not exist. Insufficent reserve to create line."; From ff2ccd05178203817061733f8f046f5c5cc97b0a Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 24 Dec 2012 13:18:10 -0800 Subject: [PATCH 081/525] Remove references to redstem.com from examples. --- rippled-example.cfg | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 10aaf08db..3e6ba5bc0 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -17,7 +17,6 @@ # # [validators_site]: # Specifies where to find validators.txt for UNL boostrapping and RPC command unl_network. -# During alpha testing, this defaults to: redstem.com # # Example: ripple.com # @@ -47,7 +46,7 @@ # domain in the following order: ripple.DOMAIN, www.DOMAIN, DOMAIN # # Examples: -# redstem.com +# ripple.com # n9KorY8QtTdRx7TVDpwnG9NvyxsDwHUKUEeDLY3AkiGncVaSXZi5 # n9MqiExBcoG19UXwoLjBJnhsxEhAZMuWwJDRdkyDz1EkEkwzQTNt John Doe # From f585a37eadce4a489cf0e1b9aba03a5a76f18f48 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 24 Dec 2012 13:59:38 -0800 Subject: [PATCH 082/525] Fix, I hope, the websocket connection leak. --- src/cpp/ripple/WSConnection.h | 19 ++++++++++++++----- src/cpp/ripple/WSDoor.cpp | 1 + 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/WSConnection.h b/src/cpp/ripple/WSConnection.h index 7dcb9774b..e104e2dfc 100644 --- a/src/cpp/ripple/WSConnection.h +++ b/src/cpp/ripple/WSConnection.h @@ -4,11 +4,16 @@ #include "../json/value.h" +#include + #include "WSDoor.h" #include "Application.h" #include "Log.h" #include "NetworkOPs.h" #include "CallRPC.h" +#include "InstanceCounter.h" + +DEFINE_INSTANCE(WebSocketConnection); template class WSServerHandler; @@ -17,17 +22,19 @@ class WSServerHandler; // - Subscriptions // template -class WSConnection : public InfoSub +class WSConnection : public InfoSub, public IS_INSTANCE(WebSocketConnection) { public: - typedef typename endpoint_type::handler::connection_ptr connection_ptr; + typedef typename endpoint_type::connection_type connection; + typedef typename boost::shared_ptr connection_ptr; + typedef typename boost::weak_ptr weak_connection_ptr; typedef typename endpoint_type::handler::message_ptr message_ptr; protected: typedef void (WSConnection::*doFuncPtr)(Json::Value& jvResult, Json::Value &jvRequest); WSServerHandler* mHandler; - connection_ptr mConnection; + weak_connection_ptr mConnection; NetworkOPs& mNetwork; public: @@ -35,7 +42,7 @@ public: // : mHandler((WSServerHandler*)(NULL)), // mConnection(connection_ptr()) { ; } - WSConnection(WSServerHandler* wshpHandler, connection_ptr cpConnection) + WSConnection(WSServerHandler* wshpHandler, const connection_ptr& cpConnection) : mHandler(wshpHandler), mConnection(cpConnection), mNetwork(theApp->getOPs()) { ; } virtual ~WSConnection() @@ -51,7 +58,9 @@ public: // Implement overridden functions from base class: void send(const Json::Value& jvObj) { - mHandler->send(mConnection, jvObj); + connection_ptr ptr = mConnection.lock(); + if (ptr) + mHandler->send(ptr, jvObj); } // Utilities diff --git a/src/cpp/ripple/WSDoor.cpp b/src/cpp/ripple/WSDoor.cpp index d75c30cc5..1075c5996 100644 --- a/src/cpp/ripple/WSDoor.cpp +++ b/src/cpp/ripple/WSDoor.cpp @@ -24,6 +24,7 @@ SETUP_LOG(); #include #include +DECLARE_INSTANCE(WebSocketConnection); // // This is a light weight, untrusted interface for web clients. From 59275c0a2b8ae8e515da7e73b65c46296b192cb8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 24 Dec 2012 14:18:34 -0800 Subject: [PATCH 083/525] Make the "next ledger acquire" message more helpful. --- src/cpp/ripple/LedgerMaster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 53041814f..5038f7c32 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -210,7 +210,7 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) { if (!shouldAcquire(mCurrentLedger->getLedgerSeq(), theConfig.LEDGER_HISTORY, ledger->getLedgerSeq() - 1)) return; - cLog(lsINFO) << "We need the ledger before the ledger we just accepted"; + cLog(lsDEBUG) << "We need the ledger before the ledger we just accepted: " << ledger->getLedgerSeq() - 1; acquireMissingLedger(ledger->getParentHash(), ledger->getLedgerSeq() - 1); } else From 69a434763e96e29d2a1fd90c48da5dc0b5b10f8f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 24 Dec 2012 14:52:36 -0800 Subject: [PATCH 084/525] Fix a bug Arthur reported. --- src/cpp/ripple/JobQueue.cpp | 8 ++++++-- src/cpp/ripple/JobQueue.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index 508398b1f..316ae3b6c 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -34,18 +34,22 @@ const char* Job::toString(JobType t) { case jtINVALID: return "invalid"; case jtVALIDATION_ut: return "untrustedValidation"; - case jtTRANSACTION: return "transaction"; + case jtPROOFWORK: return "proofOfWork"; case jtPROPOSAL_ut: return "untrustedProposal"; + case jtCLIENT: return "clientCommand"; + case jtTRANSACTION: return "transaction"; case jtVALIDATION_t: return "trustedValidation"; + case jtTRANSACTION_l: return "localTransaction"; case jtPROPOSAL_t: return "trustedProposal"; case jtADMIN: return "administration"; case jtDEATH: return "jobOfDeath"; - case jtCLIENT: return "clientCommand"; + case jtPEER: return "peerCommand"; case jtDISK: return "diskAccess"; case jtRPC: return "rpc"; case jtACCEPTLEDGER: return "acceptLedger"; case jtPUBLEDGER: return "pubLedger"; + case jtTXN_PROC: return "processTransaction"; default: assert(false); return "unknown"; } } diff --git a/src/cpp/ripple/JobQueue.h b/src/cpp/ripple/JobQueue.h index 43659f8e8..2cd6ee474 100644 --- a/src/cpp/ripple/JobQueue.h +++ b/src/cpp/ripple/JobQueue.h @@ -39,7 +39,7 @@ enum JobType jtACCEPTLEDGER = 20, jtPUBLEDGER = 21, jtTXN_PROC = 22, -}; +}; // CAUTION: If you add new types, add them to JobType.cpp too #define NUM_JOB_TYPES 24 class Job From 6a8d31afd7c731835bac3a13c1b793c0062800b3 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 24 Dec 2012 15:06:07 -0800 Subject: [PATCH 085/525] Give a sensible compiler error if Boost is too old. --- src/cpp/ripple/utils.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cpp/ripple/utils.h b/src/cpp/ripple/utils.h index 92161ffae..001757977 100644 --- a/src/cpp/ripple/utils.h +++ b/src/cpp/ripple/utils.h @@ -3,6 +3,11 @@ #include #include +#include + +#if BOOST_VERSION < 104700 +#error Boost 1.47 or later is required +#endif #include #include "types.h" From 7636e5f388ab3bf11830ad73cc134176fef7e72e Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 24 Dec 2012 16:06:50 -0800 Subject: [PATCH 086/525] Remove obsolete TERs in prep for ledger wipe. --- src/cpp/ripple/RippleCalc.cpp | 4 ++-- src/cpp/ripple/TransactionErr.cpp | 2 -- src/cpp/ripple/TransactionErr.h | 4 +--- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/RippleCalc.cpp b/src/cpp/ripple/RippleCalc.cpp index 23e210a5d..a86a9b843 100644 --- a/src/cpp/ripple/RippleCalc.cpp +++ b/src/cpp/ripple/RippleCalc.cpp @@ -1819,7 +1819,7 @@ TER RippleCalc::calcNodeAccountRev(const unsigned int uNode, PathState& psCur, c if (!saCurWantedAct) { // Must have processed something. - terResult = tepPATH_DRY; + terResult = tecPATH_DRY; } } else @@ -1852,7 +1852,7 @@ TER RippleCalc::calcNodeAccountRev(const unsigned int uNode, PathState& psCur, c if (!saPrvDeliverAct) { // Must want something. - terResult = tepPATH_DRY; + terResult = tecPATH_DRY; } } } diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index cbc61cae4..e196f3a61 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -59,8 +59,6 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temUNKNOWN, "temUNKNOWN", "The transactions requires logic not implemented yet." }, { tepPARTIAL, "tepPARTIAL", "Partial success." }, - { tepINSUF_RESERVE_OFFER, "tepINSUF_RESERVE_OFFER", "Insufficent reserve to create offer." }, - { tepPATH_DRY, "tepPATH_DRY", "Path could not send partial amount. Obsolete." }, { tepPATH_PARTIAL, "tepPATH_PARTIAL", "Path could not send full amount." }, { terRETRY, "terRETRY", "Retry transaction." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 40242e291..b09dea4a6 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -102,9 +102,7 @@ enum TER // aka TransactionEngineResult // // DO NOT CHANGE THESE NUMBERS: They appear in ledger meta data. tepPARTIAL = 100, - tepPATH_DRY = 101, // Obsolete. May exist in ledger. - tepPATH_PARTIAL = 102, - tepINSUF_RESERVE_OFFER = 103, // Obsolete. May exist in ledger. + tepPATH_PARTIAL = 101, // 120 .. C Claim fee only (CO) (no path) // Causes: From ebf334277333150dbff6088d8348762aaed8e567 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 24 Dec 2012 18:51:12 -0800 Subject: [PATCH 087/525] Remove an assert. --- src/cpp/ripple/SHAMapSync.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 94b970a31..0fd66761b 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -99,7 +99,7 @@ bool SHAMap::getNodeFat(const SHAMapNode& wanted, std::vector& nodeI SHAMapTreeNode::pointer node = getNode(wanted); if (!node) { - assert(false); // FIXME Remove for release, this can happen if we get a bogus request + cLog(lsWARNING) << "peer requested node we don't have: " << wanted; return false; } From 2897bd00c2d801c3326f6fedcef3492db75ae5a3 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 24 Dec 2012 19:08:57 -0800 Subject: [PATCH 088/525] Make 'getNodeFat' throw an exception if a node that's not in the map is requested. Log the context when this exception is thrown. --- src/cpp/ripple/Peer.cpp | 48 +++++++++++++++++++++++++---------- src/cpp/ripple/SHAMapSync.cpp | 4 +-- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 571246206..534007543 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1428,24 +1428,44 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) } std::vector nodeIDs; std::list< std::vector > rawNodes; - if(map->getNodeFat(mn, nodeIDs, rawNodes, fatRoot, fatLeaves)) + try { - assert(nodeIDs.size() == rawNodes.size()); - cLog(lsDEBUG) << "getNodeFat got " << rawNodes.size() << " nodes"; - std::vector::iterator nodeIDIterator; - std::list< std::vector >::iterator rawNodeIterator; - for(nodeIDIterator = nodeIDs.begin(), rawNodeIterator = rawNodes.begin(); - nodeIDIterator != nodeIDs.end(); ++nodeIDIterator, ++rawNodeIterator) + if(map->getNodeFat(mn, nodeIDs, rawNodes, fatRoot, fatLeaves)) { - Serializer nID(33); - nodeIDIterator->addIDRaw(nID); - ripple::TMLedgerNode* node = reply.add_nodes(); - node->set_nodeid(nID.getDataPtr(), nID.getLength()); - node->set_nodedata(&rawNodeIterator->front(), rawNodeIterator->size()); + assert(nodeIDs.size() == rawNodes.size()); + cLog(lsDEBUG) << "getNodeFat got " << rawNodes.size() << " nodes"; + std::vector::iterator nodeIDIterator; + std::list< std::vector >::iterator rawNodeIterator; + for(nodeIDIterator = nodeIDs.begin(), rawNodeIterator = rawNodes.begin(); + nodeIDIterator != nodeIDs.end(); ++nodeIDIterator, ++rawNodeIterator) + { + Serializer nID(33); + nodeIDIterator->addIDRaw(nID); + ripple::TMLedgerNode* node = reply.add_nodes(); + node->set_nodeid(nID.getDataPtr(), nID.getLength()); + node->set_nodedata(&rawNodeIterator->front(), rawNodeIterator->size()); + } } + else + cLog(lsWARNING) << "getNodeFat returns false"; + } + catch (std::exception& e) + { + std::string info; + if (packet.itype() == ripple::liTS_CANDIDATE) + info = "TS candidate"; + else if (packet.itype() == ripple::liBASE) + info = "Ledger base"; + else if (packet.itype() == ripple::liTX_NODE) + info = "TX node"; + else if (packet.itype() == ripple::liAS_NODE) + info = "AS node"; + + if (!packet.has_ledgerhash()) + info += ", no hash specified"; + + cLog(lsWARNING) << "getNodeFat( " << mn <<") throws exception: " << info; } - else - cLog(lsWARNING) << "getNodeFat returns false"; } PackedMessage::pointer oPacket = boost::make_shared(reply, ripple::mtLEDGER_DATA); sendPacket(oPacket); diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 0fd66761b..344e2bdc1 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -99,8 +99,8 @@ bool SHAMap::getNodeFat(const SHAMapNode& wanted, std::vector& nodeI SHAMapTreeNode::pointer node = getNode(wanted); if (!node) { - cLog(lsWARNING) << "peer requested node we don't have: " << wanted; - return false; + cLog(lsWARNING) << "peer requested node that not in the map: " << wanted; + throw std::runtime_error("Peer requested node not in map"); } nodeIDs.push_back(*node); From 7c13c576386a71e2eefd29d4d151ad992c659f66 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 24 Dec 2012 20:48:54 -0800 Subject: [PATCH 089/525] Make sure we clean up on a failed acquire. --- src/cpp/ripple/LedgerMaster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 5038f7c32..4f454408f 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -193,7 +193,7 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) } } - if (mMissingLedger && mMissingLedger->isComplete()) + if (mMissingLedger && (mMissingLedger->isComplete() || mMissingLedger->isFailed())) mMissingLedger.reset(); if (mMissingLedger || !theConfig.LEDGER_HISTORY) From 9124c9188450d79cd835a999d10e82889dc82ecd Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 25 Dec 2012 10:19:24 -0800 Subject: [PATCH 090/525] Ping websocket connections every two minutes. Detect and close non-responsive connections. UNTESTED --- src/cpp/ripple/NetworkOPs.cpp | 11 +++++++ src/cpp/ripple/NetworkOPs.h | 2 +- src/cpp/ripple/WSConnection.h | 57 ++++++++++++++++++++++++++--------- src/cpp/ripple/WSHandler.h | 33 ++++++++++++++++++++ 4 files changed, 88 insertions(+), 15 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index dfddfc608..1808e94f4 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1386,6 +1386,17 @@ void NetworkOPs::storeProposal(const LedgerProposal::pointer& proposal, const Ri props.push_back(proposal); } +InfoSub::~InfoSub() +{ + NetworkOPs& ops = theApp->getOPs(); + ops.unsubTransactions(this); + ops.unsubRTTransactions(this); + ops.unsubLedger(this); + ops.unsubServer(this); + ops.unsubAccount(this, mSubAccountInfo, true); + ops.unsubAccount(this, mSubAccountInfo, false); +} + #if 0 void NetworkOPs::subAccountChanges(InfoSub* ispListener, const uint256 uLedgerHash) { diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index e31bdb0e9..02822b54d 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -26,7 +26,7 @@ class InfoSub : public IS_INSTANCE(InfoSub) { public: - virtual ~InfoSub() { ; } + virtual ~InfoSub(); virtual void send(const Json::Value& jvObj) = 0; diff --git a/src/cpp/ripple/WSConnection.h b/src/cpp/ripple/WSConnection.h index e104e2dfc..0116f1f48 100644 --- a/src/cpp/ripple/WSConnection.h +++ b/src/cpp/ripple/WSConnection.h @@ -8,13 +8,17 @@ #include "WSDoor.h" #include "Application.h" -#include "Log.h" #include "NetworkOPs.h" #include "CallRPC.h" #include "InstanceCounter.h" +#include "Log.h" DEFINE_INSTANCE(WebSocketConnection); +#ifndef WEBSOCKET_PING_FREQUENCY +#define WEBSOCKET_PING_FREQUENCY 120 +#endif + template class WSServerHandler; // @@ -33,9 +37,12 @@ public: protected: typedef void (WSConnection::*doFuncPtr)(Json::Value& jvResult, Json::Value &jvRequest); - WSServerHandler* mHandler; - weak_connection_ptr mConnection; - NetworkOPs& mNetwork; + WSServerHandler* mHandler; + weak_connection_ptr mConnection; + NetworkOPs& mNetwork; + + boost::asio::deadline_timer mPingTimer; + bool mPinged; public: // WSConnection() @@ -43,17 +50,11 @@ public: // mConnection(connection_ptr()) { ; } WSConnection(WSServerHandler* wshpHandler, const connection_ptr& cpConnection) - : mHandler(wshpHandler), mConnection(cpConnection), mNetwork(theApp->getOPs()) { ; } + : mHandler(wshpHandler), mConnection(cpConnection), mNetwork(theApp->getOPs()), + mPingTimer(theApp->getAuxService()), mPinged(false) + { setPingTimer(); } - virtual ~WSConnection() - { - mNetwork.unsubTransactions(this); - mNetwork.unsubRTTransactions(this); - mNetwork.unsubLedger(this); - mNetwork.unsubServer(this); - mNetwork.unsubAccount(this, mSubAccountInfo, true); - mNetwork.unsubAccount(this, mSubAccountInfo, false); - } + virtual ~WSConnection() { ; } // Implement overridden functions from base class: void send(const Json::Value& jvObj) @@ -109,6 +110,34 @@ public: return jvResult; } + + bool onPingTimer() + { + if (mPinged) + return true; + mPinged = true; + setPingTimer(); + return false; + } + + void onPong() + { + mPinged = false; + } + + static void pingTimer(weak_connection_ptr c, WSServerHandler* h) + { + connection_ptr ptr = c.lock(); + if (ptr) + h->pingTimer(ptr); + } + + void setPingTimer() + { + mPingTimer.expires_from_now(boost::posix_time::seconds(WEBSOCKET_PING_FREQUENCY)); + mPingTimer.async_wait(boost::bind(&WSConnection::pingTimer, mConnection, mHandler)); + } + }; diff --git a/src/cpp/ripple/WSHandler.h b/src/cpp/ripple/WSHandler.h index 65bfa5253..59495e7a4 100644 --- a/src/cpp/ripple/WSHandler.h +++ b/src/cpp/ripple/WSHandler.h @@ -83,6 +83,24 @@ public: send(cpClient, jfwWriter.write(jvObj)); } + void pingTimer(connection_ptr cpClient) + { + typedef boost::shared_ptr< WSConnection > wsc_ptr; + wsc_ptr ptr; + { + boost::mutex::scoped_lock sl(mMapLock); + typename boost::unordered_map::iterator it = mMap.find(cpClient); + if (it == mMap.end()) + return; + ptr = it->second; + } + if (ptr->onPingTimer()) + { + cLog(lsWARNING) << "Connection pings out"; + cpClient->close(websocketpp::close::status::PROTOCOL_ERROR, "ping timeout"); + } + } + void on_open(connection_ptr cpClient) { boost::mutex::scoped_lock sl(mMapLock); @@ -90,6 +108,21 @@ public: mMap[cpClient] = boost::make_shared< WSConnection >(this, cpClient); } + void on_pong(connection_ptr cpClient, std::string) + { + cLog(lsTRACE) << "Pong received"; + typedef boost::shared_ptr< WSConnection > wsc_ptr; + wsc_ptr ptr; + { + boost::mutex::scoped_lock sl(mMapLock); + typename boost::unordered_map::iterator it = mMap.find(cpClient); + if (it == mMap.end()) + return; + ptr = it->second; + } + ptr->onPong(); + } + void on_close(connection_ptr cpClient) { // we cannot destroy the connection while holding the map lock or we deadlock with pubLedger typedef boost::shared_ptr< WSConnection > wsc_ptr; From 49e6372a4e02d75d86aef11887f5bd819ffdb86f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 25 Dec 2012 10:40:58 -0800 Subject: [PATCH 091/525] Forgot to send the actual ping. --- src/cpp/ripple/WSHandler.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cpp/ripple/WSHandler.h b/src/cpp/ripple/WSHandler.h index 59495e7a4..b7e76213c 100644 --- a/src/cpp/ripple/WSHandler.h +++ b/src/cpp/ripple/WSHandler.h @@ -99,6 +99,10 @@ public: cLog(lsWARNING) << "Connection pings out"; cpClient->close(websocketpp::close::status::PROTOCOL_ERROR, "ping timeout"); } + else + { + cpClient->ping("ping"); + } } void on_open(connection_ptr cpClient) From 359e8cce0d87df887f66f18eb85f569db96f8d01 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 25 Dec 2012 16:11:21 -0800 Subject: [PATCH 092/525] Allow maximum send to use reserve for fees. --- src/cpp/ripple/PaymentTransactor.cpp | 5 +++-- src/cpp/ripple/TransactionEngine.cpp | 10 ++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index c4aba2871..e5e27a057 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -141,9 +141,10 @@ TER PaymentTransactor::doApply() const STAmount saSrcXRPBalance = mTxnAccount->getFieldAmount(sfBalance); const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); const uint64 uReserve = mEngine->getLedger()->getReserve(uOwnerCount); + STAmount saPaid = mTxn.getTransactionFee(); - // Make sure have enough reserve to send. - if (saSrcXRPBalance < saDstAmount + uReserve) // Reserve is not scaled by fee. + // Make sure have enough reserve to send. Allow final spend to use reserve for fee. + if (saSrcXRPBalance + saPaid < saDstAmount + uReserve) // Reserve is not scaled by fee. { // Vote no. However, transaction might succeed, if applied in a different order. cLog(lsINFO) << ""; diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index 1a7c40f85..c2eca65f3 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -113,9 +113,13 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa cLog(lsINFO) << "applyTransaction: terResult=" << strToken << " : " << terResult << " : " << strHuman; if (terResult == tesSUCCESS) + { didApply = true; + } else if (isTepPartial(terResult) && !isSetBit(params, tapRETRY)) + { didApply = true; + } else if (isTecClaim(terResult) && !isSetBit(params, tapRETRY)) { // only claim the transaction fee cLog(lsINFO) << "Reprocessing to only claim fee"; @@ -138,11 +142,13 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa } else { - STAmount fee = txn.getTransactionFee(); - STAmount balance = txnAcct->getFieldAmount(sfBalance); + STAmount fee = txn.getTransactionFee(); + STAmount balance = txnAcct->getFieldAmount(sfBalance); if (balance < fee) + { terResult = terINSUF_FEE_B; + } else { txnAcct->setFieldAmount(sfBalance, balance - fee); From 77d92e176726fda830471a723753ec699b69af73 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 25 Dec 2012 16:14:10 -0800 Subject: [PATCH 093/525] Fix ripple state creating and deleting. --- src/cpp/ripple/LedgerEntrySet.cpp | 91 +++++++++++++++++++++++---- src/cpp/ripple/LedgerEntrySet.h | 11 ++++ src/cpp/ripple/LedgerFormats.cpp | 2 + src/cpp/ripple/SerializeProto.h | 2 + src/cpp/ripple/TransactionErr.cpp | 1 + src/cpp/ripple/TransactionErr.h | 1 + src/cpp/ripple/Transactor.cpp | 13 ++-- src/cpp/ripple/TrustSetTransactor.cpp | 67 ++++++++------------ test/send-test.js | 20 ++++-- 9 files changed, 142 insertions(+), 66 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 0060479b9..b8ba586f8 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -1,6 +1,7 @@ #include "LedgerEntrySet.h" +#include #include #include @@ -620,7 +621,7 @@ TER LedgerEntrySet::dirDelete( const bool bKeepRoot, // --> True, if we never completely clean up, after we overflow the root node. const uint64& uNodeDir, // --> Node containing entry. const uint256& uRootIndex, // --> The index of the base of the directory. Nodes are based off of this. - const uint256& uLedgerIndex, // --> Value to add to directory. + const uint256& uLedgerIndex, // --> Value to remove from directory. const bool bStable) // --> True, not to change relative order of entries. { uint64 uNodeCur = uNodeDir; @@ -628,7 +629,11 @@ TER LedgerEntrySet::dirDelete( if (!sleNode) { - cLog(lsWARNING) << "dirDelete: no such node"; + cLog(lsWARNING) + << boost::str(boost::format("dirDelete: no such node: uRootIndex=%s uNodeDir=%s uLedgerIndex=%s") + % uRootIndex.ToString() + % strHex(uNodeDir) + % uLedgerIndex.ToString()); assert(false); return tefBAD_LEDGER; @@ -1130,6 +1135,64 @@ STAmount LedgerEntrySet::rippleTransferFee(const uint160& uSenderID, const uint1 return saTransitFee; } +TER LedgerEntrySet::trustCreate( + const bool bSrcHigh, // Who to charge with reserve. + const uint160& uSrcAccountID, + SLE::ref sleSrcAccount, + const uint160& uDstAccountID, + const uint256& uIndex, + const STAmount& saSrcBalance, // Issuer should be ACCOUNT_ONE + const STAmount& saSrcLimit, + const uint32 uSrcQualityIn, + const uint32 uSrcQualityOut) +{ + const uint160& uLowAccountID = !bSrcHigh ? uSrcAccountID : uDstAccountID; + const uint160& uHighAccountID = bSrcHigh ? uSrcAccountID : uDstAccountID; + + SLE::pointer sleRippleState = entryCreate(ltRIPPLE_STATE, uIndex); + + uint64 uLowNode; + uint64 uHighNode; + + TER terResult = dirAdd( + uLowNode, + Ledger::getOwnerDirIndex(uLowAccountID), + sleRippleState->getIndex(), + boost::bind(&Ledger::ownerDirDescriber, _1, uLowAccountID)); + + if (tesSUCCESS == terResult) + { + terResult = dirAdd( + uHighNode, + Ledger::getOwnerDirIndex(uHighAccountID), + sleRippleState->getIndex(), + boost::bind(&Ledger::ownerDirDescriber, _1, uHighAccountID)); + } + + if (tesSUCCESS == terResult) + { + sleRippleState->setFieldU64(sfLowNode, uLowNode); + sleRippleState->setFieldU64(sfHighNode, uHighNode); + + sleRippleState->setFieldAmount(!bSrcHigh ? sfLowLimit : sfHighLimit, saSrcLimit); + sleRippleState->setFieldAmount( bSrcHigh ? sfLowLimit : sfHighLimit, STAmount(saSrcBalance.getCurrency(), uDstAccountID)); + + if (uSrcQualityIn) + sleRippleState->setFieldU32(bSrcHigh ? sfHighQualityIn : sfLowQualityIn, uSrcQualityIn); + + if (uSrcQualityOut) + sleRippleState->setFieldU32(bSrcHigh ? sfHighQualityOut : sfLowQualityOut, uSrcQualityIn); + + sleRippleState->setFieldU32(sfFlags, !bSrcHigh ? lsfLowReserve : lsfHighReserve); + + ownerCountAdjust(uSrcAccountID, 1, sleSrcAccount); + + sleRippleState->setFieldAmount(sfBalance, bSrcHigh ? -saSrcBalance: saSrcBalance); + } + + return terResult; +} + // Direct send w/o fees: redeeming IOUs and/or sending own IOUs. void LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount, bool bCheckIssuer) { @@ -1138,7 +1201,7 @@ void LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uRece assert(!bCheckIssuer || uSenderID == uIssuerID || uReceiverID == uIssuerID); - bool bFlipped = uSenderID > uReceiverID; + bool bSenderHigh = uSenderID > uReceiverID; uint256 uIndex = Ledger::getRippleStateIndex(uSenderID, uReceiverID, saAmount.getCurrency()); SLE::pointer sleRippleState = entryCache(ltRIPPLE_STATE, uIndex); @@ -1147,6 +1210,7 @@ void LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uRece if (!sleRippleState) { + STAmount saSrcLimit = STAmount(uCurrencyID, uSenderID); STAmount saBalance = saAmount; saBalance.setIssuer(ACCOUNT_ONE); @@ -1157,20 +1221,21 @@ void LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uRece % RippleAddress::createHumanAccountID(uReceiverID) % saAmount.getFullText()); - sleRippleState = entryCreate(ltRIPPLE_STATE, uIndex); - - if (!bFlipped) - saBalance.negate(); - - sleRippleState->setFieldAmount(sfBalance, saBalance); - sleRippleState->setFieldAmount(bFlipped ? sfHighLimit : sfLowLimit, STAmount(uCurrencyID, uSenderID)); - sleRippleState->setFieldAmount(bFlipped ? sfLowLimit : sfHighLimit, STAmount(uCurrencyID, uReceiverID)); + // XXX Pass back result. + TER terResult = trustCreate( + bSenderHigh, + uSenderID, + entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(uSenderID)), + uReceiverID, + uIndex, + saBalance, + saSrcLimit); } else { STAmount saBalance = sleRippleState->getFieldAmount(sfBalance); - if (!bFlipped) + if (!bSenderHigh) saBalance.negate(); // Put balance in low terms. cLog(lsDEBUG) << boost::str(boost::format("rippleCredit> %s (%s) -> %s : %s") @@ -1181,7 +1246,7 @@ void LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uRece saBalance += saAmount; - if (!bFlipped) + if (!bSenderHigh) saBalance.negate(); sleRippleState->setFieldAmount(sfBalance, saBalance); diff --git a/src/cpp/ripple/LedgerEntrySet.h b/src/cpp/ripple/LedgerEntrySet.h index 5faf18476..59a1a2944 100644 --- a/src/cpp/ripple/LedgerEntrySet.h +++ b/src/cpp/ripple/LedgerEntrySet.h @@ -128,6 +128,17 @@ public: STAmount accountFunds(const uint160& uAccountID, const STAmount& saDefault, bool bAvail=false); void accountSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount); + TER trustCreate( + const bool bSrcHigh, + const uint160& uSrcAccountID, + SLE::ref sleSrcAccount, + const uint160& uDstAccountID, + const uint256& uIndex, + const STAmount& saSrcBalance, + const STAmount& saSrcLimit, + const uint32 uSrcQualityIn = 0, + const uint32 uSrcQualityOut = 0); + Json::Value getJson(int) const; void calcRawMeta(Serializer&, TER result, uint32 index); diff --git a/src/cpp/ripple/LedgerFormats.cpp b/src/cpp/ripple/LedgerFormats.cpp index 2b9f01e80..cca4ba8c0 100644 --- a/src/cpp/ripple/LedgerFormats.cpp +++ b/src/cpp/ripple/LedgerFormats.cpp @@ -87,8 +87,10 @@ static bool LEFInit() << SOElement(sfHighLimit, SOE_REQUIRED) << SOElement(sfPreviousTxnID, SOE_REQUIRED) << SOElement(sfPreviousTxnLgrSeq, SOE_REQUIRED) + << SOElement(sfLowNode, SOE_OPTIONAL) << SOElement(sfLowQualityIn, SOE_OPTIONAL) << SOElement(sfLowQualityOut, SOE_OPTIONAL) + << SOElement(sfHighNode, SOE_OPTIONAL) << SOElement(sfHighQualityIn, SOE_OPTIONAL) << SOElement(sfHighQualityOut, SOE_OPTIONAL) ; diff --git a/src/cpp/ripple/SerializeProto.h b/src/cpp/ripple/SerializeProto.h index 6b3d66115..cc8a932b7 100644 --- a/src/cpp/ripple/SerializeProto.h +++ b/src/cpp/ripple/SerializeProto.h @@ -71,6 +71,8 @@ FIELD(OwnerNode, UINT64, 4) FIELD(BaseFee, UINT64, 5) FIELD(ExchangeRate, UINT64, 6) + FIELD(LowNode, UINT64, 7) + FIELD(HighNode, UINT64, 8) // 128-bit diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index e196f3a61..8e4c5e8ac 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -41,6 +41,7 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temBAD_AUTH_MASTER, "temBAD_AUTH_MASTER", "Auth for unclaimed account needs correct master key." }, { temBAD_EXPIRATION, "temBAD_EXPIRATION", "Malformed." }, { temBAD_ISSUER, "temBAD_ISSUER", "Malformed." }, + { temBAD_LIMIT, "temBAD_LIMIT", "Limits must be non-negative." }, { temBAD_OFFER, "temBAD_OFFER", "Malformed." }, { temBAD_PATH, "temBAD_PATH", "Malformed." }, { temBAD_PATH_LOOP, "temBAD_PATH_LOOP", "Malformed." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index b09dea4a6..e7a667b07 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -29,6 +29,7 @@ enum TER // aka TransactionEngineResult temBAD_AUTH_MASTER, temBAD_EXPIRATION, temBAD_ISSUER, + temBAD_LIMIT, temBAD_OFFER, temBAD_PATH, temBAD_PATH_LOOP, diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index 7b0091a3a..cc76d26e5 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -77,7 +77,6 @@ TER Transactor::payFee() return tesSUCCESS; } - TER Transactor::checkSig() { // Consistency: Check signature @@ -199,14 +198,14 @@ TER Transactor::apply() mHasAuthKey = mTxnAccount->isFieldPresent(sfRegularKey); } - terResult=payFee(); - if(terResult != tesSUCCESS) return(terResult); + terResult = payFee(); + if (terResult != tesSUCCESS) return(terResult); - terResult=checkSig(); - if(terResult != tesSUCCESS) return(terResult); + terResult = checkSig(); + if (terResult != tesSUCCESS) return(terResult); - terResult=checkSeq(); - if(terResult != tesSUCCESS) return(terResult); + terResult = checkSeq(); + if (terResult != tesSUCCESS) return(terResult); mEngine->entryModify(mTxnAccount); diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index a3239f23d..abb6cfbc0 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -2,8 +2,6 @@ #include "TrustSetTransactor.h" -#include - SETUP_LOG(); TER TrustSetTransactor::doApply() @@ -33,7 +31,7 @@ TER TrustSetTransactor::doApply() { cLog(lsINFO) << "doTrustSet: Malformed transaction: Negatived credit limit."; - return temBAD_AMOUNT; + return temBAD_LIMIT; } else if (!uDstAccountID || uDstAccountID == ACCOUNT_ONE) { @@ -223,16 +221,20 @@ TER TrustSetTransactor::doApply() { // Can delete. - uint64 uSrcRef; // <-- Ignored, dirs never delete. + uint64 uLowNode = sleRippleState->getFieldU64(sfLowNode); + uint64 uHighNode = sleRippleState->getFieldU64(sfHighNode); - terResult = mEngine->getNodes().dirDelete(false, uSrcRef, Ledger::getOwnerDirIndex(uLowAccountID), sleRippleState->getIndex(), false); + cLog(lsTRACE) << "doTrustSet: Deleting ripple line: low"; + terResult = mEngine->getNodes().dirDelete(false, uLowNode, Ledger::getOwnerDirIndex(uLowAccountID), sleRippleState->getIndex(), false); if (tesSUCCESS == terResult) - terResult = mEngine->getNodes().dirDelete(false, uSrcRef, Ledger::getOwnerDirIndex(uHighAccountID), sleRippleState->getIndex(), false); + { + cLog(lsTRACE) << "doTrustSet: Deleting ripple line: high"; + terResult = mEngine->getNodes().dirDelete(false, uHighNode, Ledger::getOwnerDirIndex(uHighAccountID), sleRippleState->getIndex(), false); + } + cLog(lsINFO) << "doTrustSet: Deleting ripple line: state"; mEngine->entryDelete(sleRippleState); - - cLog(lsINFO) << "doTrustSet: Deleting ripple line"; } else if (bReserveIncrease && saSrcXRPBalance.getNValue() < uReserveCreate) // Reserve is not scaled by load. @@ -267,41 +269,22 @@ TER TrustSetTransactor::doApply() } else { + STAmount saBalance = STAmount(uCurrencyID, ACCOUNT_ONE); // Zero balance in currency. + + cLog(lsINFO) << "doTrustSet: Creating ripple line: " + << Ledger::getRippleStateIndex(mTxnAccountID, uDstAccountID, uCurrencyID).ToString(); + // Create a new ripple line. - sleRippleState = mEngine->entryCreate(ltRIPPLE_STATE, Ledger::getRippleStateIndex(mTxnAccountID, uDstAccountID, uCurrencyID)); - - cLog(lsINFO) << "doTrustSet: Creating ripple line: " << sleRippleState->getIndex().ToString(); - - sleRippleState->setFieldAmount(sfBalance, STAmount(uCurrencyID, ACCOUNT_ONE)); // Zero balance in currency. - sleRippleState->setFieldAmount(!bHigh ? sfLowLimit : sfHighLimit, saLimitAllow); - sleRippleState->setFieldAmount( bHigh ? sfLowLimit : sfHighLimit, STAmount(uCurrencyID, uDstAccountID)); - - if (uQualityIn) - sleRippleState->setFieldU32(!bHigh ? sfLowQualityIn : sfHighQualityIn, uQualityIn); - - if (uQualityOut) - sleRippleState->setFieldU32(!bHigh ? sfLowQualityOut : sfHighQualityOut, uQualityOut); - - sleRippleState->setFieldU32(sfFlags, !bHigh ? lsfLowReserve : lsfHighReserve); - - uint64 uSrcRef; // <-- Ignored, dirs never delete. - - terResult = mEngine->getNodes().dirAdd( - uSrcRef, - Ledger::getOwnerDirIndex(mTxnAccountID), - sleRippleState->getIndex(), - boost::bind(&Ledger::ownerDirDescriber, _1, mTxnAccountID)); - - if (tesSUCCESS == terResult) - { - mEngine->getNodes().ownerCountAdjust(mTxnAccountID, 1, mTxnAccount); - - terResult = mEngine->getNodes().dirAdd( - uSrcRef, - Ledger::getOwnerDirIndex(uDstAccountID), - sleRippleState->getIndex(), - boost::bind(&Ledger::ownerDirDescriber, _1, uDstAccountID)); - } + terResult = mEngine->getNodes().trustCreate( + bHigh, // Who to charge with reserve. + mTxnAccountID, + mTxnAccount, + uDstAccountID, + Ledger::getRippleStateIndex(mTxnAccountID, uDstAccountID, uCurrencyID), + saBalance, + saLimitAllow, + uQualityIn, + uQualityOut); } cLog(lsINFO) << "doTrustSet<"; diff --git a/test/send-test.js b/test/send-test.js index 547a59a41..2322da8a9 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -40,8 +40,9 @@ buster.testCase("Fee Changes", { */ buster.testCase("Sending", { - 'setUp' : testutils.build_setup(), // - 'tearDown' : testutils.build_teardown(), + 'setUp' : testutils.build_setup(), + // 'setUp' : testutils.build_setup({verbose: true , no_server: true}), + 'tearDown' : testutils.build_teardown(), "send XRP to non-existent account with insufficent fee" : function (done) { @@ -185,14 +186,25 @@ buster.testCase("Sending", { self.remote.transaction() .ripple_line_set("alice", "-1/USD/mtgox") .on('proposed', function (m) { - buster.assert.equals('temBAD_AMOUNT', m.result); + buster.assert.equals('temBAD_LIMIT', m.result); // After a malformed transaction, need to recover correct sequence. self.remote.set_account_seq("alice", self.remote.account_seq("alice")-1); - callback('temBAD_AMOUNT' !== m.result); + callback('temBAD_LIMIT' !== m.result); }) .submit(); }, +// function (callback) { +// self.what = "Display ledger"; +// +// self.remote.request_ledger('current', true) +// .on('success', function (m) { +// console.log("Ledger: %s", JSON.stringify(m, undefined, 2)); +// +// callback(); +// }) +// .request(); +// }, function (callback) { self.what = "Zero a credit limit."; From 3ccf163fb30f9a7def50346a7e5c7ccfddb3d0d7 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 25 Dec 2012 16:21:17 -0800 Subject: [PATCH 094/525] Do not allow negative fees. --- src/cpp/ripple/TransactionErr.cpp | 2 +- src/cpp/ripple/TransactionErr.h | 2 +- src/cpp/ripple/Transactor.cpp | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index 8e4c5e8ac..03c27da46 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -39,6 +39,7 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temMALFORMED, "temMALFORMED", "Malformed transaction." }, { temBAD_AMOUNT, "temBAD_AMOUNT", "Can only send positive amounts." }, { temBAD_AUTH_MASTER, "temBAD_AUTH_MASTER", "Auth for unclaimed account needs correct master key." }, + { temBAD_FEE, "temBAD_FEE", "Negative fee." }, { temBAD_EXPIRATION, "temBAD_EXPIRATION", "Malformed." }, { temBAD_ISSUER, "temBAD_ISSUER", "Malformed." }, { temBAD_LIMIT, "temBAD_LIMIT", "Limits must be non-negative." }, @@ -51,7 +52,6 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temBAD_SEQUENCE, "temBAD_SEQUENCE", "Malformed: Sequence in not in the past." }, { temDST_IS_SRC, "temDST_IS_SRC", "Destination may not be source." }, { temDST_NEEDED, "temDST_NEEDED", "Destination not specified." }, - { temINSUF_FEE_P, "temINSUF_FEE_P", "Fee not allowed." }, { temINVALID, "temINVALID", "The transaction is ill-formed." }, { temINVALID_FLAG, "temINVALID_FLAG", "The transaction has an invalid flag." }, { temREDUNDANT, "temREDUNDANT", "Sends same currency to self." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index e7a667b07..1a497598f 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -27,6 +27,7 @@ enum TER // aka TransactionEngineResult temMALFORMED = -299, temBAD_AMOUNT, temBAD_AUTH_MASTER, + temBAD_FEE, temBAD_EXPIRATION, temBAD_ISSUER, temBAD_LIMIT, @@ -39,7 +40,6 @@ enum TER // aka TransactionEngineResult temBAD_SET_ID, temDST_IS_SRC, temDST_NEEDED, - temINSUF_FEE_P, temINVALID, temINVALID_FLAG, temREDUNDANT, diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index cc76d26e5..fd187ab39 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -57,6 +57,9 @@ TER Transactor::payFee() return telINSUF_FEE_P; } + if (saPaid.isNegative()) + return temBAD_AMOUNT; + if (!saPaid) return tesSUCCESS; // Deduct the fee, so it's not available during the transaction. From f3b216b39fbfc95e4d6e561fc58fc00236a56f27 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 25 Dec 2012 16:42:33 -0800 Subject: [PATCH 095/525] Handle errors from ripple state creating. --- src/cpp/ripple/LedgerEntrySet.cpp | 36 ++++++++++++++++-------- src/cpp/ripple/LedgerEntrySet.h | 6 ++-- src/cpp/ripple/OfferCreateTransactor.cpp | 31 ++++++++++++-------- src/cpp/ripple/RippleCalc.cpp | 25 ++++++++++------ 4 files changed, 64 insertions(+), 34 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index b8ba586f8..07996a19c 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -1194,7 +1194,7 @@ TER LedgerEntrySet::trustCreate( } // Direct send w/o fees: redeeming IOUs and/or sending own IOUs. -void LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount, bool bCheckIssuer) +TER LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount, bool bCheckIssuer) { uint160 uIssuerID = saAmount.getIssuer(); uint160 uCurrencyID = saAmount.getCurrency(); @@ -1205,6 +1205,8 @@ void LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uRece uint256 uIndex = Ledger::getRippleStateIndex(uSenderID, uReceiverID, saAmount.getCurrency()); SLE::pointer sleRippleState = entryCache(ltRIPPLE_STATE, uIndex); + TER terResult; + assert(!!uSenderID && uSenderID != ACCOUNT_ONE); assert(!!uReceiverID && uReceiverID != ACCOUNT_ONE); @@ -1221,8 +1223,7 @@ void LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uRece % RippleAddress::createHumanAccountID(uReceiverID) % saAmount.getFullText()); - // XXX Pass back result. - TER terResult = trustCreate( + terResult = trustCreate( bSenderHigh, uSenderID, entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(uSenderID)), @@ -1252,25 +1253,31 @@ void LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uRece sleRippleState->setFieldAmount(sfBalance, saBalance); entryModify(sleRippleState); + + terResult = tesSUCCESS; } + + return terResult; } // Send regardless of limits. // --> saAmount: Amount/currency/issuer for receiver to get. // <-- saActual: Amount actually sent. Sender pay's fees. -STAmount LedgerEntrySet::rippleSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount) +TER LedgerEntrySet::rippleSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount, STAmount& saActual) { - STAmount saActual; const uint160 uIssuerID = saAmount.getIssuer(); + TER terResult; assert(!!uSenderID && !!uReceiverID); if (uSenderID == uIssuerID || uReceiverID == uIssuerID || uIssuerID == ACCOUNT_ONE) { // Direct send: redeeming IOUs and/or sending own IOUs. - rippleCredit(uSenderID, uReceiverID, saAmount, false); + terResult = rippleCredit(uSenderID, uReceiverID, saAmount, false); saActual = saAmount; + + terResult = tesSUCCESS; } else { @@ -1282,16 +1289,19 @@ STAmount LedgerEntrySet::rippleSend(const uint160& uSenderID, const uint160& uRe saActual.setIssuer(uIssuerID); // XXX Make sure this done in + above. - rippleCredit(uIssuerID, uReceiverID, saAmount); - rippleCredit(uSenderID, uIssuerID, saActual); + terResult = rippleCredit(uIssuerID, uReceiverID, saAmount); + + if (tesSUCCESS == terResult) + terResult = rippleCredit(uSenderID, uIssuerID, saActual); } - return saActual; + return terResult; } -void LedgerEntrySet::accountSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount) +TER LedgerEntrySet::accountSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount) { assert(!saAmount.isNegative()); + TER terResult = tesSUCCESS; if (!saAmount) { @@ -1334,8 +1344,12 @@ void LedgerEntrySet::accountSend(const uint160& uSenderID, const uint160& uRecei } else { - rippleSend(uSenderID, uReceiverID, saAmount); + STAmount saActual; + + terResult = rippleSend(uSenderID, uReceiverID, saAmount, saActual); } + + return terResult; } // vim:ts=4 diff --git a/src/cpp/ripple/LedgerEntrySet.h b/src/cpp/ripple/LedgerEntrySet.h index 59a1a2944..4ac46e6b9 100644 --- a/src/cpp/ripple/LedgerEntrySet.h +++ b/src/cpp/ripple/LedgerEntrySet.h @@ -121,12 +121,12 @@ public: STAmount rippleHolds(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID, bool bAvail=false); STAmount rippleTransferFee(const uint160& uSenderID, const uint160& uReceiverID, const uint160& uIssuerID, const STAmount& saAmount); - void rippleCredit(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount, bool bCheckIssuer=true); - STAmount rippleSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount); + TER rippleCredit(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount, bool bCheckIssuer=true); + TER rippleSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount, STAmount& saActual); STAmount accountHolds(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID, bool bAvail=false); STAmount accountFunds(const uint160& uAccountID, const STAmount& saDefault, bool bAvail=false); - void accountSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount); + TER accountSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount); TER trustCreate( const bool bSrcHigh, diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index 23741e8e3..fc3d21529 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -200,23 +200,30 @@ TER OfferCreateTransactor::takeOffers( cLog(lsINFO) << "takeOffers: offer partial claim."; } - // Offer owner pays taker. - // saSubTakerGot.setIssuer(uTakerGetsAccountID); // XXX Move this earlier? assert(!!saSubTakerGot.getIssuer()); - - mEngine->getNodes().accountSend(uOfferOwnerID, uTakerAccountID, saSubTakerGot); - mEngine->getNodes().accountSend(uOfferOwnerID, uTakerGetsAccountID, saOfferIssuerFee); - - saTakerGot += saSubTakerGot; - - // Taker pays offer owner. - // saSubTakerPaid.setIssuer(uTakerPaysAccountID); assert(!!saSubTakerPaid.getIssuer()); - mEngine->getNodes().accountSend(uTakerAccountID, uOfferOwnerID, saSubTakerPaid); - mEngine->getNodes().accountSend(uTakerAccountID, uTakerPaysAccountID, saTakerIssuerFee); + // Offer owner pays taker. + // saSubTakerGot.setIssuer(uTakerGetsAccountID); // XXX Move this earlier? + terResult = mEngine->getNodes().accountSend(uOfferOwnerID, uTakerAccountID, saSubTakerGot); + + if (tesSUCCESS == terResult) + terResult = mEngine->getNodes().accountSend(uOfferOwnerID, uTakerGetsAccountID, saOfferIssuerFee); + // Taker pays offer owner. + // saSubTakerPaid.setIssuer(uTakerPaysAccountID); + + if (tesSUCCESS == terResult) + terResult = mEngine->getNodes().accountSend(uTakerAccountID, uOfferOwnerID, saSubTakerPaid); + + if (tesSUCCESS == terResult) + terResult = mEngine->getNodes().accountSend(uTakerAccountID, uTakerPaysAccountID, saTakerIssuerFee); + + saTakerGot += saSubTakerGot; saTakerPaid += saSubTakerPaid; + + if (tesSUCCESS == terResult) + terResult = temUNCERTAIN; } } } diff --git a/src/cpp/ripple/RippleCalc.cpp b/src/cpp/ripple/RippleCalc.cpp index a86a9b843..783ec7be2 100644 --- a/src/cpp/ripple/RippleCalc.cpp +++ b/src/cpp/ripple/RippleCalc.cpp @@ -1127,7 +1127,10 @@ TER RippleCalc::calcNodeDeliverRev( // Sending could be complicated: could fund a previous offer not yet visited. // However, these deductions and adjustments are tenative. // Must reset balances when going forward to perform actual transfers. - lesActive.accountSend(uOfrOwnerID, uCurIssuerID, saOutPass); + terResult = lesActive.accountSend(uOfrOwnerID, uCurIssuerID, saOutPass); + + if (tesSUCCESS != terResult) + break; // Adjust offer sleOffer->setFieldAmount(sfTakerGets, saTakerGets - saOutPass); @@ -1147,7 +1150,7 @@ TER RippleCalc::calcNodeDeliverRev( saPrvDlvReq += saInPassAct; } - if (!saOutAct) + if (tesSUCCESS == terResult && !saOutAct) terResult = tecPATH_DRY; return terResult; @@ -1253,7 +1256,10 @@ TER RippleCalc::calcNodeDeliverFwd( % saOutPassAct.getFullText()); // Output: Debit offer owner, send XRP or non-XPR to next account. - lesActive.accountSend(uOfrOwnerID, uNxtAccountID, saOutPassAct); + terResult = lesActive.accountSend(uOfrOwnerID, uNxtAccountID, saOutPassAct); + + if (tesSUCCESS != terResult) + break; } else { @@ -1314,7 +1320,10 @@ TER RippleCalc::calcNodeDeliverFwd( // Do inbound crediting. // Credit offer owner from in issuer/limbo (input transfer fees left with owner). - lesActive.accountSend(!!uPrvCurrencyID ? uInAccountID : ACCOUNT_XRP, uOfrOwnerID, saInPassAct); + terResult = lesActive.accountSend(!!uPrvCurrencyID ? uInAccountID : ACCOUNT_XRP, uOfrOwnerID, saInPassAct); + + if (tesSUCCESS != terResult) + break; // Adjust offer // Fees are considered paid from a seperate budget and are not named in the offer. @@ -2017,7 +2026,7 @@ TER RippleCalc::calcNodeAccountFwd( saCurReceive = saPrvRedeemReq+saIssueCrd; // Actually receive. - lesActive.rippleCredit(uPrvAccountID, uCurAccountID, saPrvRedeemReq+saPrvIssueReq, false); + terResult = lesActive.rippleCredit(uPrvAccountID, uCurAccountID, saPrvRedeemReq+saPrvIssueReq, false); } else { @@ -2060,7 +2069,7 @@ TER RippleCalc::calcNodeAccountFwd( } // Adjust prv --> cur balance : take all inbound - lesActive.rippleCredit(uPrvAccountID, uCurAccountID, saPrvRedeemReq + saPrvIssueReq, false); + terResult = lesActive.rippleCredit(uPrvAccountID, uCurAccountID, saPrvRedeemReq + saPrvIssueReq, false); } } else if (bPrvAccount && !bNxtAccount) @@ -2096,7 +2105,7 @@ TER RippleCalc::calcNodeAccountFwd( } // Adjust prv --> cur balance : take all inbound - lesActive.rippleCredit(uPrvAccountID, uCurAccountID, saPrvRedeemReq + saPrvIssueReq, false); + terResult = lesActive.rippleCredit(uPrvAccountID, uCurAccountID, saPrvRedeemReq + saPrvIssueReq, false); } else { @@ -2133,7 +2142,7 @@ TER RippleCalc::calcNodeAccountFwd( cLog(lsDEBUG) << boost::str(boost::format("calcNodeAccountFwd: ^ --> ACCOUNT -- XRP --> offer")); // Deliver XRP to limbo. - lesActive.accountSend(uCurAccountID, ACCOUNT_XRP, saCurDeliverAct); + terResult = lesActive.accountSend(uCurAccountID, ACCOUNT_XRP, saCurDeliverAct); } } } From 14380311a1cdc0bf5e25d0e52b98579a127acd3c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 25 Dec 2012 16:50:10 -0800 Subject: [PATCH 096/525] Clean up aborted offers support going into debt. --- src/cpp/ripple/LedgerEntrySet.cpp | 43 +++++++----------------- src/cpp/ripple/LedgerEntrySet.h | 6 ++-- src/cpp/ripple/OfferCreateTransactor.cpp | 10 +++--- 3 files changed, 20 insertions(+), 39 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 07996a19c..3fdedb4d6 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -1006,7 +1006,7 @@ uint32 LedgerEntrySet::rippleQualityIn(const uint160& uToAccountID, const uint16 // Return how much of uIssuerID's uCurrencyID IOUs that uAccountID holds. May be negative. // <-- IOU's uAccountID has of uIssuerID. -STAmount LedgerEntrySet::rippleHolds(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID, bool bAvail) +STAmount LedgerEntrySet::rippleHolds(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID) { STAmount saBalance; SLE::pointer sleRippleState = entryCache(ltRIPPLE_STATE, Ledger::getRippleStateIndex(uAccountID, uIssuerID, uCurrencyID)); @@ -1017,30 +1017,14 @@ STAmount LedgerEntrySet::rippleHolds(const uint160& uAccountID, const uint160& u } else if (uAccountID > uIssuerID) { - if (false && bAvail) - { - saBalance = sleRippleState->getFieldAmount(sfLowLimit); - saBalance -= sleRippleState->getFieldAmount(sfBalance); - } - else - { - saBalance = sleRippleState->getFieldAmount(sfBalance); - saBalance.negate(); // Put balance in uAccountID terms. - } + saBalance = sleRippleState->getFieldAmount(sfBalance); + saBalance.negate(); // Put balance in uAccountID terms. saBalance.setIssuer(uIssuerID); } else { - if (false && bAvail) - { - saBalance = sleRippleState->getFieldAmount(sfHighLimit); - saBalance += sleRippleState->getFieldAmount(sfBalance); - } - else - { - saBalance = sleRippleState->getFieldAmount(sfBalance); - } + saBalance = sleRippleState->getFieldAmount(sfBalance); saBalance.setIssuer(uIssuerID); } @@ -1049,7 +1033,7 @@ STAmount LedgerEntrySet::rippleHolds(const uint160& uAccountID, const uint160& u } // <-- saAmount: amount of uCurrencyID held by uAccountID. May be negative. -STAmount LedgerEntrySet::accountHolds(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID, bool bAvail) +STAmount LedgerEntrySet::accountHolds(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID) { STAmount saAmount; @@ -1071,13 +1055,12 @@ STAmount LedgerEntrySet::accountHolds(const uint160& uAccountID, const uint160& } else { - saAmount = rippleHolds(uAccountID, uCurrencyID, uIssuerID, bAvail); + saAmount = rippleHolds(uAccountID, uCurrencyID, uIssuerID); } - cLog(lsINFO) << boost::str(boost::format("accountHolds: uAccountID=%s saAmount=%s bAvail=%d") + cLog(lsINFO) << boost::str(boost::format("accountHolds: uAccountID=%s saAmount=%s") % RippleAddress::createHumanAccountID(uAccountID) - % saAmount.getFullText() - % bAvail); + % saAmount.getFullText()); return saAmount; } @@ -1086,10 +1069,9 @@ STAmount LedgerEntrySet::accountHolds(const uint160& uAccountID, const uint160& // Use when you need a default for rippling uAccountID's currency. // XXX Should take into account quality? // --> saDefault/currency/issuer -// --> bAvail: true to include going into debt. // <-- saFunds: Funds available. May be negative. // If the issuer is the same as uAccountID, funds are unlimited, use result is saDefault. -STAmount LedgerEntrySet::accountFunds(const uint160& uAccountID, const STAmount& saDefault, bool bAvail) +STAmount LedgerEntrySet::accountFunds(const uint160& uAccountID, const STAmount& saDefault) { STAmount saFunds; @@ -1103,13 +1085,12 @@ STAmount LedgerEntrySet::accountFunds(const uint160& uAccountID, const STAmount& } else { - saFunds = accountHolds(uAccountID, saDefault.getCurrency(), saDefault.getIssuer(), bAvail); + saFunds = accountHolds(uAccountID, saDefault.getCurrency(), saDefault.getIssuer()); - cLog(lsINFO) << boost::str(boost::format("accountFunds: uAccountID=%s saDefault=%s saFunds=%s bAvail=%d") + cLog(lsINFO) << boost::str(boost::format("accountFunds: uAccountID=%s saDefault=%s saFunds=%s") % RippleAddress::createHumanAccountID(uAccountID) % saDefault.getFullText() - % saFunds.getFullText() - % bAvail); + % saFunds.getFullText()); } return saFunds; diff --git a/src/cpp/ripple/LedgerEntrySet.h b/src/cpp/ripple/LedgerEntrySet.h index 4ac46e6b9..15747a493 100644 --- a/src/cpp/ripple/LedgerEntrySet.h +++ b/src/cpp/ripple/LedgerEntrySet.h @@ -119,13 +119,13 @@ public: uint32 rippleQualityOut(const uint160& uToAccountID, const uint160& uFromAccountID, const uint160& uCurrencyID) { return rippleQualityIn(uToAccountID, uFromAccountID, uCurrencyID, sfLowQualityOut, sfHighQualityOut); } - STAmount rippleHolds(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID, bool bAvail=false); + STAmount rippleHolds(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID); STAmount rippleTransferFee(const uint160& uSenderID, const uint160& uReceiverID, const uint160& uIssuerID, const STAmount& saAmount); TER rippleCredit(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount, bool bCheckIssuer=true); TER rippleSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount, STAmount& saActual); - STAmount accountHolds(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID, bool bAvail=false); - STAmount accountFunds(const uint160& uAccountID, const STAmount& saDefault, bool bAvail=false); + STAmount accountHolds(const uint160& uAccountID, const uint160& uCurrencyID, const uint160& uIssuerID); + STAmount accountFunds(const uint160& uAccountID, const STAmount& saDefault); TER accountSend(const uint160& uSenderID, const uint160& uReceiverID, const STAmount& saAmount); TER trustCreate( diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index fc3d21529..ec6b9192b 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -117,8 +117,8 @@ TER OfferCreateTransactor::takeOffers( cLog(lsINFO) << "takeOffers: saOfferPays=" << saOfferPays.getFullText(); - STAmount saOfferFunds = mEngine->getNodes().accountFunds(uOfferOwnerID, saOfferPays, true); - STAmount saTakerFunds = mEngine->getNodes().accountFunds(uTakerAccountID, saTakerPays, true); + STAmount saOfferFunds = mEngine->getNodes().accountFunds(uOfferOwnerID, saOfferPays); + STAmount saTakerFunds = mEngine->getNodes().accountFunds(uTakerAccountID, saTakerPays); SLE::pointer sleOfferAccount; // Owner of offer. if (!saOfferFunds.isPositive()) @@ -327,7 +327,7 @@ TER OfferCreateTransactor::doApply() terResult = temBAD_ISSUER; } - else if (!mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).isPositive()) + else if (!mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets).isPositive()) { cLog(lsWARNING) << "doOfferCreate: delay: Offers must be at least partially funded."; @@ -387,7 +387,7 @@ TER OfferCreateTransactor::doApply() cLog(lsWARNING) << "doOfferCreate: takeOffers: saTakerPays=" << saTakerPays.getFullText(); cLog(lsWARNING) << "doOfferCreate: takeOffers: saTakerGets=" << saTakerGets.getFullText(); cLog(lsWARNING) << "doOfferCreate: takeOffers: mTxnAccountID=" << RippleAddress::createHumanAccountID(mTxnAccountID); - cLog(lsWARNING) << "doOfferCreate: takeOffers: FUNDS=" << mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).getFullText(); + cLog(lsWARNING) << "doOfferCreate: takeOffers: FUNDS=" << mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets).getFullText(); // cLog(lsWARNING) << "doOfferCreate: takeOffers: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); // cLog(lsWARNING) << "doOfferCreate: takeOffers: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); @@ -395,7 +395,7 @@ TER OfferCreateTransactor::doApply() if (tesSUCCESS != terResult || !saTakerPays // Wants nothing more. || !saTakerGets // Offering nothing more. - || !mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets, true).isPositive()) // Not funded. + || !mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets).isPositive()) // Not funded. { // Complete as is. nothing(); From e1330badda4a9a54c1a995ee70c10f4a34f77ae4 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 25 Dec 2012 17:20:04 -0800 Subject: [PATCH 097/525] Raise number of entries in directory nodes. --- src/cpp/ripple/LedgerEntrySet.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 3fdedb4d6..50183f3e0 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -14,8 +14,7 @@ DECLARE_INSTANCE(LedgerEntrySet) // #define META_DEBUG -// Small for testing, should likely be 32 or 64. -#define DIR_NODE_MAX 2 +#define DIR_NODE_MAX 32 void LedgerEntrySet::init(Ledger::ref ledger, const uint256& transactionID, uint32 ledgerID) { From dc578a8085b4537b1728f4dc4a15a89f6e30f1b6 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 25 Dec 2012 18:08:13 -0800 Subject: [PATCH 098/525] Push clean up code for bad ripple nodes. --- src/cpp/ripple/LedgerEntrySet.cpp | 45 ++++++++++++++++++++++----- src/cpp/ripple/LedgerEntrySet.h | 3 +- src/cpp/ripple/TrustSetTransactor.cpp | 6 ++-- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 50183f3e0..9508bf6ba 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -621,7 +621,8 @@ TER LedgerEntrySet::dirDelete( const uint64& uNodeDir, // --> Node containing entry. const uint256& uRootIndex, // --> The index of the base of the directory. Nodes are based off of this. const uint256& uLedgerIndex, // --> Value to remove from directory. - const bool bStable) // --> True, not to change relative order of entries. + const bool bStable, // --> True, not to change relative order of entries. + const bool bSoft) // --> True, uNodeDir is not hard and fast (pass uNodeDir=0). { uint64 uNodeCur = uNodeDir; SLE::pointer sleNode = entryCache(ltDIR_NODE, uNodeCur ? Ledger::getDirNodeIndex(uRootIndex, uNodeCur) : uRootIndex); @@ -634,8 +635,21 @@ TER LedgerEntrySet::dirDelete( % strHex(uNodeDir) % uLedgerIndex.ToString()); - assert(false); - return tefBAD_LEDGER; + if (!bSoft) + { + assert(false); + return tefBAD_LEDGER; + } + else if (uNodeDir < 20) + { + // Go the extra mile. Even if node doesn't exist, try the next node. + + return dirDelete(bKeepRoot, uNodeDir+1, uRootIndex, uLedgerIndex, bStable, true); + } + else + { + return tefBAD_LEDGER; + } } STVector256 svIndexes = sleNode->getFieldV256(sfIndexes); @@ -647,11 +661,24 @@ TER LedgerEntrySet::dirDelete( assert(vuiIndexes.end() != it); if (vuiIndexes.end() == it) { - assert(false); + if (!bSoft) + { + assert(false); - cLog(lsWARNING) << "dirDelete: no such entry"; + cLog(lsWARNING) << "dirDelete: no such entry"; - return tefBAD_LEDGER; + return tefBAD_LEDGER; + } + else if (uNodeDir < 20) + { + // Go the extra mile. Even if entry not in node, try the next node. + + return dirDelete(bKeepRoot, uNodeDir+1, uRootIndex, uLedgerIndex, bStable, true); + } + else + { + return tefBAD_LEDGER; + } } // Remove the element. @@ -866,8 +893,9 @@ void LedgerEntrySet::ownerCountAdjust(const uint160& uOwnerID, int iAmount, SLE: TER LedgerEntrySet::offerDelete(const SLE::pointer& sleOffer, const uint256& uOfferIndex, const uint160& uOwnerID) { + bool bOwnerNode = sleOffer->isFieldPresent(sfOwnerNode); // Detect legacy dirs. uint64 uOwnerNode = sleOffer->getFieldU64(sfOwnerNode); - TER terResult = dirDelete(false, uOwnerNode, Ledger::getOwnerDirIndex(uOwnerID), uOfferIndex, false); + TER terResult = dirDelete(false, uOwnerNode, Ledger::getOwnerDirIndex(uOwnerID), uOfferIndex, false, !bOwnerNode); if (tesSUCCESS == terResult) { @@ -876,7 +904,8 @@ TER LedgerEntrySet::offerDelete(const SLE::pointer& sleOffer, const uint256& uOf uint256 uDirectory = sleOffer->getFieldH256(sfBookDirectory); uint64 uBookNode = sleOffer->getFieldU64(sfBookNode); - terResult = dirDelete(false, uBookNode, uDirectory, uOfferIndex, true); + // Offer delete is always hard. Always have hints. + terResult = dirDelete(false, uBookNode, uDirectory, uOfferIndex, true, true); } entryDelete(sleOffer); diff --git a/src/cpp/ripple/LedgerEntrySet.h b/src/cpp/ripple/LedgerEntrySet.h index 15747a493..159ef4374 100644 --- a/src/cpp/ripple/LedgerEntrySet.h +++ b/src/cpp/ripple/LedgerEntrySet.h @@ -97,7 +97,8 @@ public: const uint64& uNodeDir, // Node item is mentioned in. const uint256& uRootIndex, const uint256& uLedgerIndex, // Item being deleted - const bool bStable); + const bool bStable, + const bool bSoft); bool dirFirst(const uint256& uRootIndex, SLE::pointer& sleNode, unsigned int& uDirEntry, uint256& uEntryIndex); bool dirNext(const uint256& uRootIndex, SLE::pointer& sleNode, unsigned int& uDirEntry, uint256& uEntryIndex); diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index abb6cfbc0..8262eb063 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -221,16 +221,18 @@ TER TrustSetTransactor::doApply() { // Can delete. + bool bLowNode = sleRippleState->isFieldPresent(sfLowNode); // Detect legacy dirs. + bool bHighNode = sleRippleState->isFieldPresent(sfHighNode); uint64 uLowNode = sleRippleState->getFieldU64(sfLowNode); uint64 uHighNode = sleRippleState->getFieldU64(sfHighNode); cLog(lsTRACE) << "doTrustSet: Deleting ripple line: low"; - terResult = mEngine->getNodes().dirDelete(false, uLowNode, Ledger::getOwnerDirIndex(uLowAccountID), sleRippleState->getIndex(), false); + terResult = mEngine->getNodes().dirDelete(false, uLowNode, Ledger::getOwnerDirIndex(uLowAccountID), sleRippleState->getIndex(), false, !bLowNode); if (tesSUCCESS == terResult) { cLog(lsTRACE) << "doTrustSet: Deleting ripple line: high"; - terResult = mEngine->getNodes().dirDelete(false, uHighNode, Ledger::getOwnerDirIndex(uHighAccountID), sleRippleState->getIndex(), false); + terResult = mEngine->getNodes().dirDelete(false, uHighNode, Ledger::getOwnerDirIndex(uHighAccountID), sleRippleState->getIndex(), false, !bHighNode); } cLog(lsINFO) << "doTrustSet: Deleting ripple line: state"; From f685e9e9ee3481126c16fae671a3e6e98c641905 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 25 Dec 2012 18:28:57 -0800 Subject: [PATCH 099/525] Get rid of assert that prevented all of the extra mile. --- src/cpp/ripple/LedgerEntrySet.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 9508bf6ba..d0affac0c 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -658,7 +658,6 @@ TER LedgerEntrySet::dirDelete( it = std::find(vuiIndexes.begin(), vuiIndexes.end(), uLedgerIndex); - assert(vuiIndexes.end() != it); if (vuiIndexes.end() == it) { if (!bSoft) From be2e55d49c9ace31709ec33c4c6fe7ea0d6b5369 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 25 Dec 2012 21:05:12 -0800 Subject: [PATCH 100/525] Fix some cases where the acquire engine can stall. --- src/cpp/ripple/Ledger.cpp | 9 ++++-- src/cpp/ripple/LedgerAcquire.cpp | 3 ++ src/cpp/ripple/LedgerMaster.cpp | 54 +++++++++++++++++++++++++++++--- src/cpp/ripple/LedgerMaster.h | 5 ++- 4 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 7cad5e55b..aa8b16d57 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -1176,8 +1176,13 @@ void Ledger::pendSave(bool fromConsensus) void Ledger::decPendingSaves() { - boost::recursive_mutex::scoped_lock sl(sPendingSaveLock); - --sPendingSaves; + { + boost::recursive_mutex::scoped_lock sl(sPendingSaveLock); + --sPendingSaves; + if (sPendingSaves != 0) + return; + } + theApp->getLedgerMaster().resumeAcquiring(); } void Ledger::ownerDirDescriber(SLE::ref sle, const uint160& owner) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 2335813ba..3f0d6ac32 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -124,7 +124,10 @@ void LedgerAcquire::onTimer(bool progress) else if (!progress) { if (!getPeerCount()) + { addPeers(); + resetTimer(); + } else trigger(Peer::pointer(), true); } diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 4f454408f..be3ba6963 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -171,8 +171,46 @@ static bool shouldAcquire(uint32 currentLedger, uint32 ledgerHistory, uint32 can return ret; } +void LedgerMaster::resumeAcquiring() +{ + boost::recursive_mutex::scoped_lock ml(mLock); + if (!mTooFast) + return; + mTooFast = false; + + if (mMissingLedger && (mMissingLedger->isComplete() || mMissingLedger->isFailed())) + mMissingLedger.reset(); + + if (mMissingLedger || !theConfig.LEDGER_HISTORY) + { + tLog(mMissingLedger, lsDEBUG) << "Fetch already in progress, not resuming"; + return; + } + + uint32 prevMissing = mCompleteLedgers.prevMissing(mFinalizedLedger->getLedgerSeq()); + if (prevMissing == RangeSet::RangeSetAbsent) + { + cLog(lsDEBUG) << "no prior missing ledger, not resuming"; + return; + } + if (shouldAcquire(mCurrentLedger->getLedgerSeq(), theConfig.LEDGER_HISTORY, prevMissing)) + { + cLog(lsINFO) << "Resuming at " << prevMissing; + assert(!mCompleteLedgers.hasValue(prevMissing)); + Ledger::pointer nextLedger = getLedgerBySeq(prevMissing + 1); + if (nextLedger) + acquireMissingLedger(nextLedger->getParentHash(), nextLedger->getLedgerSeq() - 1); + else + { + mCompleteLedgers.clearValue(prevMissing); + cLog(lsWARNING) << "We have a gap at: " << prevMissing + 1; + } + } +} + void LedgerMaster::setFullLedger(Ledger::ref ledger) { // A new ledger has been accepted as part of the trusted chain + cLog(lsDEBUG) << "Ledger " << ledger->getLedgerSeq() << " accepted :" << ledger->getHash(); boost::recursive_mutex::scoped_lock ml(mLock); @@ -197,10 +235,14 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) mMissingLedger.reset(); if (mMissingLedger || !theConfig.LEDGER_HISTORY) - return; - - if (Ledger::getPendingSaves() > 3) { + tLog(mMissingLedger, lsDEBUG) << "Fetch already in progress, " << mMissingLedger->getTimeouts() << " timeouts"; + return; + } + + if (Ledger::getPendingSaves() > 2) + { + mTooFast = true; cLog(lsINFO) << "Too many pending ledger saves"; return; } @@ -217,10 +259,14 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) { uint32 prevMissing = mCompleteLedgers.prevMissing(ledger->getLedgerSeq()); if (prevMissing == RangeSet::RangeSetAbsent) + { + cLog(lsDEBUG) << "no prior missing ledger"; return; + } + cLog(lsTRACE) << "Ledger " << prevMissing << " is missing"; if (shouldAcquire(mCurrentLedger->getLedgerSeq(), theConfig.LEDGER_HISTORY, prevMissing)) { - cLog(lsINFO) << "Ledger " << prevMissing << " is missing"; + cLog(lsINFO) << "Ledger " << prevMissing << " is needed"; assert(!mCompleteLedgers.hasValue(prevMissing)); Ledger::pointer nextLedger = getLedgerBySeq(prevMissing + 1); if (nextLedger) diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 801e2f8d7..8658f1b75 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -31,6 +31,7 @@ class LedgerMaster RangeSet mCompleteLedgers; LedgerAcquire::pointer mMissingLedger; uint32 mMissingSeq; + bool mTooFast; // We are acquiring faster than we're writing void applyFutureTransactions(uint32 ledgerIndex); bool isValidTransaction(const Transaction::pointer& trans); @@ -41,7 +42,7 @@ class LedgerMaster public: - LedgerMaster() : mHeldTransactions(uint256()), mMissingSeq(0) { ; } + LedgerMaster() : mHeldTransactions(uint256()), mMissingSeq(0), mTooFast(false) { ; } uint32 getCurrentLedgerIndex(); @@ -95,6 +96,8 @@ public: bool haveLedgerRange(uint32 from, uint32 to); + void resumeAcquiring(); + void sweep(void) { mLedgerHistory.sweep(); } }; From fa1db6001164bdc5448fcfa5a6c949d84f884f40 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 25 Dec 2012 21:07:53 -0800 Subject: [PATCH 101/525] Correctly check for acquire doneness. --- src/cpp/ripple/LedgerAcquire.h | 1 + src/cpp/ripple/LedgerMaster.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 2f9778c56..c677d6226 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -90,6 +90,7 @@ public: bool isBase() const { return mHaveBase; } bool isAcctStComplete() const { return mHaveState; } bool isTransComplete() const { return mHaveTransactions; } + bool isDone() const { return mAborted || isComplete() || isFailed(); } Ledger::pointer getLedger() { return mLedger; } void abort() { mAborted = true; } bool setAccept() { if (mAccept) return false; mAccept = true; return true; } diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index be3ba6963..f32749a6c 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -178,7 +178,7 @@ void LedgerMaster::resumeAcquiring() return; mTooFast = false; - if (mMissingLedger && (mMissingLedger->isComplete() || mMissingLedger->isFailed())) + if (mMissingLedger && mMissingLedger->isDone()) mMissingLedger.reset(); if (mMissingLedger || !theConfig.LEDGER_HISTORY) @@ -231,7 +231,7 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) } } - if (mMissingLedger && (mMissingLedger->isComplete() || mMissingLedger->isFailed())) + if (mMissingLedger && mMissingLedger->isDone()) mMissingLedger.reset(); if (mMissingLedger || !theConfig.LEDGER_HISTORY) From 79d139e2cecb20821289a4ab739d5f42e87305d8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 25 Dec 2012 23:00:39 -0800 Subject: [PATCH 102/525] Don't let a tranasction set acquire stall. --- src/cpp/ripple/LedgerConsensus.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 04e37d2c8..57d5a580d 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -67,6 +67,7 @@ void TransactionAcquire::onTimer(bool progress) BOOST_FOREACH(Peer::ref peer, peerList) peerHas(peer); } + resetTimer(); } else if (!progress) trigger(Peer::pointer(), true); From fa109a1aeecfcfce18d936afbbdd6e5ce2727139 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 26 Dec 2012 13:54:51 -0800 Subject: [PATCH 103/525] Don't use a shared_ptr where an auto_ptr will do. --- src/cpp/ripple/TransactionEngine.cpp | 4 ++-- src/cpp/ripple/Transactor.cpp | 18 +++++++++--------- src/cpp/ripple/Transactor.h | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index c2eca65f3..7a3af2d4c 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -93,8 +93,8 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa } #endif - Transactor::pointer transactor=Transactor::makeTransactor(txn,params,this); - if(transactor) + std::auto_ptr transactor = Transactor::makeTransactor(txn,params,this); + if (transactor.get() != NULL) { uint256 txID = txn.getTransactionID(); if (!txID) diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index fd187ab39..ff57daff5 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -11,26 +11,26 @@ SETUP_LOG(); -Transactor::pointer Transactor::makeTransactor(const SerializedTransaction& txn,TransactionEngineParams params, TransactionEngine* engine) +std::auto_ptr Transactor::makeTransactor(const SerializedTransaction& txn,TransactionEngineParams params, TransactionEngine* engine) { switch(txn.getTxnType()) { case ttPAYMENT: - return( Transactor::pointer(new PaymentTransactor(txn,params,engine)) ); + return std::auto_ptr(new PaymentTransactor(txn, params, engine)); case ttACCOUNT_SET: - return( Transactor::pointer(new AccountSetTransactor(txn,params,engine)) ); + return std::auto_ptr(new AccountSetTransactor(txn, params, engine)); case ttREGULAR_KEY_SET: - return( Transactor::pointer(new RegularKeySetTransactor(txn,params,engine)) ); + return std::auto_ptr(new RegularKeySetTransactor(txn, params, engine)); case ttTRUST_SET: - return( Transactor::pointer(new TrustSetTransactor(txn,params,engine)) ); + return std::auto_ptr(new TrustSetTransactor(txn, params, engine)); case ttOFFER_CREATE: - return( Transactor::pointer(new OfferCreateTransactor(txn,params,engine)) ); + return std::auto_ptr(new OfferCreateTransactor(txn, params, engine)); case ttOFFER_CANCEL: - return( Transactor::pointer(new OfferCancelTransactor(txn,params,engine)) ); + return std::auto_ptr(new OfferCancelTransactor(txn, params, engine)); case ttWALLET_ADD: - return( Transactor::pointer(new WalletAddTransactor(txn,params,engine)) ); + return std::auto_ptr(new WalletAddTransactor(txn, params, engine)); default: - return(Transactor::pointer()); + return std::auto_ptr(); } } diff --git a/src/cpp/ripple/Transactor.h b/src/cpp/ripple/Transactor.h index 1c456637d..62d2a5e45 100644 --- a/src/cpp/ripple/Transactor.h +++ b/src/cpp/ripple/Transactor.h @@ -33,7 +33,7 @@ protected: public: typedef boost::shared_ptr pointer; - static Transactor::pointer makeTransactor(const SerializedTransaction& txn,TransactionEngineParams params, TransactionEngine* engine); + static std::auto_ptr makeTransactor(const SerializedTransaction& txn,TransactionEngineParams params, TransactionEngine* engine); TER apply(); }; From dcd2fc9fab71fea38347627fcf17c41b8b3b1206 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 26 Dec 2012 14:05:58 -0800 Subject: [PATCH 104/525] Begin to sanitize the fee structure. Implement load scaling. --- src/cpp/ripple/RegularKeySetTransactor.cpp | 9 +++------ src/cpp/ripple/RegularKeySetTransactor.h | 2 +- src/cpp/ripple/Transactor.cpp | 7 ++++++- src/cpp/ripple/Transactor.h | 6 +++++- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/RegularKeySetTransactor.cpp b/src/cpp/ripple/RegularKeySetTransactor.cpp index f74b8f5a9..b2361c873 100644 --- a/src/cpp/ripple/RegularKeySetTransactor.cpp +++ b/src/cpp/ripple/RegularKeySetTransactor.cpp @@ -5,17 +5,14 @@ SETUP_LOG(); -void RegularKeySetTransactor::calculateFee() +uint64_t RegularKeySetTransactor::calculateBaseFee() { - Transactor::calculateFee(); - if ( !(mTxnAccount->getFlags() & lsfPasswordSpent) && (mSigningPubKey.getAccountID() == mTxnAccountID)) { // flag is armed and they signed with the right account - - mSourceBalance = mTxnAccount->getFieldAmount(sfBalance); - if(mSourceBalance < mFeeDue) mFeeDue = 0; + return 0; } + return Transactor::calculateBaseFee(); } diff --git a/src/cpp/ripple/RegularKeySetTransactor.h b/src/cpp/ripple/RegularKeySetTransactor.h index 35d744c8f..775bd0e01 100644 --- a/src/cpp/ripple/RegularKeySetTransactor.h +++ b/src/cpp/ripple/RegularKeySetTransactor.h @@ -2,7 +2,7 @@ class RegularKeySetTransactor : public Transactor { - void calculateFee(); + uint64_t calculateBaseFee(); public: RegularKeySetTransactor(const SerializedTransaction& txn,TransactionEngineParams params, TransactionEngine* engine) : Transactor(txn,params,engine) {} TER checkFee(); diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index ff57daff5..07e87592b 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -42,7 +42,12 @@ Transactor::Transactor(const SerializedTransaction& txn,TransactionEngineParams void Transactor::calculateFee() { - mFeeDue = theConfig.FEE_DEFAULT; + mFeeDue = STAmount(mEngine->getLedger()->scaleFeeLoad(calculateBaseFee())); +} + +uint64_t Transactor::calculateBaseFee() +{ + return theConfig.FEE_DEFAULT; } TER Transactor::payFee() diff --git a/src/cpp/ripple/Transactor.h b/src/cpp/ripple/Transactor.h index 62d2a5e45..c61878634 100644 --- a/src/cpp/ripple/Transactor.h +++ b/src/cpp/ripple/Transactor.h @@ -24,7 +24,11 @@ protected: TER checkSeq(); TER payFee(); - virtual void calculateFee(); + void calculateFee(); + + // Returns the fee, not scaled for load (Should be in fee units. FIXME) + virtual uint64_t calculateBaseFee(); + virtual TER checkSig(); virtual TER doApply()=0; From 829e359567ecab6293186c7433a18ace0864178a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 26 Dec 2012 14:26:34 -0800 Subject: [PATCH 105/525] Disallow non-native transaction fees, rather than throwing on a non-comparable compare. --- src/cpp/ripple/Transactor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index 07e87592b..047ddec61 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -62,7 +62,7 @@ TER Transactor::payFee() return telINSUF_FEE_P; } - if (saPaid.isNegative()) + if (saPaid.isNegative() || !saPaid.isNative()) return temBAD_AMOUNT; if (!saPaid) return tesSUCCESS; From 7c04eded0f3f6f8b7947b36530dbc94f4369e14b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 26 Dec 2012 22:30:18 -0800 Subject: [PATCH 106/525] Improve some consensus logging. --- src/cpp/ripple/LedgerConsensus.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 57d5a580d..9524c4c2a 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1198,12 +1198,7 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) uint32 closeTime = roundCloseTime(mOurPosition->getCloseTime()); - cLog(lsINFO) << "Computing new LCL based on network consensus"; - if (mHaveCorrectLCL) - { - cLog(lsINFO) << "CNF tx " << mOurPosition->getCurrentHash() << ", close " << closeTime; - cLog(lsINFO) << "CNF mode " << theApp->getOPs().getOperatingMode() << ", oldLCL " << mPrevLedgerHash; - } + cLog(lsDEBUG) << "Computing new LCL based on network consensus"; CanonicalTXSet failedTransactions(set->getHash()); @@ -1217,6 +1212,7 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) boost::shared_ptr acctNodes = newLCL->peekAccountStateMap()->disarmDirty(); boost::shared_ptr txnNodes = newLCL->peekTransactionMap()->disarmDirty(); + // write out dirty nodes (temporarily done here) Most come before setAccepted int fc; while ((fc = SHAMap::flushDirty(*acctNodes, 256, hotACCOUNT_NODE, newLCL->getLedgerSeq())) > 0) @@ -1229,9 +1225,14 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) { // we agreed to disagree closeTimeCorrect = false; closeTime = mPreviousLedger->getCloseTimeNC() + 1; - cLog(lsINFO) << "CNF badclose " << closeTime; } + cLog(lsINFO) << "Report: Prop=" << (mProposing ? "yes" : "no") << " val=" << (mValidating ? "yes" : "no") << + " corLCL=" << (mHaveCorrectLCL ? "yes" : "no") << " fail="<< (mConsensusFail ? "yes" : "no"); + cLog(lsINFO) << "Report: Prev = " << mPrevLedgerHash << ":" << mPreviousLedger->getLedgerSeq(); + cLog(lsINFO) << "Report: TxSt = " << set->getHash() << ", close " << closeTime << (closeTimeCorrect ? "" : "X"); + cLog(lsINFO) << "Report: NewL = " << newLCL->getHash() << ":" << newLCL->getLedgerSeq(); + newLCL->setAccepted(closeTime, mCloseResolution, closeTimeCorrect); newLCL->updateHash(); uint256 newLCLHash = newLCL->getHash(); From 54e4fcca4f7737c4128de78ec1c1923306ec7dd1 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 27 Dec 2012 01:55:17 -0800 Subject: [PATCH 107/525] Fix error code for bad fee. --- src/cpp/ripple/TransactionErr.cpp | 2 +- src/cpp/ripple/Transactor.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index 03c27da46..a6c444679 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -39,7 +39,7 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temMALFORMED, "temMALFORMED", "Malformed transaction." }, { temBAD_AMOUNT, "temBAD_AMOUNT", "Can only send positive amounts." }, { temBAD_AUTH_MASTER, "temBAD_AUTH_MASTER", "Auth for unclaimed account needs correct master key." }, - { temBAD_FEE, "temBAD_FEE", "Negative fee." }, + { temBAD_FEE, "temBAD_FEE", "Invalid fee, negative or not XRP." }, { temBAD_EXPIRATION, "temBAD_EXPIRATION", "Malformed." }, { temBAD_ISSUER, "temBAD_ISSUER", "Malformed." }, { temBAD_LIMIT, "temBAD_LIMIT", "Limits must be non-negative." }, diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index 047ddec61..22a19c670 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -63,7 +63,7 @@ TER Transactor::payFee() } if (saPaid.isNegative() || !saPaid.isNative()) - return temBAD_AMOUNT; + return temBAD_FEE; if (!saPaid) return tesSUCCESS; From 22973c1e5b6c9cc9bf7e72b36e72313417f1641a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 27 Dec 2012 10:40:53 -0800 Subject: [PATCH 108/525] Function to get reserve increment. --- src/cpp/ripple/Ledger.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/Ledger.h b/src/cpp/ripple/Ledger.h index 92d4d0d06..741177b05 100644 --- a/src/cpp/ripple/Ledger.h +++ b/src/cpp/ripple/Ledger.h @@ -301,10 +301,10 @@ public: SLE::pointer getRippleState(LedgerStateParms& parms, const uint256& uNode); SLE::pointer getRippleState(const uint256& uNode) - { - LedgerStateParms qry = lepNONE; - return getRippleState(qry, uNode); - } + { + LedgerStateParms qry = lepNONE; + return getRippleState(qry, uNode); + } SLE::pointer getRippleState(const RippleAddress& naA, const RippleAddress& naB, const uint160& uCurrency) { return getRippleState(getRippleStateIndex(naA, naB, uCurrency)); } @@ -330,6 +330,12 @@ public: return scaleFeeBase(static_cast(increments) * mReserveIncrement + mReserveBase); } + uint64 getReserveInc() + { + if (!mBaseFee) updateFees(); + return mReserveIncrement; + } + uint64 scaleFeeBase(uint64 fee); uint64 scaleFeeLoad(uint64 fee); From c09133fb6dcdf80a2f26daa2b9cd7dde89e048b7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 27 Dec 2012 10:41:10 -0800 Subject: [PATCH 109/525] Function to get load factors in machine understandable form. --- src/cpp/ripple/LoadManager.cpp | 6 ++++++ src/cpp/ripple/LoadManager.h | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/cpp/ripple/LoadManager.cpp b/src/cpp/ripple/LoadManager.cpp index ad40a174a..5eb9b8e5f 100644 --- a/src/cpp/ripple/LoadManager.cpp +++ b/src/cpp/ripple/LoadManager.cpp @@ -187,6 +187,12 @@ uint32 LoadFeeTrack::getLocalFee() return mLocalTxnLoadFee; } +uint32 LoadFeeTrack::getLoadFactor() +{ + boost::mutex::scoped_lock sl(mLock); + return std::max(mLocalTxnLoadFee, mRemoteTxnLoadFee); +} + void LoadFeeTrack::setRemoteFee(uint32 f) { boost::mutex::scoped_lock sl(mLock); diff --git a/src/cpp/ripple/LoadManager.h b/src/cpp/ripple/LoadManager.h index 30618d2c7..22baff69a 100644 --- a/src/cpp/ripple/LoadManager.h +++ b/src/cpp/ripple/LoadManager.h @@ -144,6 +144,9 @@ public: uint32 getRemoteFee(); uint32 getLocalFee(); + uint32 getLoadBase() { return lftNormalFee; } + uint32 getLoadFactor(); + Json::Value getJson(uint64 baseFee, uint32 referenceFeeUnits); void setRemoteFee(uint32); From 36f89edb74f88cf527a24493ff8571595964738f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 27 Dec 2012 10:41:32 -0800 Subject: [PATCH 110/525] Avoid a reference increment where it's not needed. --- src/cpp/ripple/LedgerMaster.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 8658f1b75..0a875be15 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -49,10 +49,10 @@ public: ScopedLock getLock() { return ScopedLock(mLock); } // The current ledger is the ledger we believe new transactions should go in - Ledger::pointer getCurrentLedger() { return mCurrentLedger; } + Ledger::ref getCurrentLedger() { return mCurrentLedger; } // The finalized ledger is the last closed/accepted ledger - Ledger::pointer getClosedLedger() { return mFinalizedLedger; } + Ledger::ref getClosedLedger() { return mFinalizedLedger; } TER doTransaction(const SerializedTransaction& txn, TransactionEngineParams params); From 33aee3705a143beedf378ec3cad3c5d86c23e606 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 27 Dec 2012 10:42:58 -0800 Subject: [PATCH 111/525] Pass fee information to client. --- src/cpp/ripple/NetworkOPs.cpp | 66 +++++++++++++++++++++-------------- src/cpp/ripple/NetworkOPs.h | 6 ++-- 2 files changed, 43 insertions(+), 29 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 1808e94f4..d21e225bb 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1,6 +1,9 @@ #include "NetworkOPs.h" +#include +#include + #include "utils.h" #include "Application.h" #include "Transaction.h" @@ -9,8 +12,6 @@ #include "Log.h" #include "RippleAddress.h" -#include -#include // This is the primary interface into the "client" portion of the program. // Code that wants to do normal operations on the network such as @@ -638,8 +639,6 @@ bool NetworkOPs::checkLastClosedLedger(const std::vector& peerLis // agree? And do we have no better ledger available? // If so, we are either tracking or full. - // FIXME: We may have a ledger with many recent validations but that no directly-connected - // node is using. THis is kind of fundamental. cLog(lsTRACE) << "NetworkOPs::checkLastClosedLedger"; Ledger::pointer ourClosed = mLedgerMaster->getClosedLedger(); @@ -958,6 +957,26 @@ void NetworkOPs::consensusViewChange() setMode(omCONNECTED); } +void NetworkOPs::pubServer() +{ + boost::recursive_mutex::scoped_lock sl(mMonitorLock); + + if (!mSubServer.empty()) + { + Json::Value jvObj(Json::objectValue); + + jvObj["type"] = "serverStatus"; + jvObj["server_status"] = strOperatingMode(); + jvObj["load_base"] = theApp->getFeeTrack().getLoadBase(); + jvObj["load_fee"] = theApp->getFeeTrack().getLoadFactor(); + + BOOST_FOREACH(InfoSub* ispListener, mSubServer) + { + ispListener->send(jvObj); + } + } +} + void NetworkOPs::setMode(OperatingMode om) { if (mMode == om) return; @@ -967,26 +986,8 @@ void NetworkOPs::setMode(OperatingMode om) mMode = om; - Log lg((om < mMode) ? lsWARNING : lsINFO); - - lg << "STATE->" << strOperatingMode(); - - { - boost::recursive_mutex::scoped_lock sl(mMonitorLock); - - if (!mSubServer.empty()) - { - Json::Value jvObj(Json::objectValue); - - jvObj["type"] = "serverStatus"; - jvObj["server_status"] = strOperatingMode(); - - BOOST_FOREACH(InfoSub* ispListener, mSubServer) - { - ispListener->send(jvObj); - } - } - } + Log((om < mMode) ? lsWARNING : lsINFO) << "STATE->" << strOperatingMode(); + pubServer(); } @@ -1143,6 +1144,11 @@ void NetworkOPs::pubLedger(Ledger::ref lpAccepted) jvObj["ledger_hash"] = lpAccepted->getHash().ToString(); jvObj["ledger_time"] = Json::Value::UInt(utFromSeconds(lpAccepted->getCloseTimeNC())); + jvObj["fee_ref"] = Json::UInt(lpAccepted->getReferenceFeeUnits()); + jvObj["fee_base"] = Json::UInt(lpAccepted->getBaseFee()); + jvObj["reserve_base"] = Json::UInt(lpAccepted->getReserve(0)); + jvObj["reserve_inc"] = Json::UInt(lpAccepted->getReserveInc()); + BOOST_FOREACH(InfoSub* ispListener, mSubLedger) { ispListener->send(jvObj); @@ -1410,9 +1416,15 @@ void NetworkOPs::unsubAccountChanges(InfoSub* ispListener) // <-- bool: true=added, false=already there bool NetworkOPs::subLedger(InfoSub* ispListener, Json::Value& jvResult) { - jvResult["ledger_index"] = getClosedLedger()->getLedgerSeq(); - jvResult["ledger_hash"] = getClosedLedger()->getHash().ToString(); - jvResult["ledger_time"] = Json::Value::UInt(utFromSeconds(getClosedLedger()->getCloseTimeNC())); + Ledger::pointer closedLgr = getClosedLedger(); + jvResult["ledger_index"] = closedLgr->getLedgerSeq(); + jvResult["ledger_hash"] = closedLgr->getHash().ToString(); + jvResult["ledger_time"] = Json::Value::UInt(utFromSeconds(closedLgr->getCloseTimeNC())); + + jvResult["fee_ref"] = Json::UInt(closedLgr->getReferenceFeeUnits()); + jvResult["fee_base"] = Json::UInt(closedLgr->getBaseFee()); + jvResult["reserve_base"] = Json::UInt(closedLgr->getReserve(0)); + jvResult["reserve_inc"] = Json::UInt(closedLgr->getReserveInc()); return mSubLedger.insert(ispListener).second; } diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 02822b54d..fcf77caa9 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -112,6 +112,8 @@ protected: void pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTransaction& stTxn, TER terResult,bool accepted,TransactionMetaSet::pointer& meta); std::map getAffectedAccounts(const SerializedTransaction& stTxn); + void pubServer(); + public: NetworkOPs(boost::asio::io_service& io_service, LedgerMaster* pLedgerMaster); @@ -126,8 +128,8 @@ public: OperatingMode getOperatingMode() { return mMode; } std::string strOperatingMode(); - Ledger::pointer getClosedLedger() { return mLedgerMaster->getClosedLedger(); } - Ledger::pointer getCurrentLedger() { return mLedgerMaster->getCurrentLedger(); } + Ledger::ref getClosedLedger() { return mLedgerMaster->getClosedLedger(); } + Ledger::ref getCurrentLedger() { return mLedgerMaster->getCurrentLedger(); } Ledger::pointer getLedgerByHash(const uint256& hash) { return mLedgerMaster->getLedgerByHash(hash); } Ledger::pointer getLedgerBySeq(const uint32 seq) { return mLedgerMaster->getLedgerBySeq(seq); } From 3a673654b637220fa3f113ed19797524172a4b84 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 27 Dec 2012 16:54:11 -0800 Subject: [PATCH 112/525] Make sure clients get the initial load information. --- src/cpp/ripple/NetworkOPs.cpp | 3 +++ src/cpp/ripple/RPCHandler.cpp | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index d21e225bb..04553a1e8 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1444,6 +1444,9 @@ bool NetworkOPs::subServer(InfoSub* ispListener, Json::Value& jvResult) getRand(uRandom.begin(), uRandom.size()); jvResult["random"] = uRandom.ToString(); + jvResult["server_status"] = mNetOps->strOperatingMode(); + jvObj["load_base"] = theApp->getFeeTrack().getLoadBase(); + jvObj["load_fee"] = theApp->getFeeTrack().getLoadFactor(); return mSubServer.insert(ispListener).second; } diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 280ad703e..25deb2cfa 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2151,7 +2151,6 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) if(streamName=="server") { mNetOps->subServer(mInfoSub, jvResult); - jvResult["server_status"] = mNetOps->strOperatingMode(); } else if(streamName=="ledger") { From 9f072fcac641eaa6e9827e351a4dd3e730e5995a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 27 Dec 2012 16:55:49 -0800 Subject: [PATCH 113/525] Fixes. --- src/cpp/ripple/NetworkOPs.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 04553a1e8..110479377 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1443,10 +1443,10 @@ bool NetworkOPs::subServer(InfoSub* ispListener, Json::Value& jvResult) jvResult["stand_alone"] = theConfig.RUN_STANDALONE; getRand(uRandom.begin(), uRandom.size()); - jvResult["random"] = uRandom.ToString(); - jvResult["server_status"] = mNetOps->strOperatingMode(); - jvObj["load_base"] = theApp->getFeeTrack().getLoadBase(); - jvObj["load_fee"] = theApp->getFeeTrack().getLoadFactor(); + jvResult["random"] = uRandom.ToString(); + jvResult["server_status"] = strOperatingMode(); + jvResult["load_base"] = theApp->getFeeTrack().getLoadBase(); + jvResult["load_fee"] = theApp->getFeeTrack().getLoadFactor(); return mSubServer.insert(ispListener).second; } From e4318d266b02d47cebc02bd8044294881447bd20 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 27 Dec 2012 17:48:55 -0800 Subject: [PATCH 114/525] JS: Add some place holders for the fee stuff. --- src/js/remote.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/js/remote.js b/src/js/remote.js index eaca50651..e87feead6 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -206,6 +206,14 @@ var Remote = function (opts, trace) { this.retry_timer = undefined; this.retry = undefined; + this._load_base = 256; + this._load_fee = 256; + this._load_base = undefined; + this._load_fee = undefined; + this._reserve_base = undefined; + this._reserve_inc = undefined; + this._server_status = undefined; + // Cache information for accounts. this.accounts = { // Consider sequence numbers stable if you know you're not generating bad transactions. @@ -864,6 +872,15 @@ Remote.prototype._server_subscribe = function () { self.emit('ledger_closed', message); } + // FIXME Use this to estimate fee. + self._load_base = message.load_base || 256; + self._load_fee = message.load_fee || 256; + self._load_base = message.fee_ref; + self._load_fee = message.fee_base; + self._reserve_base = message.reverse_base; + self._reserve_inc = message.reserve_inc; + self._server_status = message.server_status; + if (message.server_status === 'tracking' || message.server_status === 'full') { self._set_state('online'); } From a169167030c0acd5374c30c2b28f6280a50167b5 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 27 Dec 2012 20:25:12 -0800 Subject: [PATCH 115/525] Fix a bug where a node doesn't get a chance to finish acquiring a TX set before all nodes forget it because they're done with it, leaving a node behind the consensus. --- src/cpp/ripple/LedgerConsensus.cpp | 4 +++- src/cpp/ripple/NetworkOPs.cpp | 21 +++++++++++++++++++++ src/cpp/ripple/NetworkOPs.h | 3 +++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 9524c4c2a..063326912 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -827,7 +827,6 @@ SHAMap::pointer LedgerConsensus::getTransactionTree(const uint256& hash, bool do SHAMap::pointer currentMap = theApp->getLedgerMaster().getCurrentLedger()->peekTransactionMap(); if (currentMap->getHash() == hash) { - cLog(lsINFO) << "node proposes our open transaction set"; currentMap = currentMap->snapShot(false); mapComplete(hash, currentMap, false); return currentMap; @@ -1193,6 +1192,9 @@ uint32 LedgerConsensus::roundCloseTime(uint32 closeTime) void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) { + if (set->getHash().isNonZero()) + theApp->getOPs().takePosition(mPreviousLedger->getLedgerSeq(), set); + boost::recursive_mutex::scoped_lock masterLock(theApp->getMasterLock()); assert(set->getHash() == mOurPosition->getCurrentHash()); diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 110479377..270779883 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -906,11 +906,32 @@ void NetworkOPs::processTrustedProposal(LedgerProposal::pointer proposal, SHAMap::pointer NetworkOPs::getTXMap(const uint256& hash) { + std::map >::iterator it = mRecentPositions.find(hash); + if (it != mRecentPositions.end()) + return it->second.second; if (!haveConsensusObject()) return SHAMap::pointer(); return mConsensus->getTransactionTree(hash, false); } +void NetworkOPs::takePosition(int seq, SHAMap::ref position) +{ + mRecentPositions[position->getHash()] = std::make_pair(seq, position); + if (mRecentPositions.size() > 4) + { + std::map >::iterator it = mRecentPositions.begin(); + while (it != mRecentPositions.end()) + { + if (it->second.first < (seq - 2)) + { + mRecentPositions.erase(it); + return; + } + ++it; + } + } +} + SMAddNode NetworkOPs::gotTXData(const boost::shared_ptr& peer, const uint256& hash, const std::list& nodeIDs, const std::list< std::vector >& nodeData) { diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index fcf77caa9..b3bd97f40 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -88,6 +88,8 @@ protected: uint32 mLastValidationTime; SerializedValidation::pointer mLastValidation; + // Recent positions taken + std::map > mRecentPositions; // XXX Split into more locks. boost::recursive_mutex mMonitorLock; @@ -209,6 +211,7 @@ public: SMAddNode gotTXData(const boost::shared_ptr& peer, const uint256& hash, const std::list& nodeIDs, const std::list< std::vector >& nodeData); bool recvValidation(const SerializedValidation::pointer& val); + void takePosition(int seq, SHAMap::ref position); SHAMap::pointer getTXMap(const uint256& hash); bool hasTXSet(const boost::shared_ptr& peer, const uint256& set, ripple::TxSetStatus status); void mapComplete(const uint256& hash, SHAMap::ref map); From eaa1ce55ba834849d633f8ddb277e750a759bc21 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 28 Dec 2012 14:16:28 -0800 Subject: [PATCH 116/525] Remove bad doc from ripple-example.txt. --- ripple-example.txt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ripple-example.txt b/ripple-example.txt index 034ccb8dc..6e30aa3cc 100644 --- a/ripple-example.txt +++ b/ripple-example.txt @@ -96,13 +96,6 @@ # [currencies]: # This section allows a site to declare currencies it currently issues. # -# [ledger_history]: -# To serve clients, servers need historical ledger data. This sets the number of -# past ledgers to acquire on server startup and the minimum to maintain while -# running. Servers that don't need to serve clients can set this to "none" or "off". -# Servers that want complete history can set this to "full" or "on". -# The default is 256 ledgers. - [validation_public_key] n9MZTnHe5D5Q2cgE8oV2usFwRqhUvEA8MwP5Mu1XVD6TxmssPRev From a83e00610a8276a3966e34454b92e5d57bb6a79b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 28 Dec 2012 16:52:12 -0800 Subject: [PATCH 117/525] Clarify the direction requests go --- src/cpp/ripple/HTTPRequest.cpp | 2 ++ src/cpp/ripple/HTTPRequest.h | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/HTTPRequest.cpp b/src/cpp/ripple/HTTPRequest.cpp index c3f365e0e..6883b190b 100644 --- a/src/cpp/ripple/HTTPRequest.cpp +++ b/src/cpp/ripple/HTTPRequest.cpp @@ -7,6 +7,8 @@ #include "Log.h" SETUP_LOG(); +// Logic to handle incoming HTTP reqests + void HTTPRequest::reset() { vHeaders.clear(); diff --git a/src/cpp/ripple/HTTPRequest.h b/src/cpp/ripple/HTTPRequest.h index 596ce8924..1ad3081f0 100644 --- a/src/cpp/ripple/HTTPRequest.h +++ b/src/cpp/ripple/HTTPRequest.h @@ -16,7 +16,7 @@ enum HTTPRequestAction }; class HTTPRequest -{ // an HTTP request in progress +{ // an HTTP request we are handling from a client protected: enum state @@ -58,4 +58,4 @@ public: int getDataSize() { return iDataSize; } }; -#endif \ No newline at end of file +#endif From 3c9be6f549bcf4aab1f48f13375b57592a101a88 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 28 Dec 2012 19:46:01 -0800 Subject: [PATCH 118/525] Remove FirstLedgerSequence and mark it deprecated --- src/cpp/ripple/Ledger.cpp | 10 ++++++++-- src/cpp/ripple/LedgerFormats.cpp | 2 +- src/cpp/ripple/SerializeProto.h | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index aa8b16d57..185f5d983 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -647,6 +647,14 @@ Json::Value Ledger::getJson(int options) } ledger["accountState"] = state; } + if (mAccountStateMap && ((options & LEDGER_JSON_HISTORY) != 0)) + { + SLE::pointer hashIndex = getSLE(getLedgerHashIndex()); + if (hashIndex) + ledger["previousHashes"] = hashIndex->getJson(0); + else + ledger["previousHashes"] = "missing"; + } ledger["seqNum"] = boost::lexical_cast(mLedgerSeq); return ledger; } @@ -1112,7 +1120,6 @@ void Ledger::updateSkipList() if (!skipList) { skipList = boost::make_shared(ltLEDGER_HASHES, hash); - skipList->setFieldU32(sfFirstLedgerSequence, prevIndex); } else hashes = skipList->getFieldV256(sfHashes).peekValue(); @@ -1135,7 +1142,6 @@ void Ledger::updateSkipList() if (!skipList) { skipList = boost::make_shared(ltLEDGER_HASHES, hash); - skipList->setFieldU32(sfFirstLedgerSequence, prevIndex); } else hashes = skipList->getFieldV256(sfHashes).peekValue(); diff --git a/src/cpp/ripple/LedgerFormats.cpp b/src/cpp/ripple/LedgerFormats.cpp index cca4ba8c0..c1c36bb7b 100644 --- a/src/cpp/ripple/LedgerFormats.cpp +++ b/src/cpp/ripple/LedgerFormats.cpp @@ -96,7 +96,7 @@ static bool LEFInit() ; DECLARE_LEF(LedgerHashes, ltLEDGER_HASHES) - << SOElement(sfFirstLedgerSequence, SOE_OPTIONAL) + << SOElement(sfFirstLedgerSequence, SOE_OPTIONAL) // Remove if we do a ledger restart << SOElement(sfLastLedgerSequence, SOE_OPTIONAL) << SOElement(sfHashes, SOE_REQUIRED) ; diff --git a/src/cpp/ripple/SerializeProto.h b/src/cpp/ripple/SerializeProto.h index cc8a932b7..57ef55200 100644 --- a/src/cpp/ripple/SerializeProto.h +++ b/src/cpp/ripple/SerializeProto.h @@ -56,7 +56,7 @@ FIELD(BondAmount, UINT32, 23) FIELD(LoadFee, UINT32, 24) FIELD(OfferSequence, UINT32, 25) - FIELD(FirstLedgerSequence, UINT32, 26) + FIELD(FirstLedgerSequence, UINT32, 26) // Deprecated: do not use FIELD(LastLedgerSequence, UINT32, 27) FIELD(TransactionIndex, UINT32, 28) FIELD(OperationLimit, UINT32, 29) From 3ff4dc99ad015f626e66e353a1f2ff0ff4e93030 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 28 Dec 2012 20:40:30 -0800 Subject: [PATCH 119/525] Function to retrieve previous ledger hashes from the ledger. --- src/cpp/ripple/Ledger.cpp | 42 +++++++++++++++++++++++++++++++-------- src/cpp/ripple/Ledger.h | 1 + 2 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 185f5d983..75bac9ba4 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -647,14 +647,6 @@ Json::Value Ledger::getJson(int options) } ledger["accountState"] = state; } - if (mAccountStateMap && ((options & LEDGER_JSON_HISTORY) != 0)) - { - SLE::pointer hashIndex = getSLE(getLedgerHashIndex()); - if (hashIndex) - ledger["previousHashes"] = hashIndex->getJson(0); - else - ledger["previousHashes"] = "missing"; - } ledger["seqNum"] = boost::lexical_cast(mLedgerSeq); return ledger; } @@ -962,6 +954,40 @@ int Ledger::getLedgerHashOffset(uint32 desiredLedgerIndex, uint32 currentLedgerI return currentLedgerIndex - desiredLedgerIndex - 1; } +uint256 Ledger::getLedgerHash(uint32 ledgerIndex) +{ // return the hash of the specified ledger, 0 if not available + + // easy cases + if (ledgerIndex > mLedgerSeq) + return uint256(); + if (ledgerIndex == mLedgerSeq) + return getHash(); + if (ledgerIndex == (mLedgerSeq - 1)) + return mParentHash; + + // within 255 + int offset = getLedgerHashOffset(ledgerIndex, mLedgerSeq); + if (offset != -1) + { + SLE::pointer hashIndex = getSLE(getLedgerHashIndex()); + if (hashIndex) + return hashIndex->getFieldV256(sfHashes).peekValue().at(offset); + else + assert(false); + } + + if ((ledgerIndex & 0xff) != 0) + return uint256(); + + SLE::pointer hashIndex = getSLE(getLedgerHashIndex(ledgerIndex)); + if (hashIndex) + return hashIndex->getFieldV256(sfHashes).peekValue().at(getLedgerHashOffset(ledgerIndex, mLedgerSeq)); + else + assert(false); + + return uint256(); +} + uint256 Ledger::getBookBase(const uint160& uTakerPaysCurrency, const uint160& uTakerPaysIssuerID, const uint160& uTakerGetsCurrency, const uint160& uTakerGetsIssuerID) { diff --git a/src/cpp/ripple/Ledger.h b/src/cpp/ripple/Ledger.h index 741177b05..b9cf05892 100644 --- a/src/cpp/ripple/Ledger.h +++ b/src/cpp/ripple/Ledger.h @@ -198,6 +198,7 @@ public: static uint256 getLedgerHashIndex(uint32 desiredLedgerIndex); static int getLedgerHashOffset(uint32 desiredLedgerIndex); static int getLedgerHashOffset(uint32 desiredLedgerIndex, uint32 currentLedgerIndex); + uint256 getLedgerHash(uint32 ledgerIndex); static uint256 getLedgerFeatureIndex(); static uint256 getLedgerFeeIndex(); From b4004c4676b459639823a8cfa18d959c74c43296 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 29 Dec 2012 13:04:17 -0800 Subject: [PATCH 120/525] Fix a bug that, under rare circumstances, could lead to SHAMap corruption --- src/cpp/ripple/SHAMap.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/SHAMap.cpp b/src/cpp/ripple/SHAMap.cpp index 8d68fff13..d1b6f4b18 100644 --- a/src/cpp/ripple/SHAMap.cpp +++ b/src/cpp/ripple/SHAMap.cpp @@ -540,6 +540,7 @@ bool SHAMap::delItem(const uint256& id) SHAMapItem::pointer item = onlyBelow(node.get()); if (item) { + returnNode(node, true); eraseChildren(node); #ifdef ST_DEBUG std::cerr << "Making item node " << *node << std::endl; From dc2d87480f2e3029ec89ce4bea07762877f87991 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Dec 2012 14:39:41 -0800 Subject: [PATCH 121/525] Abstract parseUrl. --- src/cpp/ripple/HTTPRequest.cpp | 5 ++- src/cpp/ripple/HttpsClient.cpp | 18 --------- src/cpp/ripple/HttpsClient.h | 2 - src/cpp/ripple/RPCHandler.h | 2 - src/cpp/ripple/RPCServer.cpp | 6 --- src/cpp/ripple/UniqueNodeList.cpp | 8 +++- src/cpp/ripple/WSHandler.h | 2 - src/cpp/ripple/utils.cpp | 64 +++++++++++++++++++++++++++++++ src/cpp/ripple/utils.h | 2 + 9 files changed, 75 insertions(+), 34 deletions(-) diff --git a/src/cpp/ripple/HTTPRequest.cpp b/src/cpp/ripple/HTTPRequest.cpp index c3f365e0e..f5d0dc1c8 100644 --- a/src/cpp/ripple/HTTPRequest.cpp +++ b/src/cpp/ripple/HTTPRequest.cpp @@ -22,7 +22,7 @@ HTTPRequestAction HTTPRequest::requestDone(bool forceClose) if (forceClose || bShouldClose) return haCLOSE_CONN; reset(); - return haREAD_LINE; + return haREAD_LINE; } std::string HTTPRequest::getReplyHeaders(bool forceClose) @@ -91,7 +91,6 @@ HTTPRequestAction HTTPRequest::consume(boost::asio::streambuf& buf) if (headerName == "authorization") sAuthorization = headerValue; - } return haREAD_LINE; @@ -100,3 +99,5 @@ HTTPRequestAction HTTPRequest::consume(boost::asio::streambuf& buf) assert(false); return haERROR; } + +// vim:ts=4 diff --git a/src/cpp/ripple/HttpsClient.cpp b/src/cpp/ripple/HttpsClient.cpp index 987869e09..517e2d02f 100644 --- a/src/cpp/ripple/HttpsClient.cpp +++ b/src/cpp/ripple/HttpsClient.cpp @@ -362,22 +362,4 @@ void HttpsClient::httpsGet( client->httpsGet(deqSites, timeout, complete); } -bool HttpsClient::httpsParseUrl(const std::string& strUrl, std::string& strDomain, std::string& strPath) -{ - static boost::regex reUrl("(?i)\\`\\s*https://([^/]+)(/.*)\\s*\\'"); // https://DOMAINPATH - - boost::smatch smMatch; - - bool bMatch = boost::regex_match(strUrl, smMatch, reUrl); // Match status code. - - if (bMatch) - { - strDomain = smMatch[1]; - strPath = smMatch[2]; - } - // std::cerr << strUrl << " : " << bMatch << " : '" << strDomain << "' : '" << strPath << "'" << std::endl; - - return bMatch; -} - // vim:ts=4 diff --git a/src/cpp/ripple/HttpsClient.h b/src/cpp/ripple/HttpsClient.h index bebe57a3e..a9d6c9384 100644 --- a/src/cpp/ripple/HttpsClient.h +++ b/src/cpp/ripple/HttpsClient.h @@ -99,8 +99,6 @@ public: std::size_t responseMax, boost::posix_time::time_duration timeout, boost::function complete); - - static bool httpsParseUrl(const std::string& strUrl, std::string& strDomain, std::string& strPath); }; #endif // vim:ts=4 diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index 86677de4d..a5650a214 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -91,10 +91,8 @@ class RPCHandler Json::Value doSubscribe(Json::Value params); Json::Value doUnsubscribe(Json::Value params); - public: - enum { GUEST, USER, ADMIN }; RPCHandler(NetworkOPs* netOps); diff --git a/src/cpp/ripple/RPCServer.cpp b/src/cpp/ripple/RPCServer.cpp index 98e7e0399..fa942fc9e 100644 --- a/src/cpp/ripple/RPCServer.cpp +++ b/src/cpp/ripple/RPCServer.cpp @@ -14,8 +14,6 @@ #include #include - - #include "../json/reader.h" #include "../json/writer.h" @@ -28,12 +26,9 @@ SETUP_LOG(); RPCServer::RPCServer(boost::asio::io_service& io_service , NetworkOPs* nopNetwork) : mNetOps(nopNetwork), mSocket(io_service) { - mRole = RPCHandler::GUEST; } - - void RPCServer::connected() { //std::cerr << "RPC request" << std::endl; @@ -152,7 +147,6 @@ std::string RPCServer::handleRequest(const std::string& requestStr) return HTTPReply(200, strReply); } - #if 0 // now, expire, n bool RPCServer::parseAcceptRate(const std::string& sAcceptRate) diff --git a/src/cpp/ripple/UniqueNodeList.cpp b/src/cpp/ripple/UniqueNodeList.cpp index 6e5ecda26..4a78c343e 100644 --- a/src/cpp/ripple/UniqueNodeList.cpp +++ b/src/cpp/ripple/UniqueNodeList.cpp @@ -798,12 +798,14 @@ void UniqueNodeList::responseIps(const std::string& strSite, const RippleAddress void UniqueNodeList::getIpsUrl(const RippleAddress& naNodePublic, section secSite) { std::string strIpsUrl; + std::string strScheme; std::string strDomain; std::string strPath; if (sectionSingleB(secSite, SECTION_IPS_URL, strIpsUrl) && !strIpsUrl.empty() - && HttpsClient::httpsParseUrl(strIpsUrl, strDomain, strPath)) + && parseUrl(strIpsUrl, strScheme, strDomain, strPath) + && strScheme == "https") { HttpsClient::httpsGet( theApp->getIOService(), @@ -837,12 +839,14 @@ void UniqueNodeList::responseValidators(const std::string& strValidatorsUrl, con void UniqueNodeList::getValidatorsUrl(const RippleAddress& naNodePublic, section secSite) { std::string strValidatorsUrl; + std::string strScheme; std::string strDomain; std::string strPath; if (sectionSingleB(secSite, SECTION_VALIDATORS_URL, strValidatorsUrl) && !strValidatorsUrl.empty() - && HttpsClient::httpsParseUrl(strValidatorsUrl, strDomain, strPath)) + && parseUrl(strValidatorsUrl, strScheme, strDomain, strPath) + && strScheme == "https") { HttpsClient::httpsGet( theApp->getIOService(), diff --git a/src/cpp/ripple/WSHandler.h b/src/cpp/ripple/WSHandler.h index b7e76213c..ed6e4ba0d 100644 --- a/src/cpp/ripple/WSHandler.h +++ b/src/cpp/ripple/WSHandler.h @@ -46,8 +46,6 @@ public: bool getPublic() { return mPublic; }; - - void send(connection_ptr cpClient, message_ptr mpMessage) { try diff --git a/src/cpp/ripple/utils.cpp b/src/cpp/ripple/utils.cpp index 8e94f5a10..197d56ebc 100644 --- a/src/cpp/ripple/utils.cpp +++ b/src/cpp/ripple/utils.cpp @@ -1,9 +1,11 @@ #include "utils.h" #include "uint256.h" +#include #include #include #include +#include #include @@ -191,6 +193,27 @@ bool parseIpPort(const std::string& strSource, std::string& strIP, int& iPort) return bValid; } +bool parseUrl(const std::string& strUrl, std::string& strScheme, std::string& strDomain, std::string& strPath) +{ + // scheme://username:password@hostname:port/rest + static boost::regex reUrl("(?i)\\`\\s*([[:alpha:]][-+.[:alpha:][:digit:]]*)://([^/]+)(/.*)?\\s*?\\'"); + boost::smatch smMatch; + + bool bMatch = boost::regex_match(strUrl, smMatch, reUrl); // Match status code. + + if (bMatch) + { + strScheme = smMatch[1]; + strDomain = smMatch[2]; + strPath = smMatch[3]; + + boost::algorithm::to_lower(strScheme); + } + // std::cerr << strUrl << " : " << bMatch << " : '" << strDomain << "' : '" << strPath << "'" << std::endl; + + return bMatch; +} + // // Quality parsing // - integers as is. @@ -267,4 +290,45 @@ uint32_t be32toh(uint32_t value){ return(value); } #endif +BOOST_AUTO_TEST_SUITE( Utils) + +BOOST_AUTO_TEST_CASE( ParseUrl ) +{ + std::string strScheme; + std::string strDomain; + std::string strPath; + + if (!parseUrl("lower://domain", strScheme, strDomain, strPath)) + BOOST_FAIL("parseUrl: lower://domain failed"); + + if (strScheme != "lower") + BOOST_FAIL("parseUrl: lower://domain : scheme failed"); + + if (strDomain != "domain") + BOOST_FAIL("parseUrl: lower://domain : domain failed"); + + if (strPath != "") + BOOST_FAIL("parseUrl: lower://domain : path failed"); + + if (!parseUrl("UPPER://domain/", strScheme, strDomain, strPath)) + BOOST_FAIL("parseUrl: UPPER://domain/ failed"); + + if (strScheme != "upper") + BOOST_FAIL("parseUrl: UPPER://domain : scheme failed"); + + if (strPath != "/") + BOOST_FAIL("parseUrl: UPPER://domain : scheme failed"); + + if (!parseUrl("Mixed://domain/path", strScheme, strDomain, strPath)) + BOOST_FAIL("parseUrl: Mixed://domain/path failed"); + + if (strScheme != "mixed") + BOOST_FAIL("parseUrl: Mixed://domain/path tolower failed"); + + if (strPath != "/path") + BOOST_FAIL("parseUrl: Mixed://domain/path path failed"); +} + +BOOST_AUTO_TEST_SUITE_END() + // vim:ts=4 diff --git a/src/cpp/ripple/utils.h b/src/cpp/ripple/utils.h index 001757977..cc7be6c01 100644 --- a/src/cpp/ripple/utils.h +++ b/src/cpp/ripple/utils.h @@ -265,6 +265,8 @@ template T range_check_cast(const U& value, const T& min return static_cast(value); } +bool parseUrl(const std::string& strUrl, std::string& strScheme, std::string& strDomain, std::string& strPath); + #endif // vim:ts=4 From f6010b639a506a56fbd359c2f63ccfa93d0eff66 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Dec 2012 14:40:20 -0800 Subject: [PATCH 122/525] Rename --test to --unittest. --- src/cpp/ripple/main.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index cf9ff77c7..3636b0fd9 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -96,7 +96,8 @@ int main(int argc, char* argv[]) ("conf", po::value(), "Specify the configuration file.") ("rpc", "Perform rpc command (default).") ("standalone,a", "Run with no peers.") - ("test,t", "Perform unit tests.") + ("testnet,t", "Run in test net mode.") + ("unittest,u", "Perform unit tests.") ("parameters", po::value< vector >(), "Specify comma separated parameters.") ("quiet,q", "Reduce diagnotics.") ("verbose,v", "Verbose logging.") @@ -150,7 +151,7 @@ int main(int argc, char* argv[]) InstanceType::multiThread(); - if (vm.count("test")) + if (vm.count("unittest")) { unit_test_main(init_unit_test, argc, argv); return 0; From 86d778125540c99374960eacf075ce07a3471505 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Dec 2012 14:41:07 -0800 Subject: [PATCH 123/525] Fix user agent for JSON-RPC to use SYSTEM_NAME. --- src/cpp/ripple/rpc.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/cpp/ripple/rpc.cpp b/src/cpp/ripple/rpc.cpp index 8d7c84391..97731b763 100644 --- a/src/cpp/ripple/rpc.cpp +++ b/src/cpp/ripple/rpc.cpp @@ -25,12 +25,13 @@ using namespace boost::asio; Json::Value JSONRPCError(int code, const std::string& message) { Json::Value error(Json::objectValue); - error["code"]=Json::Value(code); - error["message"]=Json::Value(message); + + error["code"] = Json::Value(code); + error["message"] = Json::Value(message); + return error; } - // // HTTP protocol // @@ -41,16 +42,19 @@ Json::Value JSONRPCError(int code, const std::string& message) std::string createHTTPPost(const std::string& strMsg, const std::map& mapRequestHeaders) { std::ostringstream s; + s << "POST / HTTP/1.1\r\n" - << "User-Agent: coin-json-rpc/" << FormatFullVersion() << "\r\n" + << "User-Agent: " SYSTEM_NAME "-json-rpc/" << FormatFullVersion() << "\r\n" << "Host: 127.0.0.1\r\n" << "Content-Type: application/json\r\n" << "Content-Length: " << strMsg.size() << "\r\n" << "Accept: application/json\r\n"; typedef std::map::value_type HeaderType; + BOOST_FOREACH(const HeaderType& item, mapRequestHeaders) s << item.first << ": " << item.second << "\r\n"; + s << "\r\n" << strMsg; return s.str(); @@ -76,7 +80,7 @@ std::string HTTPReply(int nStatus, const std::string& strMsg) if (nStatus == 401) return strprintf("HTTP/1.0 401 Authorization Required\r\n" "Date: %s\r\n" - "Server: coin-json-rpc/%s\r\n" + "Server: " SYSTEM_NAME "-json-rpc/%s\r\n" "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n" "Content-Type: text/html\r\n" "Content-Length: 296\r\n" @@ -107,7 +111,7 @@ std::string HTTPReply(int nStatus, const std::string& strMsg) "%s" "Content-Length: %d\r\n" "Content-Type: application/json; charset=UTF-8\r\n" - "Server: coin-json-rpc/%s\r\n" + "Server: " SYSTEM_NAME "-json-rpc/%s\r\n" "\r\n" "%s\r\n", nStatus, @@ -116,7 +120,7 @@ std::string HTTPReply(int nStatus, const std::string& strMsg) access.c_str(), strMsg.size() + 2, SERVER_VERSION, - strMsg.c_str()); + strMsg.c_str()); } int ReadHTTPStatus(std::basic_istream& stream) @@ -180,7 +184,6 @@ int ReadHTTP(std::basic_istream& stream, std::map& mapHeaders) { @@ -253,3 +257,5 @@ void ErrorReply(std::ostream& stream, const Json::Value& objError, const Json::V std::string strReply = JSONRPCReply(Json::Value(), objError, id); stream << HTTPReply(nStatus, strReply) << std::flush; } + +// vim:ts=4 From 192dae3b747047176dc214da5ee329f48de97b7a Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Dec 2012 14:42:38 -0800 Subject: [PATCH 124/525] Stub subscribe for JSON-RPC. --- src/cpp/ripple/CallRPC.cpp | 18 ++-- src/cpp/ripple/CallRPC.h | 2 +- src/cpp/ripple/NetworkOPs.cpp | 11 +++ src/cpp/ripple/NetworkOPs.h | 14 ++- src/cpp/ripple/RPCHandler.cpp | 163 +++++++++++++++++++++++++--------- src/cpp/ripple/RPCSub.cpp | 12 +++ src/cpp/ripple/RPCSub.h | 37 ++++++++ 7 files changed, 203 insertions(+), 54 deletions(-) create mode 100644 src/cpp/ripple/RPCSub.cpp create mode 100644 src/cpp/ripple/RPCSub.h diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index b18a3c212..6cf4ffa9a 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -503,6 +503,10 @@ int commandLineRPC(const std::vector& vCmd) RPCParser rpParser; Json::Value jvRpcParams(Json::arrayValue); + if (theConfig.RPC_USER.empty() && theConfig.RPC_PASSWORD.empty()) + throw std::runtime_error("You must set rpcpassword= in the configuration file. " + "If the file does not exist, create it with owner-readable-only file permissions."); + if (vCmd.empty()) return 1; // 1 = print usage. for (int i = 1; i != vCmd.size(); i++) @@ -529,6 +533,10 @@ int commandLineRPC(const std::vector& vCmd) jvParams.append(jvRequest); jvOutput = callRPC( + theConfig.RPC_IP, + theConfig.RPC_PORT, + theConfig.RPC_USER, + theConfig.RPC_PASSWORD, jvRequest.isMember("method") // Allow parser to rewrite method. ? jvRequest["method"].asString() : vCmd[0], @@ -589,25 +597,21 @@ int commandLineRPC(const std::vector& vCmd) return nRet; } -Json::Value callRPC(const std::string& strMethod, const Json::Value& params) +Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strMethod, const Json::Value& params) { - if (theConfig.RPC_USER.empty() && theConfig.RPC_PASSWORD.empty()) - throw std::runtime_error("You must set rpcpassword= in the configuration file. " - "If the file does not exist, create it with owner-readable-only file permissions."); - // Connect to localhost if (!theConfig.QUIET) std::cerr << "Connecting to: " << theConfig.RPC_IP << ":" << theConfig.RPC_PORT << std::endl; boost::asio::ip::tcp::endpoint - endpoint(boost::asio::ip::address::from_string(theConfig.RPC_IP), theConfig.RPC_PORT); + endpoint(boost::asio::ip::address::from_string(strIp), iPort); boost::asio::ip::tcp::iostream stream; stream.connect(endpoint); if (stream.fail()) throw std::runtime_error("couldn't connect to server"); // HTTP basic authentication - std::string strUserPass64 = EncodeBase64(theConfig.RPC_USER + ":" + theConfig.RPC_PASSWORD); + std::string strUserPass64 = EncodeBase64(strUsername + ":" + strPassword); std::map mapRequestHeaders; mapRequestHeaders["Authorization"] = std::string("Basic ") + strUserPass64; diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index e03572caf..f17b5b576 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -42,7 +42,7 @@ public: }; extern int commandLineRPC(const std::vector& vCmd); -extern Json::Value callRPC(const std::string& strMethod, const Json::Value& params); +extern Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strMethod, const Json::Value& params); #endif diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 270779883..007bcd6b8 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1502,4 +1502,15 @@ bool NetworkOPs::unsubRTTransactions(InfoSub* ispListener) return !!mSubTransactions.erase(ispListener); } +RPCSub* NetworkOPs::findRpcSub(const std::string& strRpc) +{ + return (RPCSub*)(0); +} + +RPCSub* NetworkOPs::addRpcSub(const std::string& strRpc, RPCSub* rspEntry) +{ + return rspEntry; +} + + // vim:ts=4 diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index b3bd97f40..dfc1ea374 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -22,6 +22,8 @@ class LedgerConsensus; DEFINE_INSTANCE(InfoSub); +class RPCSub; + class InfoSub : public IS_INSTANCE(InfoSub) { public: @@ -34,12 +36,12 @@ protected: boost::unordered_set mSubAccountInfo; boost::unordered_set mSubAccountTransaction; - boost::mutex mLock; + boost::mutex mLockInfo; public: void insertSubAccountInfo(RippleAddress addr) { - boost::mutex::scoped_lock sl(mLock); + boost::mutex::scoped_lock sl(mLockInfo); mSubAccountInfo.insert(addr); } }; @@ -68,6 +70,8 @@ protected: typedef boost::unordered_map > subSubmitMapType; + typedef boost::unordered_map subRpcMapType; + OperatingMode mMode; bool mNeedNetworkLedger; boost::posix_time::ptime mConnectTime; @@ -97,12 +101,13 @@ protected: subInfoMapType mSubRTAccount; subSubmitMapType mSubmitMap; // TODO: probably dump this + subRpcMapType mRpcSubMap; + boost::unordered_set mSubLedger; // accepted ledgers boost::unordered_set mSubServer; // when server changes connectivity state boost::unordered_set mSubTransactions; // all accepted transactions boost::unordered_set mSubRTTransactions; // all proposed and accepted transactions - void setMode(OperatingMode); Json::Value transJson(const SerializedTransaction& stTxn, TER terResult, bool bAccepted, Ledger::ref lpCurrent, const std::string& strType); @@ -270,6 +275,9 @@ public: bool subRTTransactions(InfoSub* ispListener); bool unsubRTTransactions(InfoSub* ispListener); + + RPCSub* findRpcSub(const std::string& strRpc); + RPCSub* addRpcSub(const std::string& strRpc, RPCSub* rspEntry); }; #endif diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 25deb2cfa..884d03f49 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1,5 +1,5 @@ // -// carries out the RPC +// Carries out the RPC. // #include @@ -11,6 +11,7 @@ #include "Log.h" #include "NetworkOPs.h" #include "RPCHandler.h" +#include "RPCSub.h" #include "Application.h" #include "AccountItems.h" #include "Wallet.h" @@ -22,19 +23,18 @@ #include "InstanceCounter.h" #include "Offer.h" - SETUP_LOG(); RPCHandler::RPCHandler(NetworkOPs* netOps) { - mNetOps=netOps; - mInfoSub=NULL; + mNetOps = netOps; + mInfoSub = NULL; } RPCHandler::RPCHandler(NetworkOPs* netOps, InfoSub* infoSub) { - mNetOps=netOps; - mInfoSub=infoSub; + mNetOps = netOps; + mInfoSub = infoSub; } // Look up the master public generator for a regular seed so we may index source accounts ids. @@ -2138,8 +2138,45 @@ rt_accounts */ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) { + InfoSub* ispSub; Json::Value jvResult(Json::objectValue); + if (!mInfoSub && !jvRequest.isMember("url")) + { + // Must be a JSON-RPC call. + return rpcError(rpcINVALID_PARAMS); + } + + if (jvRequest.isMember("url")) + { + if (mRole != ADMIN) + return rpcError(rpcNO_PERMISSION); + + std::string strUrl = jvRequest["url"].asString(); + std::string strUsername = jvRequest.isMember("username") ? jvRequest["username"].asString() : ""; + std::string strPassword = jvRequest.isMember("password") ? jvRequest["password"].asString() : ""; + + RPCSub *rspSub = mNetOps->findRpcSub(strUrl); + if (!rspSub) + { + rspSub = mNetOps->addRpcSub(strUrl, new RPCSub(strUrl, strUsername, strPassword)); + } + else + { + if (jvRequest.isMember("username")) + rspSub->setUsername(strUsername); + + if (jvRequest.isMember("password")) + rspSub->setPassword(strPassword); + } + + ispSub = rspSub; + } + else + { + ispSub = mInfoSub; + } + if (jvRequest.isMember("streams")) { for (Json::Value::iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++) @@ -2148,26 +2185,31 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) { std::string streamName=(*it).asString(); - if(streamName=="server") + if (streamName=="server") { - mNetOps->subServer(mInfoSub, jvResult); + mNetOps->subServer(ispSub, jvResult); - } else if(streamName=="ledger") - { - mNetOps->subLedger(mInfoSub, jvResult); - - } else if(streamName=="transactions") - { - mNetOps->subTransactions(mInfoSub); - - } else if(streamName=="rt_transactions") - { - mNetOps->subRTTransactions(mInfoSub); } - else { + else if (streamName=="ledger") + { + mNetOps->subLedger(ispSub, jvResult); + + } + else if (streamName=="transactions") + { + mNetOps->subTransactions(ispSub); + + } + else if (streamName=="rt_transactions") + { + mNetOps->subRTTransactions(ispSub); + } + else + { jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName); } - } else + } + else { jvResult["error"] = "malformedSteam"; } @@ -2181,14 +2223,15 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) if (usnaAccoundIds.empty()) { jvResult["error"] = "malformedAccount"; - }else + } + else { BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds) { - mInfoSub->insertSubAccountInfo(naAccountID); + ispSub->insertSubAccountInfo(naAccountID); } - mNetOps->subAccount(mInfoSub, usnaAccoundIds, true); + mNetOps->subAccount(ispSub, usnaAccoundIds, true); } } @@ -2199,24 +2242,51 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) if (usnaAccoundIds.empty()) { jvResult["error"] = "malformedAccount"; - }else + } + else { BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds) { - mInfoSub->insertSubAccountInfo(naAccountID); + ispSub->insertSubAccountInfo(naAccountID); } - mNetOps->subAccount(mInfoSub, usnaAccoundIds, false); + mNetOps->subAccount(ispSub, usnaAccoundIds, false); } } return jvResult; } +// This leaks RPCSub objects for JSON-RPC. Shouldn't matter for anyone sane. Json::Value RPCHandler::doUnsubscribe(Json::Value jvRequest) { + InfoSub* ispSub; Json::Value jvResult(Json::objectValue); + if (!mInfoSub && !jvRequest.isMember("url")) + { + // Must be a JSON-RPC call. + return rpcError(rpcINVALID_PARAMS); + } + + if (jvRequest.isMember("url")) + { + if (mRole != ADMIN) + return rpcError(rpcNO_PERMISSION); + + std::string strUrl = jvRequest["url"].asString(); + + RPCSub *rspSub = mNetOps->findRpcSub(strUrl); + if (!rspSub) + return jvResult; + + ispSub = rspSub; + } + else + { + ispSub = mInfoSub; + } + if (jvRequest.isMember("streams")) { for (Json::Value::iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++) @@ -2225,23 +2295,28 @@ Json::Value RPCHandler::doUnsubscribe(Json::Value jvRequest) { std::string streamName=(*it).asString(); - if(streamName=="server") + if (streamName == "server") { - mNetOps->unsubServer(mInfoSub); - }else if(streamName=="ledger") + mNetOps->unsubServer(ispSub); + } + else if (streamName == "ledger") { - mNetOps->unsubLedger(mInfoSub); - }else if(streamName=="transactions") + mNetOps->unsubLedger(ispSub); + } + else if (streamName == "transactions") { - mNetOps->unsubTransactions(mInfoSub); - }else if(streamName=="rt_transactions") + mNetOps->unsubTransactions(ispSub); + } + else if (streamName == "rt_transactions") { - mNetOps->unsubRTTransactions(mInfoSub); - }else + mNetOps->unsubRTTransactions(ispSub); + } + else { jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName); } - }else + } + else { jvResult["error"] = "malformedSteam"; } @@ -2255,14 +2330,15 @@ Json::Value RPCHandler::doUnsubscribe(Json::Value jvRequest) if (usnaAccoundIds.empty()) { jvResult["error"] = "malformedAccount"; - }else + } + else { BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds) { - mInfoSub->insertSubAccountInfo(naAccountID); + ispSub->insertSubAccountInfo(naAccountID); } - mNetOps->unsubAccount(mInfoSub, usnaAccoundIds,true); + mNetOps->unsubAccount(ispSub, usnaAccoundIds,true); } } @@ -2273,14 +2349,15 @@ Json::Value RPCHandler::doUnsubscribe(Json::Value jvRequest) if (usnaAccoundIds.empty()) { jvResult["error"] = "malformedAccount"; - }else + } + else { BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds) { - mInfoSub->insertSubAccountInfo(naAccountID); + ispSub->insertSubAccountInfo(naAccountID); } - mNetOps->unsubAccount(mInfoSub, usnaAccoundIds,false); + mNetOps->unsubAccount(ispSub, usnaAccoundIds,false); } } diff --git a/src/cpp/ripple/RPCSub.cpp b/src/cpp/ripple/RPCSub.cpp new file mode 100644 index 000000000..633feaaa7 --- /dev/null +++ b/src/cpp/ripple/RPCSub.cpp @@ -0,0 +1,12 @@ +#include "RPCSub.h" + +RPCSub::RPCSub(const std::string& strUrl, const std::string& strUsername, const std::string& strPassword) + : mUrl(strUrl), mUsername(strUsername), mPassword(strPassword) +{ + +} + +void RPCSub::send(const Json::Value& jvObj) +{ + +} diff --git a/src/cpp/ripple/RPCSub.h b/src/cpp/ripple/RPCSub.h new file mode 100644 index 000000000..7971ee121 --- /dev/null +++ b/src/cpp/ripple/RPCSub.h @@ -0,0 +1,37 @@ +#ifndef __RPCSUB__ +#define __RPCSUB__ + +#include "NetworkOPs.h" + +// Subscription object for JSON-RPC +class RPCSub : public InfoSub +{ + std::string mUrl; + std::string mIp; + int mPort; + std::string mUsername; + std::string mPassword; + +public: + RPCSub(const std::string& strUrl, const std::string& strUsername, const std::string& strPassword); + + // Implement overridden functions from base class: + void send(const Json::Value& jvObj); + + void setUsername(const std::string& strUsername) + { + boost::mutex::scoped_lock sl(mLockInfo); + + mUsername = strUsername; + } + + void setPassword(const std::string& strPassword) + { + boost::mutex::scoped_lock sl(mLockInfo); + + mPassword = strPassword; + } +}; + +#endif +// vim:ts=4 From e91ce698f6d0f77775c0f4ec88444dd92c5588ed Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Dec 2012 14:59:44 -0800 Subject: [PATCH 125/525] Add support for parsing port in urls. --- src/cpp/ripple/UniqueNodeList.cpp | 8 ++++++-- src/cpp/ripple/utils.cpp | 31 ++++++++++++++++++++++--------- src/cpp/ripple/utils.h | 2 +- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/cpp/ripple/UniqueNodeList.cpp b/src/cpp/ripple/UniqueNodeList.cpp index 4a78c343e..ad7e56348 100644 --- a/src/cpp/ripple/UniqueNodeList.cpp +++ b/src/cpp/ripple/UniqueNodeList.cpp @@ -800,11 +800,13 @@ void UniqueNodeList::getIpsUrl(const RippleAddress& naNodePublic, section secSit std::string strIpsUrl; std::string strScheme; std::string strDomain; + int iPort; std::string strPath; if (sectionSingleB(secSite, SECTION_IPS_URL, strIpsUrl) && !strIpsUrl.empty() - && parseUrl(strIpsUrl, strScheme, strDomain, strPath) + && parseUrl(strIpsUrl, strScheme, strDomain, iPort, strPath) + && -1 == iPort && strScheme == "https") { HttpsClient::httpsGet( @@ -841,11 +843,13 @@ void UniqueNodeList::getValidatorsUrl(const RippleAddress& naNodePublic, section std::string strValidatorsUrl; std::string strScheme; std::string strDomain; + int iPort; std::string strPath; if (sectionSingleB(secSite, SECTION_VALIDATORS_URL, strValidatorsUrl) && !strValidatorsUrl.empty() - && parseUrl(strValidatorsUrl, strScheme, strDomain, strPath) + && parseUrl(strValidatorsUrl, strScheme, strDomain, iPort, strPath) + && -1 == iPort && strScheme == "https") { HttpsClient::httpsGet( diff --git a/src/cpp/ripple/utils.cpp b/src/cpp/ripple/utils.cpp index 197d56ebc..760ea7a6b 100644 --- a/src/cpp/ripple/utils.cpp +++ b/src/cpp/ripple/utils.cpp @@ -193,21 +193,27 @@ bool parseIpPort(const std::string& strSource, std::string& strIP, int& iPort) return bValid; } -bool parseUrl(const std::string& strUrl, std::string& strScheme, std::string& strDomain, std::string& strPath) +bool parseUrl(const std::string& strUrl, std::string& strScheme, std::string& strDomain, int& iPort, std::string& strPath) { // scheme://username:password@hostname:port/rest - static boost::regex reUrl("(?i)\\`\\s*([[:alpha:]][-+.[:alpha:][:digit:]]*)://([^/]+)(/.*)?\\s*?\\'"); + static boost::regex reUrl("(?i)\\`\\s*([[:alpha:]][-+.[:alpha:][:digit:]]*)://([^:/]+)(?::(\\d+))?(/.*)?\\s*?\\'"); boost::smatch smMatch; bool bMatch = boost::regex_match(strUrl, smMatch, reUrl); // Match status code. if (bMatch) { + std::string strPort; + strScheme = smMatch[1]; strDomain = smMatch[2]; - strPath = smMatch[3]; + strPort = smMatch[3]; + strPath = smMatch[4]; boost::algorithm::to_lower(strScheme); + + iPort = strPort.empty() ? -1 : lexical_cast_s(strPort); + // std::cerr << strUrl << " : " << bMatch << " : '" << strDomain << "' : '" << strPort << "' : " << iPort << " : '" << strPath << "'" << std::endl; } // std::cerr << strUrl << " : " << bMatch << " : '" << strDomain << "' : '" << strPath << "'" << std::endl; @@ -296,9 +302,10 @@ BOOST_AUTO_TEST_CASE( ParseUrl ) { std::string strScheme; std::string strDomain; + int iPort; std::string strPath; - if (!parseUrl("lower://domain", strScheme, strDomain, strPath)) + if (!parseUrl("lower://domain", strScheme, strDomain, iPort, strPath)) BOOST_FAIL("parseUrl: lower://domain failed"); if (strScheme != "lower") @@ -307,19 +314,25 @@ BOOST_AUTO_TEST_CASE( ParseUrl ) if (strDomain != "domain") BOOST_FAIL("parseUrl: lower://domain : domain failed"); + if (iPort != -1) + BOOST_FAIL("parseUrl: lower://domain : port failed"); + if (strPath != "") BOOST_FAIL("parseUrl: lower://domain : path failed"); - if (!parseUrl("UPPER://domain/", strScheme, strDomain, strPath)) - BOOST_FAIL("parseUrl: UPPER://domain/ failed"); + if (!parseUrl("UPPER://domain:234/", strScheme, strDomain, iPort, strPath)) + BOOST_FAIL("parseUrl: UPPER://domain:234/ failed"); if (strScheme != "upper") - BOOST_FAIL("parseUrl: UPPER://domain : scheme failed"); + BOOST_FAIL("parseUrl: UPPER://domain:234/ : scheme failed"); + + if (iPort != 234) + BOOST_FAIL(boost::str(boost::format("parseUrl: UPPER://domain:234/ : port failed: %d") % iPort)); if (strPath != "/") - BOOST_FAIL("parseUrl: UPPER://domain : scheme failed"); + BOOST_FAIL("parseUrl: UPPER://domain:234/ : path failed"); - if (!parseUrl("Mixed://domain/path", strScheme, strDomain, strPath)) + if (!parseUrl("Mixed://domain/path", strScheme, strDomain, iPort, strPath)) BOOST_FAIL("parseUrl: Mixed://domain/path failed"); if (strScheme != "mixed") diff --git a/src/cpp/ripple/utils.h b/src/cpp/ripple/utils.h index cc7be6c01..752078048 100644 --- a/src/cpp/ripple/utils.h +++ b/src/cpp/ripple/utils.h @@ -265,7 +265,7 @@ template T range_check_cast(const U& value, const T& min return static_cast(value); } -bool parseUrl(const std::string& strUrl, std::string& strScheme, std::string& strDomain, std::string& strPath); +bool parseUrl(const std::string& strUrl, std::string& strScheme, std::string& strDomain, int& iPort, std::string& strPath); #endif From ab0da033c3b2bf9df08f32205828093dec512913 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Dec 2012 16:07:29 -0800 Subject: [PATCH 126/525] Add support for JSON-RPC subscriptions. --- src/cpp/ripple/CallRPC.h | 1 - src/cpp/ripple/NetworkOPs.cpp | 25 +++++++-- src/cpp/ripple/NetworkOPs.h | 6 +-- src/cpp/ripple/RPCHandler.cpp | 97 +++++++++++++++++------------------ src/cpp/ripple/RPCSub.cpp | 61 ++++++++++++++++++++++ src/cpp/ripple/RPCSub.h | 27 ++++++++-- 6 files changed, 154 insertions(+), 63 deletions(-) diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index f17b5b576..9b9ca8396 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -1,7 +1,6 @@ #ifndef __CALLRPC__ #define __CALLRPC__ - #include #include "../json/value.h" diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 007bcd6b8..327d16528 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1502,13 +1502,32 @@ bool NetworkOPs::unsubRTTransactions(InfoSub* ispListener) return !!mSubTransactions.erase(ispListener); } -RPCSub* NetworkOPs::findRpcSub(const std::string& strRpc) +RPCSub* NetworkOPs::findRpcSub(const std::string& strUrl) { - return (RPCSub*)(0); + RPCSub* rspResult; + boost::recursive_mutex::scoped_lock sl(mMonitorLock); + + subRpcMapType::iterator it; + + it = mRpcSubMap.find(strUrl); + if (it == mRpcSubMap.end()) + { + rspResult = (RPCSub*)(0); + } + else + { + rspResult = it->second; + } + + return rspResult; } -RPCSub* NetworkOPs::addRpcSub(const std::string& strRpc, RPCSub* rspEntry) +RPCSub* NetworkOPs::addRpcSub(const std::string& strUrl, RPCSub* rspEntry) { + boost::recursive_mutex::scoped_lock sl(mMonitorLock); + + mRpcSubMap.insert(std::make_pair(strUrl, rspEntry)); + return rspEntry; } diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index dfc1ea374..180a06ff8 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -70,7 +70,7 @@ protected: typedef boost::unordered_map > subSubmitMapType; - typedef boost::unordered_map subRpcMapType; + typedef boost::unordered_map subRpcMapType; OperatingMode mMode; bool mNeedNetworkLedger; @@ -276,8 +276,8 @@ public: bool subRTTransactions(InfoSub* ispListener); bool unsubRTTransactions(InfoSub* ispListener); - RPCSub* findRpcSub(const std::string& strRpc); - RPCSub* addRpcSub(const std::string& strRpc, RPCSub* rspEntry); + RPCSub* findRpcSub(const std::string& strUrl); + RPCSub* addRpcSub(const std::string& strUrl, RPCSub* rspEntry); }; #endif diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 884d03f49..eda9b97b4 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2257,7 +2257,7 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) return jvResult; } -// This leaks RPCSub objects for JSON-RPC. Shouldn't matter for anyone sane. +// FIXME: This leaks RPCSub objects for JSON-RPC. Shouldn't matter for anyone sane. Json::Value RPCHandler::doUnsubscribe(Json::Value jvRequest) { InfoSub* ispSub; @@ -2416,62 +2416,61 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) const char* pCommand; doFuncPtr dfpFunc; bool bAdminRequired; - bool bEvented; unsigned int iOptions; } commandsA[] = { // Request-response methods - { "accept_ledger", &RPCHandler::doAcceptLedger, true, false, optCurrent }, - { "account_info", &RPCHandler::doAccountInfo, false, false, optCurrent }, - { "account_lines", &RPCHandler::doAccountLines, false, false, optCurrent }, - { "account_offers", &RPCHandler::doAccountOffers, false, false, optCurrent }, - { "account_tx", &RPCHandler::doAccountTransactions, false, false, optNetwork }, - { "connect", &RPCHandler::doConnect, true, false, optNone }, - { "get_counts", &RPCHandler::doGetCounts, true, false, optNone }, - { "ledger", &RPCHandler::doLedger, false, false, optNetwork }, - { "ledger_accept", &RPCHandler::doLedgerAccept, true, false, optCurrent }, - { "ledger_closed", &RPCHandler::doLedgerClosed, false, false, optClosed }, - { "ledger_current", &RPCHandler::doLedgerCurrent, false, false, optCurrent }, - { "ledger_entry", &RPCHandler::doLedgerEntry, false, false, optCurrent }, - { "ledger_header", &RPCHandler::doLedgerHeader, false, false, optCurrent }, - { "log_level", &RPCHandler::doLogLevel, true, false, optNone }, - { "logrotate", &RPCHandler::doLogRotate, true, false, optNone }, -// { "nickname_info", &RPCHandler::doNicknameInfo, false, false, optCurrent }, - { "owner_info", &RPCHandler::doOwnerInfo, false, false, optCurrent }, - { "peers", &RPCHandler::doPeers, true, false, optNone }, -// { "profile", &RPCHandler::doProfile, false, false, optCurrent }, - { "random", &RPCHandler::doRandom, false, false, optNone }, - { "ripple_path_find", &RPCHandler::doRipplePathFind, false, false, optCurrent }, - { "submit", &RPCHandler::doSubmit, false, false, optCurrent }, - { "server_info", &RPCHandler::doServerInfo, true, false, optNone }, - { "stop", &RPCHandler::doStop, true, false, optNone }, - { "transaction_entry", &RPCHandler::doTransactionEntry, false, false, optCurrent }, - { "tx", &RPCHandler::doTx, false, false, optNetwork }, - { "tx_history", &RPCHandler::doTxHistory, false, false, optNone }, + { "accept_ledger", &RPCHandler::doAcceptLedger, true, optCurrent }, + { "account_info", &RPCHandler::doAccountInfo, false, optCurrent }, + { "account_lines", &RPCHandler::doAccountLines, false, optCurrent }, + { "account_offers", &RPCHandler::doAccountOffers, false, optCurrent }, + { "account_tx", &RPCHandler::doAccountTransactions, false, optNetwork }, + { "connect", &RPCHandler::doConnect, true, optNone }, + { "get_counts", &RPCHandler::doGetCounts, true, optNone }, + { "ledger", &RPCHandler::doLedger, false, optNetwork }, + { "ledger_accept", &RPCHandler::doLedgerAccept, true, optCurrent }, + { "ledger_closed", &RPCHandler::doLedgerClosed, false, optClosed }, + { "ledger_current", &RPCHandler::doLedgerCurrent, false, optCurrent }, + { "ledger_entry", &RPCHandler::doLedgerEntry, false, optCurrent }, + { "ledger_header", &RPCHandler::doLedgerHeader, false, optCurrent }, + { "log_level", &RPCHandler::doLogLevel, true, optNone }, + { "logrotate", &RPCHandler::doLogRotate, true, optNone }, +// { "nickname_info", &RPCHandler::doNicknameInfo, false, optCurrent }, + { "owner_info", &RPCHandler::doOwnerInfo, false, optCurrent }, + { "peers", &RPCHandler::doPeers, true, optNone }, +// { "profile", &RPCHandler::doProfile, false, optCurrent }, + { "random", &RPCHandler::doRandom, false, optNone }, + { "ripple_path_find", &RPCHandler::doRipplePathFind, false, optCurrent }, + { "submit", &RPCHandler::doSubmit, false, optCurrent }, + { "server_info", &RPCHandler::doServerInfo, true, optNone }, + { "stop", &RPCHandler::doStop, true, optNone }, + { "transaction_entry", &RPCHandler::doTransactionEntry, false, optCurrent }, + { "tx", &RPCHandler::doTx, false, optNetwork }, + { "tx_history", &RPCHandler::doTxHistory, false, optNone }, - { "unl_add", &RPCHandler::doUnlAdd, true, false, optNone }, - { "unl_delete", &RPCHandler::doUnlDelete, true, false, optNone }, - { "unl_list", &RPCHandler::doUnlList, true, false, optNone }, - { "unl_load", &RPCHandler::doUnlLoad, true, false, optNone }, - { "unl_network", &RPCHandler::doUnlNetwork, true, false, optNone }, - { "unl_reset", &RPCHandler::doUnlReset, true, false, optNone }, - { "unl_score", &RPCHandler::doUnlScore, true, false, optNone }, + { "unl_add", &RPCHandler::doUnlAdd, true, optNone }, + { "unl_delete", &RPCHandler::doUnlDelete, true, optNone }, + { "unl_list", &RPCHandler::doUnlList, true, optNone }, + { "unl_load", &RPCHandler::doUnlLoad, true, optNone }, + { "unl_network", &RPCHandler::doUnlNetwork, true, optNone }, + { "unl_reset", &RPCHandler::doUnlReset, true, optNone }, + { "unl_score", &RPCHandler::doUnlScore, true, optNone }, - { "validation_create", &RPCHandler::doValidationCreate, false, false, optNone }, - { "validation_seed", &RPCHandler::doValidationSeed, false, false, optNone }, + { "validation_create", &RPCHandler::doValidationCreate, false, optNone }, + { "validation_seed", &RPCHandler::doValidationSeed, false, optNone }, - { "wallet_accounts", &RPCHandler::doWalletAccounts, false, false, optCurrent }, - { "wallet_propose", &RPCHandler::doWalletPropose, false, false, optNone }, - { "wallet_seed", &RPCHandler::doWalletSeed, false, false, optNone }, + { "wallet_accounts", &RPCHandler::doWalletAccounts, false, optCurrent }, + { "wallet_propose", &RPCHandler::doWalletPropose, false, optNone }, + { "wallet_seed", &RPCHandler::doWalletSeed, false, optNone }, // XXX Unnecessary commands which should be removed. - { "login", &RPCHandler::doLogin, true, false, optNone }, - { "data_delete", &RPCHandler::doDataDelete, true, false, optNone }, - { "data_fetch", &RPCHandler::doDataFetch, true, false, optNone }, - { "data_store", &RPCHandler::doDataStore, true, false, optNone }, + { "login", &RPCHandler::doLogin, true, optNone }, + { "data_delete", &RPCHandler::doDataDelete, true, optNone }, + { "data_fetch", &RPCHandler::doDataFetch, true, optNone }, + { "data_store", &RPCHandler::doDataStore, true, optNone }, // Evented methods - { "subscribe", &RPCHandler::doSubscribe, false, true, optNone }, - { "unsubscribe", &RPCHandler::doUnsubscribe, false, true, optNone }, + { "subscribe", &RPCHandler::doSubscribe, false, optNone }, + { "unsubscribe", &RPCHandler::doUnsubscribe, false, optNone }, }; int i = NUMBER(commandsA); @@ -2487,10 +2486,6 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { return rpcError(rpcNO_PERMISSION); } - else if (commandsA[i].bEvented && mInfoSub == NULL) - { - return rpcError(rpcNO_EVENTS); - } else if (commandsA[i].iOptions & optNetwork && mNetOps->getOperatingMode() != NetworkOPs::omTRACKING && mNetOps->getOperatingMode() != NetworkOPs::omFULL) diff --git a/src/cpp/ripple/RPCSub.cpp b/src/cpp/ripple/RPCSub.cpp index 633feaaa7..a0759cca4 100644 --- a/src/cpp/ripple/RPCSub.cpp +++ b/src/cpp/ripple/RPCSub.cpp @@ -1,12 +1,73 @@ +#include + #include "RPCSub.h" +#include "CallRPC.h" + RPCSub::RPCSub(const std::string& strUrl, const std::string& strUsername, const std::string& strPassword) : mUrl(strUrl), mUsername(strUsername), mPassword(strPassword) { + mId = 1; +} +void RPCSub::sendThread() +{ + Json::Value jvEvent; + bool bSend; + + do + { + { + // Obtain the lock to manipulate the queue and change sending. + boost::mutex::scoped_lock sl(mLockInfo); + + if (mDeque.empty()) + { + mSending = false; + bSend = false; + } + else + { + std::pair pEvent = mDeque.front(); + + mDeque.pop_front(); + + jvEvent = pEvent.second; + jvEvent["id"] = pEvent.first; + + bSend = true; + } + } + + // Send outside of the lock. + if (bSend) + { + // Drop result. + (void) callRPC(mIp, mPort, mUsername, mPassword, "event", jvEvent); + + sendThread(); + } + } while (bSend); } void RPCSub::send(const Json::Value& jvObj) { + boost::mutex::scoped_lock sl(mLockInfo); + if (RPC_EVENT_QUEUE_MAX == mDeque.size()) + { + // Drop the previous event. + + mDeque.pop_back(); + } + + mDeque.push_back(std::make_pair(mId++, jvObj)); + + if (!mSending) + { + // Start a sending thread. + mSending = true; + + boost::thread(boost::bind(&RPCSub::sendThread, this)).detach(); + } } diff --git a/src/cpp/ripple/RPCSub.h b/src/cpp/ripple/RPCSub.h index 7971ee121..2e4921ec1 100644 --- a/src/cpp/ripple/RPCSub.h +++ b/src/cpp/ripple/RPCSub.h @@ -1,20 +1,37 @@ #ifndef __RPCSUB__ #define __RPCSUB__ +#include + +#include "../json/value.h" + #include "NetworkOPs.h" +#define RPC_EVENT_QUEUE_MAX 32 + // Subscription object for JSON-RPC class RPCSub : public InfoSub { - std::string mUrl; - std::string mIp; - int mPort; - std::string mUsername; - std::string mPassword; + std::string mUrl; + std::string mIp; + int mPort; + std::string mUsername; + std::string mPassword; + + int mId; // Next id to allocate. + + bool mSending; // Sending threead is active. + + std::deque > mDeque; + +protected: + void sendThread(); public: RPCSub(const std::string& strUrl, const std::string& strUsername, const std::string& strPassword); + virtual ~RPCSub() { ; } + // Implement overridden functions from base class: void send(const Json::Value& jvObj); From 0339aa9669ad87740189a4b0f514a685b0743645 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Dec 2012 17:37:39 -0800 Subject: [PATCH 127/525] Have SetHex return validity and add strict option. --- src/cpp/ripple/uint256.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/uint256.h b/src/cpp/ripple/uint256.h index e7e5e449e..89d718f7c 100644 --- a/src/cpp/ripple/uint256.h +++ b/src/cpp/ripple/uint256.h @@ -219,14 +219,18 @@ public: return strHex(begin(), size()); } - void SetHex(const char* psz) + // Allow leading whitespace. + // Allow leading "0x". + // To be valid must be '\0' terminated. + bool SetHex(const char* psz, bool bStrict=false) { // skip leading spaces - while (isspace(*psz)) - psz++; + if (!bStrict) + while (isspace(*psz)) + psz++; // skip 0x - if (psz[0] == '0' && tolower(psz[1]) == 'x') + if (!bStrict && psz[0] == '0' && tolower(psz[1]) == 'x') psz += 2; // hex char to int @@ -278,11 +282,13 @@ public: : phexdigit[*pBegin++]; *pOut++ = cHigh | cLow; } + + return !*pEnd; } - void SetHex(const std::string& str) + bool SetHex(const std::string& str, bool bStrict=false) { - SetHex(str.c_str()); + return SetHex(str.c_str(), bStrict); } std::string ToString() const From eaaeaaba15a64534ad889828ddb8e96519c6b64a Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 29 Dec 2012 17:37:56 -0800 Subject: [PATCH 128/525] Allow seeds to be specified as hex. --- src/cpp/ripple/RippleAddress.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cpp/ripple/RippleAddress.cpp b/src/cpp/ripple/RippleAddress.cpp index 7841f322e..6f3462ec9 100644 --- a/src/cpp/ripple/RippleAddress.cpp +++ b/src/cpp/ripple/RippleAddress.cpp @@ -754,6 +754,7 @@ bool RippleAddress::setSeedGeneric(const std::string& strText) { RippleAddress naTemp; bool bResult = true; + uint128 uSeed; if (strText.empty() || naTemp.setAccountID(strText) @@ -764,6 +765,10 @@ bool RippleAddress::setSeedGeneric(const std::string& strText) { bResult = false; } + else if (strText.length() == 32 && uSeed.SetHex(strText, true)) + { + setSeed(uSeed); + } else if (setSeed(strText)) { // std::cerr << "Recognized seed." << std::endl; From 5009d4c3b80e11b833fffc9f66c2f2833b36b46c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 30 Dec 2012 13:19:42 -0800 Subject: [PATCH 129/525] Cleanups. --- src/cpp/ripple/LedgerAcquire.h | 2 +- src/cpp/ripple/LedgerConsensus.h | 6 +++--- src/cpp/ripple/SerializedTypes.h | 6 ++++++ src/cpp/ripple/TransactionEngine.h | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index c677d6226..68cd27c48 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -91,7 +91,7 @@ public: bool isAcctStComplete() const { return mHaveState; } bool isTransComplete() const { return mHaveTransactions; } bool isDone() const { return mAborted || isComplete() || isFailed(); } - Ledger::pointer getLedger() { return mLedger; } + Ledger::ref getLedger() { return mLedger; } void abort() { mAborted = true; } bool setAccept() { if (mAccept) return false; mAccept = true; return true; } diff --git a/src/cpp/ripple/LedgerConsensus.h b/src/cpp/ripple/LedgerConsensus.h index f238368b0..240cc3229 100644 --- a/src/cpp/ripple/LedgerConsensus.h +++ b/src/cpp/ripple/LedgerConsensus.h @@ -43,7 +43,7 @@ public: TransactionAcquire(const uint256& hash); virtual ~TransactionAcquire() { ; } - SHAMap::pointer getMap() { return mMap; } + SHAMap::ref getMap() { return mMap; } SMAddNode takeNodes(const std::list& IDs, const std::list< std::vector >& data, Peer::ref); @@ -161,8 +161,8 @@ public: int startup(); Json::Value getJson(); - Ledger::pointer peekPreviousLedger() { return mPreviousLedger; } - uint256 getLCL() { return mPrevLedgerHash; } + Ledger::ref peekPreviousLedger() { return mPreviousLedger; } + uint256 getLCL() { return mPrevLedgerHash; } SHAMap::pointer getTransactionTree(const uint256& hash, bool doAcquire); TransactionAcquire::pointer getAcquiring(const uint256& hash); diff --git a/src/cpp/ripple/SerializedTypes.h b/src/cpp/ripple/SerializedTypes.h index c29e4c69f..b6d202446 100644 --- a/src/cpp/ripple/SerializedTypes.h +++ b/src/cpp/ripple/SerializedTypes.h @@ -779,11 +779,17 @@ public: virtual bool isDefault() const { return mValue.empty(); } std::vector getValue() const { return mValue; } + int size() const { return mValue.size(); } bool isEmpty() const { return mValue.empty(); } + + const uint256& at(int i) const { assert((i >= 0) && (i < size())); return mValue.at(i); } + uint256& at(int i) { assert((i >= 0) && (i < size())); return mValue.at(i); } + void setValue(const STVector256& v) { mValue = v.mValue; } void setValue(const std::vector& v) { mValue = v; } void addValue(const uint256& v) { mValue.push_back(v); } + Json::Value getJson(int) const; }; diff --git a/src/cpp/ripple/TransactionEngine.h b/src/cpp/ripple/TransactionEngine.h index 67a53447b..ab80191c8 100644 --- a/src/cpp/ripple/TransactionEngine.h +++ b/src/cpp/ripple/TransactionEngine.h @@ -70,7 +70,7 @@ public: TransactionEngine(Ledger::ref ledger) : mLedger(ledger), mTxnSeq(0) { assert(mLedger); } LedgerEntrySet& getNodes() { return mNodes; } - Ledger::pointer getLedger() { return mLedger; } + Ledger::ref getLedger() { return mLedger; } void setLedger(Ledger::ref ledger) { assert(ledger); mLedger = ledger; } SLE::pointer entryCreate(LedgerEntryType type, const uint256& index) { return mNodes.entryCreate(type, index); } From 5934f77b60629aad465cfbb4bd3473a67954b2ea Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 17:00:49 -0800 Subject: [PATCH 130/525] Add simple-jsonrpc to npm dependancies. --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 00f345360..11ee2d9db 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "dependencies": { "async": "~0.1.22", "ws": "~0.4.22", - "extend": "~1.1.1" + "extend": "~1.1.1", + "simple-jsonrpc": "~0.0.1" }, "devDependencies": { "buster": "~0.6.2", From 6ba31accb2fa05d49cea82ff394ff8ced62a665f Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 17:01:34 -0800 Subject: [PATCH 131/525] Fixes for rpc subscriptions. --- src/cpp/ripple/RPCSub.cpp | 34 ++++++++++++++++++++++++++++++---- src/cpp/ripple/RPCSub.h | 2 +- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/RPCSub.cpp b/src/cpp/ripple/RPCSub.cpp index a0759cca4..35ec7b719 100644 --- a/src/cpp/ripple/RPCSub.cpp +++ b/src/cpp/ripple/RPCSub.cpp @@ -4,10 +4,29 @@ #include "CallRPC.h" +SETUP_LOG(); + RPCSub::RPCSub(const std::string& strUrl, const std::string& strUsername, const std::string& strPassword) : mUrl(strUrl), mUsername(strUsername), mPassword(strPassword) { - mId = 1; + std::string strScheme; + std::string strPath; + + if (!parseUrl(strUrl, strScheme, mIp, mPort, strPath)) + { + throw std::runtime_error("Failed to parse url."); + } + else if (strScheme != "http") + { + throw std::runtime_error("Only http is supported."); + } + else if (!strPath.empty()) + { + // XXX FIXME: support path + throw std::runtime_error("Only empty path is supported."); + } + + mSeq = 1; } void RPCSub::sendThread() @@ -33,7 +52,7 @@ void RPCSub::sendThread() mDeque.pop_front(); jvEvent = pEvent.second; - jvEvent["id"] = pEvent.first; + jvEvent["seq"] = pEvent.first; bSend = true; } @@ -43,7 +62,14 @@ void RPCSub::sendThread() if (bSend) { // Drop result. - (void) callRPC(mIp, mPort, mUsername, mPassword, "event", jvEvent); + try + { + (void) callRPC(mIp, mPort, mUsername, mPassword, "event", jvEvent); + } + catch (const std::exception& e) + { + cLog(lsDEBUG) << boost::str(boost::format("callRPC exception: %s") % e.what()); + } sendThread(); } @@ -61,7 +87,7 @@ void RPCSub::send(const Json::Value& jvObj) mDeque.pop_back(); } - mDeque.push_back(std::make_pair(mId++, jvObj)); + mDeque.push_back(std::make_pair(mSeq++, jvObj)); if (!mSending) { diff --git a/src/cpp/ripple/RPCSub.h b/src/cpp/ripple/RPCSub.h index 2e4921ec1..1ab72c917 100644 --- a/src/cpp/ripple/RPCSub.h +++ b/src/cpp/ripple/RPCSub.h @@ -18,7 +18,7 @@ class RPCSub : public InfoSub std::string mUsername; std::string mPassword; - int mId; // Next id to allocate. + int mSeq; // Next id to allocate. bool mSending; // Sending threead is active. From 6592f9de399c90fefee878f5a82122c8480c1474 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 17:02:01 -0800 Subject: [PATCH 132/525] Report correct target for callRPC. --- src/cpp/ripple/CallRPC.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 6cf4ffa9a..c04f1cdf6 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -601,7 +601,7 @@ Json::Value callRPC(const std::string& strIp, const int iPort, const std::string { // Connect to localhost if (!theConfig.QUIET) - std::cerr << "Connecting to: " << theConfig.RPC_IP << ":" << theConfig.RPC_PORT << std::endl; + std::cerr << "Connecting to: " << strIp << ":" << iPort << std::endl; boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string(strIp), iPort); From 7fd00894b96a73b27ec8ee8d296496d0aed5a431 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 17:02:35 -0800 Subject: [PATCH 133/525] Allow empty array to for empty object for JSON-RPC. --- src/cpp/ripple/RPCHandler.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index eda9b97b4..123400760 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2370,12 +2370,12 @@ Json::Value RPCHandler::doUnsubscribe(Json::Value jvRequest) // command is the method. The request object is supplied as the first element of the params. Json::Value RPCHandler::doRpcCommand(const std::string& strMethod, Json::Value& jvParams, int iRole) { - // cLog(lsTRACE) << "doRpcCommand:" << strMethod << ":" << jvParams; + cLog(lsTRACE) << "doRpcCommand:" << strMethod << ":" << jvParams; - if (!jvParams.isArray() || jvParams.size() != 1) + if (!jvParams.isArray() || jvParams.size() > 1) return rpcError(rpcINVALID_PARAMS); - Json::Value jvRequest = jvParams[0u]; + Json::Value jvRequest = jvParams.size() ? jvParams[0u] : Json::Value(Json::objectValue); if (!jvRequest.isObject()) return rpcError(rpcINVALID_PARAMS); From 1dcc62f2adcc0dc6733ca6959dff3442c15792af Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 17:04:17 -0800 Subject: [PATCH 134/525] Add a http server config to the example test config. --- test/config-example.js | 8 ++++++++ test/testutils.js | 2 -- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/test/config-example.js b/test/config-example.js index 0ddf080ee..0e6a64f93 100644 --- a/test/config-example.js +++ b/test/config-example.js @@ -35,4 +35,12 @@ exports.servers = { } }; +exports.http_servers = { + // A local test server + "alpha-http" : { + "ip" : "127.0.0.1", + "port" : 8088, + } +}; + // vim:sw=2:sts=2:ts=8:et diff --git a/test/testutils.js b/test/testutils.js index 07fd28d37..55e87a38d 100644 --- a/test/testutils.js +++ b/test/testutils.js @@ -107,8 +107,6 @@ var build_setup = function (opts, host) { var build_teardown = function (host) { return function (done) { - - host = host || config.server_default; var data = this.store[host]; From 19cc1c88f750aec88c542f8e98da8cacbb599faa Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 17:04:54 -0800 Subject: [PATCH 135/525] UT: jsonrpc tests - including subscribe. --- test/jsonrpc-test.js | 247 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 test/jsonrpc-test.js diff --git a/test/jsonrpc-test.js b/test/jsonrpc-test.js new file mode 100644 index 000000000..88fe47521 --- /dev/null +++ b/test/jsonrpc-test.js @@ -0,0 +1,247 @@ +var async = require("async"); +var buster = require("buster"); +var http = require("http"); +var jsonrpc = require("simple-jsonrpc"); +var EventEmitter = require('events').EventEmitter; + +var Amount = require("../src/js/amount.js").Amount; +var Remote = require("../src/js/remote.js").Remote; +var Server = require("./server.js").Server; + +var testutils = require("./testutils.js"); + +var config = require("./config.js"); + +require("../src/js/amount.js").config = require("./config.js"); +require("../src/js/remote.js").config = require("./config.js"); + +// How long to wait for server to start. +var serverDelay = 1500; + +buster.testRunner.timeout = 5000; + +var HttpServer = function () { +}; + +var server; +var server_events; + +var build_setup = function (options) { + var setup = testutils.build_setup(options); + + return function (done) { + var self = this; + + var http_config = config.http_servers["zed"]; + + server_events = new EventEmitter; + server = http.createServer(function (req, res) { + // console.log("REQUEST"); + var input = ""; + + req.setEncoding(); + + req.on('data', function (buffer) { + // console.log("DATA: %s", buffer); + + input = input + buffer; + }); + + req.on('end', function () { + // console.log("END"); + var request = JSON.parse(input); + + // console.log("REQ: %s", JSON.stringify(request, undefined, 2)); + + server_events.emit('request', request, res); + }); + + req.on('close', function () { + // console.log("CLOSE"); + }); + }); + + server.listen(http_config.port, http_config.ip, undefined, + function () { + // console.log("server up: %s %d", http_config.ip, http_config.port); + + setup.call(self, done); + }); + }; +}; + +var build_teardown = function () { + var teardown = testutils.build_teardown(); + + return function (done) { + var self = this; + + server.close(function () { + // console.log("server closed"); + + teardown.call(self, done); + }); + }; +}; + +buster.testCase("JSON-RPC", { + setUp : build_setup(), + // setUp : build_setup({ verbose: true }), + // setUp : build_setup({verbose: true , no_server: true}), + tearDown : build_teardown(), + + "server_info" : + function (done) { + var rippled_config = config.servers.alpha; + var client = jsonrpc.client("http://" + rippled_config.rpc_ip + ":" + rippled_config.rpc_port); + + client.call('server_info', [], function (result) { + // console.log(JSON.stringify(result, undefined, 2)); + buster.assert('info' in result); + + done(); + }); + }, + + "subscribe server" : + function (done) { + var rippled_config = config.servers.alpha; + var client = jsonrpc.client("http://" + rippled_config.rpc_ip + ":" + rippled_config.rpc_port); + var http_config = config.http_servers["zed"]; + + client.call('subscribe', [{ + 'url' : "http://" + http_config.ip + ":" + http_config.port, + 'streams' : [ 'server' ], + }], function (result) { + console.log(JSON.stringify(result, undefined, 2)); + buster.assert('random' in result); + + done(); + }); + }, + + "=>subscribe ledger" : + function (done) { + var self = this; + + var rippled_config = config.servers.alpha; + var client = jsonrpc.client("http://" + rippled_config.rpc_ip + ":" + rippled_config.rpc_port); + var http_config = config.http_servers["zed"]; + + async.waterfall([ + function (callback) { + self.what = "Subscribe."; + + client.call('subscribe', [{ + 'url' : "http://" + http_config.ip + ":" + http_config.port, + 'streams' : [ 'ledger' ], + }], function (result) { + //console.log(JSON.stringify(result, undefined, 2)); + + buster.assert('ledger_index' in result); + + callback(); + }); + }, + function (callback) { + self.what = "Accept a ledger."; + + server_events.once('request', function (request, response) { + // console.log("GOT: %s", JSON.stringify(request, undefined, 2)); + + buster.assert.equals(1, request.params.seq); + buster.assert.equals(3, request.params.ledger_index); + + response.statusCode = 200; + response.end(JSON.stringify({ + jsonrpc: "2.0", + result: {}, + id: request.id + })); + + callback(); + }); + + self.remote.ledger_accept(); + }, + function (callback) { + self.what = "Accept another ledger."; + + server_events.once('request', function (request, response) { + // console.log("GOT: %s", JSON.stringify(request, undefined, 2)); + + buster.assert.equals(2, request.params.seq); + buster.assert.equals(4, request.params.ledger_index); + + response.statusCode = 200; + response.end(JSON.stringify({ + jsonrpc: "2.0", + result: {}, + id: request.id + })); + + callback(); + }); + + self.remote.ledger_accept(); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, + +// var self = this; +// var ledgers = 20; +// var got_proposed; +// +// this.remote.transaction() +// .payment('root', 'alice', "1") +// .on('success', function (r) { +// // Transaction sent. +// +// // console.log("success: %s", JSON.stringify(r)); +// }) +// .on('pending', function() { +// // Moving ledgers along. +// // console.log("missing: %d", ledgers); +// +// ledgers -= 1; +// if (ledgers) { +// self.remote.ledger_accept(); +// } +// else { +// buster.assert(false, "Final never received."); +// done(); +// } +// }) +// .on('lost', function () { +// // Transaction did not make it in. +// // console.log("lost"); +// +// buster.assert(true); +// done(); +// }) +// .on('proposed', function (m) { +// // Transaction got an error. +// // console.log("proposed: %s", JSON.stringify(m)); +// +// buster.assert.equals(m.result, 'tecNO_DST_INSUF_XRP'); +// +// got_proposed = true; +// +// self.remote.ledger_accept(); // Move it along. +// }) +// .on('final', function (m) { +// // console.log("final: %s", JSON.stringify(m, undefined, 2)); +// +// buster.assert.equals(m.metadata.TransactionResult, 'tecNO_DST_INSUF_XRP'); +// done(); +// }) +// .on('error', function(m) { +// // console.log("error: %s", m); +// +// buster.assert(false); +// }) +// .submit(); +}); From bea23a6372380883b00ff382dc79f4e005558bba Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 17:16:16 -0800 Subject: [PATCH 136/525] UT: Clean up. --- test/jsonrpc-test.js | 58 ++------------------------------------------ 1 file changed, 2 insertions(+), 56 deletions(-) diff --git a/test/jsonrpc-test.js b/test/jsonrpc-test.js index 88fe47521..5965807bf 100644 --- a/test/jsonrpc-test.js +++ b/test/jsonrpc-test.js @@ -120,7 +120,7 @@ buster.testCase("JSON-RPC", { }); }, - "=>subscribe ledger" : + "subscribe ledger" : function (done) { var self = this; @@ -189,59 +189,5 @@ buster.testCase("JSON-RPC", { buster.refute(error, self.what); done(); }); - }, - -// var self = this; -// var ledgers = 20; -// var got_proposed; -// -// this.remote.transaction() -// .payment('root', 'alice', "1") -// .on('success', function (r) { -// // Transaction sent. -// -// // console.log("success: %s", JSON.stringify(r)); -// }) -// .on('pending', function() { -// // Moving ledgers along. -// // console.log("missing: %d", ledgers); -// -// ledgers -= 1; -// if (ledgers) { -// self.remote.ledger_accept(); -// } -// else { -// buster.assert(false, "Final never received."); -// done(); -// } -// }) -// .on('lost', function () { -// // Transaction did not make it in. -// // console.log("lost"); -// -// buster.assert(true); -// done(); -// }) -// .on('proposed', function (m) { -// // Transaction got an error. -// // console.log("proposed: %s", JSON.stringify(m)); -// -// buster.assert.equals(m.result, 'tecNO_DST_INSUF_XRP'); -// -// got_proposed = true; -// -// self.remote.ledger_accept(); // Move it along. -// }) -// .on('final', function (m) { -// // console.log("final: %s", JSON.stringify(m, undefined, 2)); -// -// buster.assert.equals(m.metadata.TransactionResult, 'tecNO_DST_INSUF_XRP'); -// done(); -// }) -// .on('error', function(m) { -// // console.log("error: %s", m); -// -// buster.assert(false); -// }) -// .submit(); + } }); From 937f9718f8339b151a0f38a0a757fbecef5812ed Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 17:16:53 -0800 Subject: [PATCH 137/525] Support paths for subscribe via json-rpc. --- src/cpp/ripple/CallRPC.cpp | 5 +++-- src/cpp/ripple/CallRPC.h | 2 +- src/cpp/ripple/RPC.h | 2 +- src/cpp/ripple/RPCSub.cpp | 10 ++-------- src/cpp/ripple/RPCSub.h | 1 + src/cpp/ripple/rpc.cpp | 6 ++++-- 6 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index c04f1cdf6..4b5b46816 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -537,6 +537,7 @@ int commandLineRPC(const std::vector& vCmd) theConfig.RPC_PORT, theConfig.RPC_USER, theConfig.RPC_PASSWORD, + "", jvRequest.isMember("method") // Allow parser to rewrite method. ? jvRequest["method"].asString() : vCmd[0], @@ -597,7 +598,7 @@ int commandLineRPC(const std::vector& vCmd) return nRet; } -Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strMethod, const Json::Value& params) +Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strPath, const std::string& strMethod, const Json::Value& params) { // Connect to localhost if (!theConfig.QUIET) @@ -618,7 +619,7 @@ Json::Value callRPC(const std::string& strIp, const int iPort, const std::string // Send request std::string strRequest = JSONRPCRequest(strMethod, params, Json::Value(1)); cLog(lsDEBUG) << "send request " << strMethod << " : " << strRequest << std::endl; - std::string strPost = createHTTPPost(strRequest, mapRequestHeaders); + std::string strPost = createHTTPPost(strPath, strRequest, mapRequestHeaders); stream << strPost << std::flush; // std::cerr << "post " << strPost << std::endl; diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index 9b9ca8396..18f25eedb 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -41,7 +41,7 @@ public: }; extern int commandLineRPC(const std::vector& vCmd); -extern Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strMethod, const Json::Value& params); +extern Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strPath, const std::string& strMethod, const Json::Value& params); #endif diff --git a/src/cpp/ripple/RPC.h b/src/cpp/ripple/RPC.h index 7d0406a20..61d42a6be 100644 --- a/src/cpp/ripple/RPC.h +++ b/src/cpp/ripple/RPC.h @@ -29,7 +29,7 @@ enum http_status_type extern std::string JSONRPCRequest(const std::string& strMethod, const Json::Value& params, const Json::Value& id); -extern std::string createHTTPPost(const std::string& strMsg, +extern std::string createHTTPPost(const std::string& strPath, const std::string& strMsg, const std::map& mapRequestHeaders); extern int ReadHTTP(std::basic_istream& stream, diff --git a/src/cpp/ripple/RPCSub.cpp b/src/cpp/ripple/RPCSub.cpp index 35ec7b719..871803e2d 100644 --- a/src/cpp/ripple/RPCSub.cpp +++ b/src/cpp/ripple/RPCSub.cpp @@ -10,9 +10,8 @@ RPCSub::RPCSub(const std::string& strUrl, const std::string& strUsername, const : mUrl(strUrl), mUsername(strUsername), mPassword(strPassword) { std::string strScheme; - std::string strPath; - if (!parseUrl(strUrl, strScheme, mIp, mPort, strPath)) + if (!parseUrl(strUrl, strScheme, mIp, mPort, mPath)) { throw std::runtime_error("Failed to parse url."); } @@ -20,11 +19,6 @@ RPCSub::RPCSub(const std::string& strUrl, const std::string& strUsername, const { throw std::runtime_error("Only http is supported."); } - else if (!strPath.empty()) - { - // XXX FIXME: support path - throw std::runtime_error("Only empty path is supported."); - } mSeq = 1; } @@ -64,7 +58,7 @@ void RPCSub::sendThread() // Drop result. try { - (void) callRPC(mIp, mPort, mUsername, mPassword, "event", jvEvent); + (void) callRPC(mIp, mPort, mUsername, mPassword, mPath, "event", jvEvent); } catch (const std::exception& e) { diff --git a/src/cpp/ripple/RPCSub.h b/src/cpp/ripple/RPCSub.h index 1ab72c917..8cca3e7f5 100644 --- a/src/cpp/ripple/RPCSub.h +++ b/src/cpp/ripple/RPCSub.h @@ -17,6 +17,7 @@ class RPCSub : public InfoSub int mPort; std::string mUsername; std::string mPassword; + std::string mPath; int mSeq; // Next id to allocate. diff --git a/src/cpp/ripple/rpc.cpp b/src/cpp/ripple/rpc.cpp index 97731b763..5b80d3e65 100644 --- a/src/cpp/ripple/rpc.cpp +++ b/src/cpp/ripple/rpc.cpp @@ -39,11 +39,13 @@ Json::Value JSONRPCError(int code, const std::string& message) // and to be compatible with other JSON-RPC implementations. // -std::string createHTTPPost(const std::string& strMsg, const std::map& mapRequestHeaders) +std::string createHTTPPost(const std::string& strPath, const std::string& strMsg, const std::map& mapRequestHeaders) { std::ostringstream s; - s << "POST / HTTP/1.1\r\n" + s << "POST " + << (strPath.empty() ? "/" : strPath) + << " HTTP/1.1\r\n" << "User-Agent: " SYSTEM_NAME "-json-rpc/" << FormatFullVersion() << "\r\n" << "Host: 127.0.0.1\r\n" << "Content-Type: application/json\r\n" From 2d3994d1d354304f2b4779bbefd0e527afe9c256 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 17:17:43 -0800 Subject: [PATCH 138/525] UT: clean up. --- test/jsonrpc-test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/jsonrpc-test.js b/test/jsonrpc-test.js index 5965807bf..1c1421666 100644 --- a/test/jsonrpc-test.js +++ b/test/jsonrpc-test.js @@ -113,7 +113,8 @@ buster.testCase("JSON-RPC", { 'url' : "http://" + http_config.ip + ":" + http_config.port, 'streams' : [ 'server' ], }], function (result) { - console.log(JSON.stringify(result, undefined, 2)); + // console.log(JSON.stringify(result, undefined, 2)); + buster.assert('random' in result); done(); From c785b5bb923c0826f48fceacabfc3c83fc3c4c1f Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 30 Dec 2012 18:24:25 -0800 Subject: [PATCH 139/525] Fix a bug in rpc subscribe. --- src/cpp/ripple/RPCSub.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/cpp/ripple/RPCSub.cpp b/src/cpp/ripple/RPCSub.cpp index 871803e2d..c4ecc609c 100644 --- a/src/cpp/ripple/RPCSub.cpp +++ b/src/cpp/ripple/RPCSub.cpp @@ -64,8 +64,6 @@ void RPCSub::sendThread() { cLog(lsDEBUG) << boost::str(boost::format("callRPC exception: %s") % e.what()); } - - sendThread(); } } while (bSend); } From 0c91e7e78abdb3c6e0d41496187569e240cb3480 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 30 Dec 2012 22:36:54 -0800 Subject: [PATCH 140/525] Add the code to walk to the ledger chain. --- src/cpp/ripple/Ledger.cpp | 52 +++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 75bac9ba4..dd82714fd 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -935,55 +935,49 @@ uint256 Ledger::getLedgerHashIndex(uint32 desiredLedgerIndex) return s.getSHA512Half(); } -int Ledger::getLedgerHashOffset(uint32 ledgerIndex) -{ // get the offset for this ledger's hash (or the first one after it) in the every-256-ledger table - return (ledgerIndex >> 8) % 256; -} - -int Ledger::getLedgerHashOffset(uint32 desiredLedgerIndex, uint32 currentLedgerIndex) -{ // get the offset for this ledger's hash in the every-ledger table, -1 if not in it - if (desiredLedgerIndex >= currentLedgerIndex) - return -1; - - if (currentLedgerIndex < 256) - return desiredLedgerIndex; - - if (desiredLedgerIndex < (currentLedgerIndex - 256)) - return -1; - - return currentLedgerIndex - desiredLedgerIndex - 1; -} - uint256 Ledger::getLedgerHash(uint32 ledgerIndex) { // return the hash of the specified ledger, 0 if not available // easy cases if (ledgerIndex > mLedgerSeq) return uint256(); + if (ledgerIndex == mLedgerSeq) return getHash(); + if (ledgerIndex == (mLedgerSeq - 1)) return mParentHash; - // within 255 - int offset = getLedgerHashOffset(ledgerIndex, mLedgerSeq); - if (offset != -1) + // within 256 + int diff = mLedgerSeq - ledgerIndex; + if (diff <= 256) { SLE::pointer hashIndex = getSLE(getLedgerHashIndex()); if (hashIndex) - return hashIndex->getFieldV256(sfHashes).peekValue().at(offset); - else - assert(false); + { + assert(hashIndex->getFieldU32(sfLastLedgerSequence) == (mLedgerSeq - 1)); + STVector256 vec = hashIndex->getFieldV256(sfHashes); + if (vec.size() >= diff) + return vec.at(vec.size() - diff); + } } if ((ledgerIndex & 0xff) != 0) return uint256(); + // in skiplist SLE::pointer hashIndex = getSLE(getLedgerHashIndex(ledgerIndex)); if (hashIndex) - return hashIndex->getFieldV256(sfHashes).peekValue().at(getLedgerHashOffset(ledgerIndex, mLedgerSeq)); - else - assert(false); + { + int lastSeq = hashIndex->getFieldU32(sfLastLedgerSequence); + assert(lastSeq >= ledgerIndex); + assert((lastSeq & 0xff) == 0); + int sDiff = (lastSeq - ledgerIndex) >> 8; + + STVector256 vec = hashIndex->getFieldV256(sfHashes); + if (vec.size() > sDiff) + return vec.at(vec.size() - sDiff - 1); + } return uint256(); } @@ -1144,9 +1138,7 @@ void Ledger::updateSkipList() std::vector hashes; if (!skipList) - { skipList = boost::make_shared(ltLEDGER_HASHES, hash); - } else hashes = skipList->getFieldV256(sfHashes).peekValue(); From bafa5cb667cf0bcf397cd0afe2ffef87392986cb Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 30 Dec 2012 23:39:41 -0800 Subject: [PATCH 141/525] Fix a case that could stall the acquire engine. --- src/cpp/ripple/LedgerAcquire.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 3f0d6ac32..763c91644 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -224,6 +224,8 @@ void LedgerAcquire::trigger(Peer::ref peer, bool timer) tmGL.set_itype(ripple::liBASE); cLog(lsTRACE) << "Sending base request to " << (peer ? "selected peer" : "all peers"); sendRequest(tmGL, peer); + if (timer) + resetTimer(); return; } From 40b87e915764733d81d23aeddd5b21af59cd87b2 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 30 Dec 2012 23:48:53 -0800 Subject: [PATCH 142/525] Fix a bug that would cause the server to exit the "need network ledger" state prematurely. --- src/cpp/ripple/LedgerConsensus.cpp | 4 ++-- src/cpp/ripple/NetworkOPs.cpp | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 063326912..c386f62b3 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -425,8 +425,8 @@ void LedgerConsensus::handleLCL(const uint256& lclHash) cLog(lsINFO) << "Have the consensus ledger " << mPrevLedgerHash; mHaveCorrectLCL = true; - mAcquiringLedger.reset(); - theApp->getOPs().clearNeedNetworkLedger(); + if (mAcquiringLedger->isComplete()) + theApp->getOPs().clearNeedNetworkLedger(); mCloseResolution = ContinuousLedgerTiming::getNextLedgerTimeResolution( mPreviousLedger->getCloseResolution(), mPreviousLedger->getCloseAgree(), mPreviousLedger->getLedgerSeq() + 1); diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 327d16528..fa775e678 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -770,6 +770,7 @@ bool NetworkOPs::checkLastClosedLedger(const std::vector& peerLis } return true; } + clearNeedNetworkLedger(); consensus = mAcquiringLedger->getLedger(); } From 8b8a538a5c8d4ee6cad426f7239cda5e67452fc8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 31 Dec 2012 00:25:52 -0800 Subject: [PATCH 143/525] On a ledger jump, properly invalidate prior ledgers and invalidate a backfill in progress. --- src/cpp/ripple/LedgerMaster.cpp | 44 ++++++++++++++++++++++++++------- src/cpp/ripple/LedgerMaster.h | 1 + 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index f32749a6c..edf6dfd04 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -78,7 +78,6 @@ void LedgerMaster::storeLedger(Ledger::ref ledger) mLedgerHistory.addAcceptedLedger(ledger, false); } - Ledger::pointer LedgerMaster::closeLedger(bool recover) { boost::recursive_mutex::scoped_lock sl(mLock); @@ -208,6 +207,37 @@ void LedgerMaster::resumeAcquiring() } } +void LedgerMaster::fixMismatch(Ledger::ref ledger) +{ + int invalidate = 0; + + for (uint32 lSeq = ledger->getLedgerSeq() - 1; lSeq > 0; --lSeq) + if (mCompleteLedgers.hasValue(lSeq)) + { + uint256 hash = ledger->getLedgerHash(lSeq); + if (hash.isNonZero()) + { // try to close the seam + Ledger::pointer otherLedger = getLedgerBySeq(lSeq); + if (otherLedger && (otherLedger->getHash() == hash)) + { // we closed the seam + tLog(invalidate != 0, lsWARNING) << "Match at " << lSeq << ", " << + invalidate << " prior ledgers invalidated"; + return; + } + } + mCompleteLedgers.clearValue(lSeq); + if (mMissingSeq == lSeq) + { + mMissingLedger.reset(); + mMissingSeq = 0; + } + ++invalidate; + } + + // all prior ledgers invalidated + tLog(invalidate != 0, lsWARNING) << "All " << invalidate << " prior ledgers invalidated"; +} + void LedgerMaster::setFullLedger(Ledger::ref ledger) { // A new ledger has been accepted as part of the trusted chain cLog(lsDEBUG) << "Ledger " << ledger->getLedgerSeq() << " accepted :" << ledger->getHash(); @@ -219,15 +249,11 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) if ((ledger->getLedgerSeq() != 0) && mCompleteLedgers.hasValue(ledger->getLedgerSeq() - 1)) { // we think we have the previous ledger, double check Ledger::pointer prevLedger = getLedgerBySeq(ledger->getLedgerSeq() - 1); - if (!prevLedger) + if (!prevLedger || (prevLedger->getHash() != ledger->getParentHash())) { - cLog(lsWARNING) << "Ledger " << ledger->getLedgerSeq() - 1 << " missing"; - mCompleteLedgers.clearValue(ledger->getLedgerSeq() - 1); - } - else if (prevLedger->getHash() != ledger->getParentHash()) - { - cLog(lsWARNING) << "Ledger " << ledger->getLedgerSeq() << " invalidates prior ledger"; - mCompleteLedgers.clearValue(prevLedger->getLedgerSeq()); + cLog(lsWARNING) << "Acquired ledger invalidates previous ledger: " << + (prevLedger ? "hashMismatch" : "missingLedger"); + fixMismatch(ledger); } } diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 0a875be15..7f22d8114 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -93,6 +93,7 @@ public: void setLedgerRangePresent(uint32 minV, uint32 maxV) { mCompleteLedgers.setRange(minV, maxV); } void addHeldTransaction(const Transaction::pointer& trans); + void fixMismatch(Ledger::ref ledger); bool haveLedgerRange(uint32 from, uint32 to); From bbb2a41c800397504fa42e0cc7a07f5bb8172d08 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 31 Dec 2012 16:37:35 -0800 Subject: [PATCH 144/525] UT: Add some non-function path tests. --- test/path-test.js | 231 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 228 insertions(+), 3 deletions(-) diff --git a/test/path-test.js b/test/path-test.js index 586de543a..481c04c14 100644 --- a/test/path-test.js +++ b/test/path-test.js @@ -12,8 +12,7 @@ require("../src/js/remote.js").config = require("./config.js"); buster.testRunner.timeout = 5000; -if (false) -buster.testCase("Basic Path finding", { +buster.testCase("// Basic Path finding", { // 'setUp' : testutils.build_setup({ verbose: true, no_server: true }), // 'setUp' : testutils.build_setup({ verbose: true }), 'setUp' : testutils.build_setup(), @@ -222,7 +221,7 @@ buster.testCase("Basic Path finding", { }, }); -buster.testCase("Extended Path finding", { +buster.testCase("// Extended Path finding", { // 'setUp' : testutils.build_setup({ verbose: true, no_server: true }), // 'setUp' : testutils.build_setup({ verbose: true }), 'setUp' : testutils.build_setup(), @@ -432,6 +431,232 @@ buster.testCase("Extended Path finding", { done(); }); }, + + // Test alternative paths with qualities. }); +buster.testCase("// More Path finding", { + // 'setUp' : testutils.build_setup({ verbose: true, no_server: true }), + // 'setUp' : testutils.build_setup({ verbose: true }), + 'setUp' : testutils.build_setup(), + 'tearDown' : testutils.build_teardown(), + + "alternative paths - limit returned paths to best quality" : + // alice +- bitstamp -+ bob + // |- carol(fee) -| // To be excluded. + // |- dan(issue) -| + // |- mtgox -| + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000", ["alice", "bob", "carol", "dan", "mtgox", "bitstamp"], callback); + }, + function (callback) { + self.what = "Set transfer rate."; + + self.remote.transaction() + .account_set("carol") + .transfer_rate(1e9*1.1) + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Set credit limits."; + + testutils.credit_limits(self.remote, + { + "alice" : [ "800/USD/bitstamp", "800/USD/carol", "800/USD/dan", "800/USD/mtgox", ], + "bob" : [ "800/USD/bitstamp", "800/USD/carol", "800/USD/dan", "800/USD/mtgox", ], + "dan" : [ "800/USD/alice", "800/USD/bob" ], + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "bitstamp" : "100/USD/alice", + "carol" : "100/USD/alice", + "mtgox" : "100/USD/alice", + }, + callback); + }, + function (callback) { + self.what = "Find path from alice to bob"; + + self.remote.request_ripple_path_find("alice", "bob", "5/USD/bob", + [ { 'currency' : "USD" } ]) + .on('success', function (m) { + console.log("proposed: %s", JSON.stringify(m)); + + // 1 alternative. +// buster.assert.equals(1, m.alternatives.length) +// // Path is empty. +// buster.assert.equals(0, m.alternatives[0].paths_canonical.length) + + callback(); + }) + .request(); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, + + "alternative paths - consume best transfer" : + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000", ["alice", "bob", "mtgox", "bitstamp"], callback); + }, + function (callback) { + self.what = "Set transfer rate."; + + self.remote.transaction() + .account_set("bitstamp") + .transfer_rate(1e9*1.1) + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Set credit limits."; + + testutils.credit_limits(self.remote, + { + "alice" : [ "600/USD/mtgox", "800/USD/bitstamp" ], + "bob" : [ "700/USD/mtgox", "900/USD/bitstamp" ] + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "bitstamp" : "70/USD/alice", + "mtgox" : "70/USD/alice", + }, + callback); + }, + function (callback) { + self.what = "Payment with auto path"; + + self.remote.transaction() + .payment('alice', 'bob', "70/USD/bob") + .build_path(true) + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : [ "0/USD/mtgox", "70/USD/bitstamp" ], + "bob" : [ "70/USD/mtgox", "0/USD/bitstamp" ], + "bitstamp" : [ "-70/USD/alice", "0/USD/bob" ], + "mtgox" : [ "0/USD/alice", "-70/USD/bob" ], + }, + callback); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, + + "alternative paths - consume best transfer first" : + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000", ["alice", "bob", "mtgox", "bitstamp"], callback); + }, + function (callback) { + self.what = "Set transfer rate."; + + self.remote.transaction() + .account_set("bitstamp") + .transfer_rate(1e9*1.1) + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Set credit limits."; + + testutils.credit_limits(self.remote, + { + "alice" : [ "600/USD/mtgox", "800/USD/bitstamp" ], + "bob" : [ "700/USD/mtgox", "900/USD/bitstamp" ] + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "bitstamp" : "70/USD/alice", + "mtgox" : "70/USD/alice", + }, + callback); + }, + function (callback) { + self.what = "Payment with auto path"; + + self.remote.transaction() + .payment('alice', 'bob', "77/USD/bob") + .build_path(true) + .send_max("100/USD/alice") + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : [ "0/USD/mtgox", "62.3/USD/bitstamp" ], + "bob" : [ "70/USD/mtgox", "7/USD/bitstamp" ], + "bitstamp" : [ "-62.3/USD/alice", "-7/USD/bob" ], + "mtgox" : [ "0/USD/alice", "-70/USD/bob" ], + }, + callback); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, + + // Test alternative paths with qualities. +}); // vim:sw=2:sts=2:ts=8:et From 6830a61ff157d9c535ba43ef76acea3295c2eafd Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 1 Jan 2013 02:04:19 -0800 Subject: [PATCH 145/525] Make validation_create require admin. --- src/cpp/ripple/RPCHandler.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 123400760..74dc71c67 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1353,8 +1353,10 @@ Json::Value RPCHandler::doAccountTransactions(Json::Value jvRequest) } // { -// secret: +// secret: // optional // } +// +// This command requires admin access because it makes no sense to ask an untrusted server for this. Json::Value RPCHandler::doValidationCreate(Json::Value jvRequest) { RippleAddress raSeed; Json::Value obj(Json::objectValue); @@ -1518,6 +1520,7 @@ Json::Value RPCHandler::doWalletPropose(Json::Value jvRequest) Json::Value obj(Json::objectValue); obj["master_seed"] = naSeed.humanSeed(); + obj["master_seed_hex"] = naSeed.getSeed().ToString(); //obj["master_key"] = naSeed.humanSeed1751(); obj["account_id"] = naAccount.humanAccountID(); @@ -2455,7 +2458,7 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { "unl_reset", &RPCHandler::doUnlReset, true, optNone }, { "unl_score", &RPCHandler::doUnlScore, true, optNone }, - { "validation_create", &RPCHandler::doValidationCreate, false, optNone }, + { "validation_create", &RPCHandler::doValidationCreate, true, optNone }, { "validation_seed", &RPCHandler::doValidationSeed, false, optNone }, { "wallet_accounts", &RPCHandler::doWalletAccounts, false, optCurrent }, From 3da7b9b90b64a00e99e68afd4b1b3775f2ae6118 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 1 Jan 2013 12:00:40 -0800 Subject: [PATCH 146/525] Add a utility to create a gravatar hash. --- bin/email_hash.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100755 bin/email_hash.js diff --git a/bin/email_hash.js b/bin/email_hash.js new file mode 100755 index 000000000..4ba07c9e0 --- /dev/null +++ b/bin/email_hash.js @@ -0,0 +1,17 @@ +#!/usr/bin/node +// +// Returns a Gravatar stle hash as per: http://en.gravatar.com/site/implement/hash/ +// + +if (process.argv.length != 3) { + process.stderr.write("Usage: " + process.argv[1] + " email_address\n\nReturns gravitar style hash.\n"); + +} else { + var md5 = require('crypto').createHash('md5'); + + md5.update(process.argv[2].trim().toLowerCase()); + + process.stdout.write(md5.digest('hex') + "\n"); +} + +// vim:sw=2:sts=2:ts=8:et From 2023e4266b669f7abf1731f1407d77d353c22e1c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 1 Jan 2013 12:34:53 -0800 Subject: [PATCH 147/525] Add a utility to hexify a string. --- bin/hexify.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100755 bin/hexify.js diff --git a/bin/hexify.js b/bin/hexify.js new file mode 100755 index 000000000..231ee8b68 --- /dev/null +++ b/bin/hexify.js @@ -0,0 +1,22 @@ +#!/usr/bin/node +// +// Returns hex of string. +// + +var stringToHex = function (s) { + return Array.prototype.map.call(s, function (c) { + var b = c.charCodeAt(0); + + return b < 16 ? "0" + b.toString(16) : b.toString(16); + }).join(""); +}; + +if (process.argv.length != 3) { + process.stderr.write("Usage: " + process.argv[1] + " string\n\nReturns hex of lowercasing string.\n"); + +} else { + + process.stdout.write(stringToHex(process.argv[2].toLowerCase()) + "\n"); +} + +// vim:sw=2:sts=2:ts=8:et From c78f3520350e75800f502dad0fbe0cf18fde865d Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 1 Jan 2013 12:35:35 -0800 Subject: [PATCH 148/525] Add default fee for AccountSet. --- src/cpp/ripple/RPCHandler.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 74dc71c67..30d5de75f 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1006,7 +1006,9 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) } if (!txJSON.isMember("Fee") - && ("OfferCreate" == txJSON["TransactionType"].asString() + && ( + "AccountSet" == txJSON["TransactionType"].asString() + || "OfferCreate" == txJSON["TransactionType"].asString() || "OfferCancel" == txJSON["TransactionType"].asString() || "TrustSet" == txJSON["TransactionType"].asString())) { From f09543fe8ac451988efb5be229764ede843767e7 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 1 Jan 2013 14:35:59 -0800 Subject: [PATCH 149/525] Cosmetic. --- bin/hexify.js | 2 +- rippled-example.cfg | 2 +- src/cpp/ripple/Config.cpp | 1 - test/jsonrpc-test.js | 3 --- 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/bin/hexify.js b/bin/hexify.js index 231ee8b68..1c14f646f 100755 --- a/bin/hexify.js +++ b/bin/hexify.js @@ -1,6 +1,6 @@ #!/usr/bin/node // -// Returns hex of string. +// Returns hex of lowercasing a string. // var stringToHex = function (s) { diff --git a/rippled-example.cfg b/rippled-example.cfg index 3e6ba5bc0..c37cd9c0e 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -52,7 +52,7 @@ # # [ips]: # Only valid in "rippled.cfg", "ripple.txt", and the referered [ips_url]. -# List of ips where the Newcoin protocol is avialable. +# List of ips where the Ripple protocol is avialable. # One ipv4 or ipv6 address per line. # A port may optionally be specified after adding a space to the address. # By convention, if known, IPs are listed in from most to least trusted. diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index d60cbc6f9..943b5b727 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -274,7 +274,6 @@ void Config::load() sectionSingleB(secConfig, SECTION_WEBSOCKET_SSL_CERT, WEBSOCKET_SSL_CERT); sectionSingleB(secConfig, SECTION_WEBSOCKET_SSL_CHAIN, WEBSOCKET_SSL_CHAIN); sectionSingleB(secConfig, SECTION_WEBSOCKET_SSL_KEY, WEBSOCKET_SSL_KEY); - if (sectionSingleB(secConfig, SECTION_VALIDATION_SEED, strTemp)) { diff --git a/test/jsonrpc-test.js b/test/jsonrpc-test.js index 1c1421666..ffad70ba6 100644 --- a/test/jsonrpc-test.js +++ b/test/jsonrpc-test.js @@ -20,9 +20,6 @@ var serverDelay = 1500; buster.testRunner.timeout = 5000; -var HttpServer = function () { -}; - var server; var server_events; From 1e24721a98a86cf178bac02754da2e3630f16f59 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 1 Jan 2013 16:11:30 -0800 Subject: [PATCH 150/525] First part of the fix to stop us from publishing ledgers that don't get validated. --- src/cpp/ripple/Ledger.cpp | 1 + src/cpp/ripple/LedgerMaster.cpp | 27 +++++++++++++++++++++---- src/cpp/ripple/LedgerMaster.h | 18 ++++++++++++++++- src/cpp/ripple/ValidationCollection.cpp | 2 ++ 4 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index dd82714fd..fb9fd3d28 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -467,6 +467,7 @@ void Ledger::saveAcceptedLedger(bool fromConsensus, LoadEvent::pointer event) theApp->getLedgerMaster().setFullLedger(shared_from_this()); event->stop(); + // FIXME: Need to put on hold until the ledger acquires sufficient validations theApp->getOPs().pubLedger(shared_from_this()); decPendingSaves(); diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index edf6dfd04..438b63271 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -49,10 +49,13 @@ void LedgerMaster::pushLedger(Ledger::ref newLCL, Ledger::ref newOL, bool fromCo cLog(lsINFO) << "StashAccepted: " << newLCL->getHash(); } - boost::recursive_mutex::scoped_lock ml(mLock); - mFinalizedLedger = newLCL; - mCurrentLedger = newOL; - mEngine.setLedger(newOL); + { + boost::recursive_mutex::scoped_lock ml(mLock); + mFinalizedLedger = newLCL; + mCurrentLedger = newOL; + mEngine.setLedger(newOL); + } + checkPublish(newLCL->getHash(), newLCL->getLedgerSeq()); } void LedgerMaster::switchLedgers(Ledger::ref lastClosed, Ledger::ref current) @@ -69,6 +72,7 @@ void LedgerMaster::switchLedgers(Ledger::ref lastClosed, Ledger::ref current) assert(!mCurrentLedger->isClosed()); mEngine.setLedger(mCurrentLedger); + checkPublish(lastClosed->getHash(), lastClosed->getLedgerSeq()); } void LedgerMaster::storeLedger(Ledger::ref ledger) @@ -306,4 +310,19 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) } } +void LedgerMaster::checkPublish(const uint256& hash) +{ + Ledger::pointer ledger = mLedgerHistory.getLedgerByHash(hash); + if (ledger) + checkPublish(hash, ledger->getLedgerSeq()); +} + +void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) +{ // check if we need to publish any held ledgers + boost::recursive_mutex::scoped_lock ml(mLock); + + if (seq <= mLastValidateSeq) + return; +} + // vim:ts=4 diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 7f22d8114..770db1bfb 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -17,6 +17,10 @@ class LedgerMaster { +public: + typedef boost::function callback; + +protected: boost::recursive_mutex mLock; TransactionEngine mEngine; @@ -33,6 +37,11 @@ class LedgerMaster uint32 mMissingSeq; bool mTooFast; // We are acquiring faster than we're writing + int mMinValidations; // The minimum validations to publish a ledger + uint256 mLastValidateHash; + uint32 mLastValidateSeq; + std::list mOnValidate; // Called when a ledger has enough validations + void applyFutureTransactions(uint32 ledgerIndex); bool isValidTransaction(const Transaction::pointer& trans); bool isTransactionOnFutureList(const Transaction::pointer& trans); @@ -42,7 +51,9 @@ class LedgerMaster public: - LedgerMaster() : mHeldTransactions(uint256()), mMissingSeq(0), mTooFast(false) { ; } + LedgerMaster() : mHeldTransactions(uint256()), mMissingSeq(0), mTooFast(false), + mMinValidations(0), mLastValidateSeq(0) + { ; } uint32 getCurrentLedgerIndex(); @@ -100,6 +111,11 @@ public: void resumeAcquiring(); void sweep(void) { mLedgerHistory.sweep(); } + + void addValidateCallback(callback& c) { mOnValidate.push_back(c); } + + void checkPublish(const uint256& hash); + void checkPublish(const uint256& hash, uint32 seq); }; #endif diff --git a/src/cpp/ripple/ValidationCollection.cpp b/src/cpp/ripple/ValidationCollection.cpp index 173dc3d65..0eaf81034 100644 --- a/src/cpp/ripple/ValidationCollection.cpp +++ b/src/cpp/ripple/ValidationCollection.cpp @@ -75,6 +75,8 @@ bool ValidationCollection::addValidation(const SerializedValidation::pointer& va cLog(lsINFO) << "Val for " << hash << " from " << signer.humanNodePublic() << " added " << (val->isTrusted() ? "trusted/" : "UNtrusted/") << (isCurrent ? "current" : "stale"); + if (val->isTrusted()) + theApp->getLedgerMaster().checkPublish(hash); return isCurrent; } From db9897f12f26d1de86062c1dc34ec04a8302d62f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 1 Jan 2013 18:15:33 -0800 Subject: [PATCH 151/525] Fix the tagged cache so that the cache holds strong references. --- src/cpp/ripple/TaggedCache.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 1fbaae9ad..681457ac5 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -31,7 +31,7 @@ public: typedef boost::weak_ptr weak_data_ptr; typedef boost::shared_ptr data_ptr; - typedef std::pair cache_entry; + typedef std::pair cache_entry; typedef std::pair cache_pair; protected: @@ -157,7 +157,7 @@ template bool TaggedCache::touch } // In map but not cache, put in cache - mCache.insert(cache_pair(key, cache_entry(time(NULL), weak_data_ptr(cit->second.second)))); + mCache.insert(cache_pair(key, cache_entry(time(NULL), data_ptr(cit->second.second)))); return true; } From 4d6f04ed2f6855f3c3f5444ae7e8c4b3dfb25c3b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 1 Jan 2013 18:16:57 -0800 Subject: [PATCH 152/525] Helper function. --- src/cpp/ripple/LedgerHistory.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/cpp/ripple/LedgerHistory.cpp b/src/cpp/ripple/LedgerHistory.cpp index 0c084d2f7..5bea8e977 100644 --- a/src/cpp/ripple/LedgerHistory.cpp +++ b/src/cpp/ripple/LedgerHistory.cpp @@ -41,6 +41,16 @@ void LedgerHistory::addAcceptedLedger(Ledger::pointer ledger, bool fromConsensus ledger->pendSave(fromConsensus); } +uint256 LedgerHistory::getLedgerHash(uint32 index) +{ + boost::recursive_mutex::scoped_lock sl(mLedgersByHash.peekMutex()); + std::map::iterator it(mLedgersByIndex.find(index)); + if (it != mLedgersByIndex.end()) + return it->second; + sl.unlock(); + return uint256(); +} + Ledger::pointer LedgerHistory::getLedgerBySeq(uint32 index) { boost::recursive_mutex::scoped_lock sl(mLedgersByHash.peekMutex()); From d27b395c1ccae6d6c55f4ca7f0683afefe7d448f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 1 Jan 2013 18:18:27 -0800 Subject: [PATCH 153/525] Helper function. --- src/cpp/ripple/LedgerHistory.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/LedgerHistory.h b/src/cpp/ripple/LedgerHistory.h index 1709e5954..965ac492a 100644 --- a/src/cpp/ripple/LedgerHistory.h +++ b/src/cpp/ripple/LedgerHistory.h @@ -15,6 +15,7 @@ public: void addLedger(Ledger::pointer ledger); void addAcceptedLedger(Ledger::pointer ledger, bool fromConsensus); + uint256 getLedgerHash(uint32 index); Ledger::pointer getLedgerBySeq(uint32 index); Ledger::pointer getLedgerByHash(const uint256& hash); Ledger::pointer canonicalizeLedger(Ledger::pointer, bool cache); From 55825b8b5f994c5a96222b88f6ecd1f5167c5a3a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 1 Jan 2013 18:20:30 -0800 Subject: [PATCH 154/525] Cleanups. --- src/cpp/ripple/ValidationCollection.cpp | 44 ++++++++++++------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/cpp/ripple/ValidationCollection.cpp b/src/cpp/ripple/ValidationCollection.cpp index 0eaf81034..f5e452a87 100644 --- a/src/cpp/ripple/ValidationCollection.cpp +++ b/src/cpp/ripple/ValidationCollection.cpp @@ -85,8 +85,8 @@ ValidationSet ValidationCollection::getValidations(const uint256& ledger) { boost::mutex::scoped_lock sl(mValidationLock); VSpointer set = findSet(ledger); - if (set != VSpointer()) - return *set; + if (set) + return ValidationSet(*set); } return ValidationSet(); } @@ -96,9 +96,9 @@ void ValidationCollection::getValidationCount(const uint256& ledger, bool curren trusted = untrusted = 0; boost::mutex::scoped_lock sl(mValidationLock); VSpointer set = findSet(ledger); - uint32 now = theApp->getOPs().getNetworkTimeNC(); if (set) { + uint32 now = theApp->getOPs().getNetworkTimeNC(); BOOST_FOREACH(u160_val_pair& it, *set) { bool isTrusted = it.second->isTrusted(); @@ -260,26 +260,26 @@ ValidationCollection::getCurrentValidations(uint256 currentLedger) void ValidationCollection::flush() { - bool anyNew = false; + bool anyNew = false; - cLog(lsINFO) << "Flushing validations"; - boost::mutex::scoped_lock sl(mValidationLock); - BOOST_FOREACH(u160_val_pair& it, mCurrentValidations) - { - if (it.second) - mStaleValidations.push_back(it.second); - anyNew = true; - } - mCurrentValidations.clear(); - if (anyNew) - condWrite(); - while (mWriting) - { - sl.unlock(); - boost::this_thread::sleep(boost::posix_time::milliseconds(100)); - sl.lock(); - } - cLog(lsDEBUG) << "Validations flushed"; + cLog(lsINFO) << "Flushing validations"; + boost::mutex::scoped_lock sl(mValidationLock); + BOOST_FOREACH(u160_val_pair& it, mCurrentValidations) + { + if (it.second) + mStaleValidations.push_back(it.second); + anyNew = true; + } + mCurrentValidations.clear(); + if (anyNew) + condWrite(); + while (mWriting) + { + sl.unlock(); + boost::this_thread::sleep(boost::posix_time::milliseconds(100)); + sl.lock(); + } + cLog(lsDEBUG) << "Validations flushed"; } void ValidationCollection::condWrite() From a543ee9ff5a09f60c29240e39c0119789adea832 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 1 Jan 2013 18:21:08 -0800 Subject: [PATCH 155/525] Cleanup. --- src/cpp/ripple/ValidationCollection.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/ValidationCollection.h b/src/cpp/ripple/ValidationCollection.h index d8ecd791e..b65559f79 100644 --- a/src/cpp/ripple/ValidationCollection.h +++ b/src/cpp/ripple/ValidationCollection.h @@ -20,7 +20,7 @@ class ValidationCollection protected: boost::mutex mValidationLock; - TaggedCache mValidations; + TaggedCache mValidations; boost::unordered_map mCurrentValidations; std::vector mStaleValidations; @@ -33,7 +33,7 @@ protected: boost::shared_ptr findSet(const uint256& ledgerHash); public: - ValidationCollection() : mValidations("Validations", 128, 500), mWriting(false) { ; } + ValidationCollection() : mValidations("Validations", 128, 600), mWriting(false) { ; } bool addValidation(const SerializedValidation::pointer&); ValidationSet getValidations(const uint256& ledger); From c2d654efee5e8c6ff6aa8284316b6721943fb5e1 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 1 Jan 2013 18:21:19 -0800 Subject: [PATCH 156/525] More of the new publication logic. --- src/cpp/ripple/LedgerMaster.cpp | 64 +++++++++++++++++++++++++++++++-- src/cpp/ripple/LedgerMaster.h | 1 + 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 438b63271..eac0fbbb7 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -9,6 +9,9 @@ SETUP_LOG(); +#define MIN_VALIDATION_RATIO 150 // 150/256ths of validations of previous ledger +#define MAX_LEDGER_GAP 100 // Don't catch up more than 100 ledgers + uint32 LedgerMaster::getCurrentLedgerIndex() { return mCurrentLedger->getLedgerSeq(); @@ -319,10 +322,65 @@ void LedgerMaster::checkPublish(const uint256& hash) void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) { // check if we need to publish any held ledgers - boost::recursive_mutex::scoped_lock ml(mLock); + std::list pubLedgers; - if (seq <= mLastValidateSeq) - return; + boost::recursive_mutex::scoped_lock pl(mPubLock); + { + boost::recursive_mutex::scoped_lock ml(mLock); + + if (seq <= mLastValidateSeq) + return; + + int minVal = mMinValidations; + + if (mLastValidateHash.isNonZero()) + { + int val = theApp->getValidations().getTrustedValidationCount(mLastValidateHash); + val *= MIN_VALIDATION_RATIO; + val /= 256; + if (val > minVal) + minVal = val; + } + cLog(lsDEBUG) << "Sweeping for leders to publish: minval=" << minVal; + + // See if any later ledgers have at least the minimum number of validations + cLog(lsDEBUG) << "Last published: " << mLastValidateSeq << " candidate:" << seq; + for (seq = mFinalizedLedger->getLedgerSeq(); seq > mLastValidateSeq; --seq) + { + Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(seq); + if (ledger && (theApp->getValidations().getTrustedValidationCount(ledger->getHash()) >= minVal)) + { // this ledger (and any priors) can be published + if (ledger->getLedgerSeq() > (mLastValidateSeq + MAX_LEDGER_GAP)) + mLastValidateSeq = ledger->getLedgerSeq() - MAX_LEDGER_GAP; + + cLog(lsDEBUG) << "Ledger " << ledger->getLedgerSeq() << " can be published"; + for (uint32 pubSeq = mLastValidateSeq + 1; pubSeq <= seq; ++pubSeq) + { + uint256 pubHash = ledger->getLedgerHash(pubSeq); + if (pubHash.isZero()) // CHECKME: Should we double-check validations in this case? + pubHash = mLedgerHistory.getLedgerHash(pubSeq); + if (pubHash.isNonZero()) + { + Ledger::pointer pubLedger = mLedgerHistory.getLedgerByHash(pubHash); + if (pubLedger) + { + pubLedgers.push_back(pubLedger); + mLastValidateSeq = pubLedger->getLedgerSeq(); + } + } + } + } + } + } + + BOOST_FOREACH(Ledger::ref l, pubLedgers) + { + cLog(lsDEBUG) << "Publishing " << l->getLedgerSeq() << " : " << l->getHash(); + BOOST_FOREACH(callback& c, mOnValidate) + { + c(l); + } + } } // vim:ts=4 diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 770db1bfb..080802ed6 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -37,6 +37,7 @@ protected: uint32 mMissingSeq; bool mTooFast; // We are acquiring faster than we're writing + boost::recursive_mutex mPubLock; int mMinValidations; // The minimum validations to publish a ledger uint256 mLastValidateHash; uint32 mLastValidateSeq; From b71d0a93f90152adbb0de49c0693f0fc11e27561 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 1 Jan 2013 18:26:17 -0800 Subject: [PATCH 157/525] Bugfix. --- src/cpp/ripple/LedgerMaster.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index eac0fbbb7..1d9031828 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -341,10 +341,9 @@ void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) if (val > minVal) minVal = val; } - cLog(lsDEBUG) << "Sweeping for leders to publish: minval=" << minVal; + cLog(lsTRACE) << "Sweeping for leders to publish: minval=" << minVal; // See if any later ledgers have at least the minimum number of validations - cLog(lsDEBUG) << "Last published: " << mLastValidateSeq << " candidate:" << seq; for (seq = mFinalizedLedger->getLedgerSeq(); seq > mLastValidateSeq; --seq) { Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(seq); @@ -353,7 +352,7 @@ void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) if (ledger->getLedgerSeq() > (mLastValidateSeq + MAX_LEDGER_GAP)) mLastValidateSeq = ledger->getLedgerSeq() - MAX_LEDGER_GAP; - cLog(lsDEBUG) << "Ledger " << ledger->getLedgerSeq() << " can be published"; + cLog(lsTRACE) << "Ledger " << ledger->getLedgerSeq() << " can be published"; for (uint32 pubSeq = mLastValidateSeq + 1; pubSeq <= seq; ++pubSeq) { uint256 pubHash = ledger->getLedgerHash(pubSeq); @@ -366,6 +365,7 @@ void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) { pubLedgers.push_back(pubLedger); mLastValidateSeq = pubLedger->getLedgerSeq(); + mLastValidateHash = pubLedger->getHash(); } } } @@ -375,7 +375,6 @@ void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) BOOST_FOREACH(Ledger::ref l, pubLedgers) { - cLog(lsDEBUG) << "Publishing " << l->getLedgerSeq() << " : " << l->getHash(); BOOST_FOREACH(callback& c, mOnValidate) { c(l); From 1127ae560e9016dd5898e492280ed18b2617ee8f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 2 Jan 2013 12:04:16 -0800 Subject: [PATCH 158/525] Defer publishing a ledger to clients until it accumulates sufficient validations. We now have an open ledger, a last closed ledger, and a last validated ledger. Normally, a ledger will be validated right after it closes, but in edge cases, we might see a ledger close that then doesn't get validated. This makes the code do the right thing. --- src/cpp/ripple/JobQueue.cpp | 4 +- src/cpp/ripple/JobQueue.h | 14 ++--- src/cpp/ripple/Ledger.cpp | 3 - src/cpp/ripple/LedgerMaster.cpp | 107 ++++++++++++++++++++------------ src/cpp/ripple/LedgerMaster.h | 8 ++- src/cpp/ripple/NetworkOPs.cpp | 33 ++++------ 6 files changed, 95 insertions(+), 74 deletions(-) diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index 316ae3b6c..47c402c3f 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -15,6 +15,7 @@ JobQueue::JobQueue() : mLastJob(0), mThreadCount(0), mShuttingDown(false) mJobLoads[jtPROOFWORK].setTargetLatency(2000, 5000); mJobLoads[jtTRANSACTION].setTargetLatency(250, 1000); mJobLoads[jtPROPOSAL_ut].setTargetLatency(500, 1250); + mJobLoads[jtPUBLEDGER].setTargetLatency(1000, 2500); mJobLoads[jtVALIDATION_t].setTargetLatency(500, 1500); mJobLoads[jtTRANSACTION_l].setTargetLatency(100, 500); mJobLoads[jtPROPOSAL_t].setTargetLatency(100, 500); @@ -24,7 +25,6 @@ JobQueue::JobQueue() : mLastJob(0), mThreadCount(0), mShuttingDown(false) mJobLoads[jtDISK].setTargetLatency(500, 1000); mJobLoads[jtRPC].setTargetLatency(250, 750); mJobLoads[jtACCEPTLEDGER].setTargetLatency(1000, 2500); - mJobLoads[jtPUBLEDGER].setTargetLatency(1000, 2500); } @@ -38,6 +38,7 @@ const char* Job::toString(JobType t) case jtPROPOSAL_ut: return "untrustedProposal"; case jtCLIENT: return "clientCommand"; case jtTRANSACTION: return "transaction"; + case jtPUBLEDGER: return "publishLedger"; case jtVALIDATION_t: return "trustedValidation"; case jtTRANSACTION_l: return "localTransaction"; case jtPROPOSAL_t: return "trustedProposal"; @@ -48,7 +49,6 @@ const char* Job::toString(JobType t) case jtDISK: return "diskAccess"; case jtRPC: return "rpc"; case jtACCEPTLEDGER: return "acceptLedger"; - case jtPUBLEDGER: return "pubLedger"; case jtTXN_PROC: return "processTransaction"; default: assert(false); return "unknown"; } diff --git a/src/cpp/ripple/JobQueue.h b/src/cpp/ripple/JobQueue.h index 2cd6ee474..f45d2bb33 100644 --- a/src/cpp/ripple/JobQueue.h +++ b/src/cpp/ripple/JobQueue.h @@ -26,19 +26,19 @@ enum JobType jtPROPOSAL_ut = 3, // A proposal from an untrusted source jtCLIENT = 4, // A websocket command from the client jtTRANSACTION = 5, // A transaction received from the network - jtVALIDATION_t = 6, // A validation from a trusted source - jtTRANSACTION_l = 7, // A local transaction - jtPROPOSAL_t = 8, // A proposal from a trusted source - jtADMIN = 9, // An administrative operation - jtDEATH = 10, // job of death, used internally + jtPUBLEDGER = 6, // Publish a fully-accepted ledger + jtVALIDATION_t = 7, // A validation from a trusted source + jtTRANSACTION_l = 8, // A local transaction + jtPROPOSAL_t = 9, // A proposal from a trusted source + jtADMIN = 10, // An administrative operation + jtDEATH = 11, // job of death, used internally // special types not dispatched by the job pool jtPEER = 17, jtDISK = 18, jtRPC = 19, jtACCEPTLEDGER = 20, - jtPUBLEDGER = 21, - jtTXN_PROC = 22, + jtTXN_PROC = 21, }; // CAUTION: If you add new types, add them to JobType.cpp too #define NUM_JOB_TYPES 24 diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index fb9fd3d28..b8ffa1b86 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -467,9 +467,6 @@ void Ledger::saveAcceptedLedger(bool fromConsensus, LoadEvent::pointer event) theApp->getLedgerMaster().setFullLedger(shared_from_this()); event->stop(); - // FIXME: Need to put on hold until the ledger acquires sufficient validations - theApp->getOPs().pubLedger(shared_from_this()); - decPendingSaves(); } diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 1d9031828..f6cf11652 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -322,62 +322,89 @@ void LedgerMaster::checkPublish(const uint256& hash) void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) { // check if we need to publish any held ledgers - std::list pubLedgers; + boost::recursive_mutex::scoped_lock ml(mLock); - boost::recursive_mutex::scoped_lock pl(mPubLock); + if (seq <= mLastValidateSeq) + return; + + int minVal = mMinValidations; + + if (mLastValidateHash.isNonZero()) { - boost::recursive_mutex::scoped_lock ml(mLock); + int val = theApp->getValidations().getTrustedValidationCount(mLastValidateHash); + val *= MIN_VALIDATION_RATIO; + val /= 256; + if (val > minVal) + minVal = val; + } - if (seq <= mLastValidateSeq) - return; + if (theConfig.RUN_STANDALONE) + minVal = 0; - int minVal = mMinValidations; + cLog(lsTRACE) << "Sweeping for ledgers to publish: minval=" << minVal; - if (mLastValidateHash.isNonZero()) - { - int val = theApp->getValidations().getTrustedValidationCount(mLastValidateHash); - val *= MIN_VALIDATION_RATIO; - val /= 256; - if (val > minVal) - minVal = val; - } - cLog(lsTRACE) << "Sweeping for leders to publish: minval=" << minVal; + // See if any later ledgers have at least the minimum number of validations + for (seq = mFinalizedLedger->getLedgerSeq(); seq > mLastValidateSeq; --seq) + { + Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(seq); + if (ledger && (theApp->getValidations().getTrustedValidationCount(ledger->getHash()) >= minVal)) + { // this ledger (and any priors) can be published + if (ledger->getLedgerSeq() > (mLastValidateSeq + MAX_LEDGER_GAP)) + mLastValidateSeq = ledger->getLedgerSeq() - MAX_LEDGER_GAP; - // See if any later ledgers have at least the minimum number of validations - for (seq = mFinalizedLedger->getLedgerSeq(); seq > mLastValidateSeq; --seq) - { - Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(seq); - if (ledger && (theApp->getValidations().getTrustedValidationCount(ledger->getHash()) >= minVal)) - { // this ledger (and any priors) can be published - if (ledger->getLedgerSeq() > (mLastValidateSeq + MAX_LEDGER_GAP)) - mLastValidateSeq = ledger->getLedgerSeq() - MAX_LEDGER_GAP; - - cLog(lsTRACE) << "Ledger " << ledger->getLedgerSeq() << " can be published"; - for (uint32 pubSeq = mLastValidateSeq + 1; pubSeq <= seq; ++pubSeq) + cLog(lsTRACE) << "Ledger " << ledger->getLedgerSeq() << " can be published"; + for (uint32 pubSeq = mLastValidateSeq + 1; pubSeq <= seq; ++pubSeq) + { + uint256 pubHash = ledger->getLedgerHash(pubSeq); + if (pubHash.isZero()) // CHECKME: Should we double-check validations in this case? + pubHash = mLedgerHistory.getLedgerHash(pubSeq); + if (pubHash.isNonZero()) { - uint256 pubHash = ledger->getLedgerHash(pubSeq); - if (pubHash.isZero()) // CHECKME: Should we double-check validations in this case? - pubHash = mLedgerHistory.getLedgerHash(pubSeq); - if (pubHash.isNonZero()) + Ledger::pointer ledger = mLedgerHistory.getLedgerByHash(pubHash); + if (ledger) { - Ledger::pointer pubLedger = mLedgerHistory.getLedgerByHash(pubHash); - if (pubLedger) - { - pubLedgers.push_back(pubLedger); - mLastValidateSeq = pubLedger->getLedgerSeq(); - mLastValidateHash = pubLedger->getHash(); - } + mPubLedgers.push_back(ledger); + mValidLedger = ledger; + mLastValidateSeq = ledger->getLedgerSeq(); + mLastValidateHash = ledger->getHash(); } } } } } - BOOST_FOREACH(Ledger::ref l, pubLedgers) + if (!mPubThread) { - BOOST_FOREACH(callback& c, mOnValidate) + mPubThread = true; + theApp->getJobQueue().addJob(jtPUBLEDGER, boost::bind(&LedgerMaster::pubThread, this)); + } +} + +void LedgerMaster::pubThread() +{ + std::list ledgers; + + while (1) + { + ledgers.clear(); + { - c(l); + boost::recursive_mutex::scoped_lock ml(mLock); + mPubLedgers.swap(ledgers); + if (ledgers.empty()) + { + mPubThread = false; + return; + } + } + + BOOST_FOREACH(Ledger::ref l, ledgers) + { + theApp->getOPs().pubLedger(l); + BOOST_FOREACH(callback& c, mOnValidate) + { + c(l); + } } } } diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 080802ed6..2ec4f0748 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -27,6 +27,7 @@ protected: Ledger::pointer mCurrentLedger; // The ledger we are currently processiong Ledger::pointer mFinalizedLedger; // The ledger that most recently closed + Ledger::pointer mValidLedger; // The ledger we most recently fully accepted LedgerHistory mLedgerHistory; @@ -37,23 +38,26 @@ protected: uint32 mMissingSeq; bool mTooFast; // We are acquiring faster than we're writing - boost::recursive_mutex mPubLock; int mMinValidations; // The minimum validations to publish a ledger uint256 mLastValidateHash; uint32 mLastValidateSeq; std::list mOnValidate; // Called when a ledger has enough validations + std::list mPubLedgers; // List of ledgers to publish + bool mPubThread; // Publish thread is running + void applyFutureTransactions(uint32 ledgerIndex); bool isValidTransaction(const Transaction::pointer& trans); bool isTransactionOnFutureList(const Transaction::pointer& trans); void acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq); void missingAcquireComplete(LedgerAcquire::pointer); + void pubThread(); public: LedgerMaster() : mHeldTransactions(uint256()), mMissingSeq(0), mTooFast(false), - mMinValidations(0), mLastValidateSeq(0) + mMinValidations(0), mLastValidateSeq(0), mPubThread(false) { ; } uint32 getCurrentLedgerIndex(); diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index fa775e678..f86061ed9 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1149,11 +1149,6 @@ void NetworkOPs::pubLedger(Ledger::ref lpAccepted) { // Don't publish to clients ledgers we don't trust. // TODO: we need to publish old transactions when we get reconnected to the network otherwise clients can miss transactions - if (NetworkOPs::omDISCONNECTED == getOperatingMode()) - return; - - LoadEvent::autoptr event(theApp->getJobQueue().getLoadEventAP(jtPUBLEDGER)); - { boost::recursive_mutex::scoped_lock sl(mMonitorLock); @@ -1178,26 +1173,24 @@ void NetworkOPs::pubLedger(Ledger::ref lpAccepted) } } + // we don't lock since pubAcceptedTransaction is locking + if (!mSubTransactions.empty() || !mSubRTTransactions.empty() || !mSubAccount.empty() || !mSubRTAccount.empty() || !mSubmitMap.empty() ) { - // we don't lock since pubAcceptedTransaction is locking - if (!mSubTransactions.empty() || !mSubRTTransactions.empty() || !mSubAccount.empty() || !mSubRTAccount.empty() || !mSubmitMap.empty() ) + SHAMap& txSet = *lpAccepted->peekTransactionMap(); + + for (SHAMapItem::pointer item = txSet.peekFirstItem(); !!item; item = txSet.peekNextItem(item->getTag())) { - SHAMap& txSet = *lpAccepted->peekTransactionMap(); + SerializerIterator it(item->peekSerializer()); - for (SHAMapItem::pointer item = txSet.peekFirstItem(); !!item; item = txSet.peekNextItem(item->getTag())) - { - SerializerIterator it(item->peekSerializer()); + // OPTIMIZEME: Could get transaction from txn master, but still must call getVL + Serializer txnSer(it.getVL()); + SerializerIterator txnIt(txnSer); + SerializedTransaction stTxn(txnIt); - // OPTIMIZEME: Could get transaction from txn master, but still must call getVL - Serializer txnSer(it.getVL()); - SerializerIterator txnIt(txnSer); - SerializedTransaction stTxn(txnIt); + TransactionMetaSet::pointer meta = boost::make_shared( + stTxn.getTransactionID(), lpAccepted->getLedgerSeq(), it.getVL()); - TransactionMetaSet::pointer meta = boost::make_shared( - stTxn.getTransactionID(), lpAccepted->getLedgerSeq(), it.getVL()); - - pubAcceptedTransaction(lpAccepted, stTxn, meta->getResultTER(), meta); - } + pubAcceptedTransaction(lpAccepted, stTxn, meta->getResultTER(), meta); } } } From 5d03351dd7a3be8f7877b11b11553a87347bd96d Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 14:18:44 -0800 Subject: [PATCH 159/525] UT: Fix example http server. --- test/config-example.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/config-example.js b/test/config-example.js index 0e6a64f93..1df83b72f 100644 --- a/test/config-example.js +++ b/test/config-example.js @@ -37,7 +37,7 @@ exports.servers = { exports.http_servers = { // A local test server - "alpha-http" : { + "zed" : { "ip" : "127.0.0.1", "port" : 8088, } From f75e175fc2cbc6638b2c6f3f2aee4604b54f9cb0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 2 Jan 2013 14:25:06 -0800 Subject: [PATCH 160/525] Make TaggedCache::del more flexible. --- src/cpp/ripple/TaggedCache.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 681457ac5..9b75ee838 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -61,7 +61,7 @@ public: void sweep(); bool touch(const key_type& key); - bool del(const key_type& key); + bool del(const key_type& key, bool valid); bool canonicalize(const key_type& key, boost::shared_ptr& data, bool replace = false); bool store(const key_type& key, const c_Data& data); boost::shared_ptr fetch(const key_type& key); @@ -161,10 +161,18 @@ template bool TaggedCache::touch return true; } -template bool TaggedCache::del(const key_type& key) -{ // Remove from cache, map unaffected +template bool TaggedCache::del(const key_type& key, bool valid) +{ // Remove from cache, if !valid, remove from map too. Returns true if removed from cache boost::recursive_mutex::scoped_lock sl(mLock); + if (!valid) + { // remove from map too + typename boost::unordered_map::iterator mit = mMap.find(key); + if (mit == mMap.end()) // not in map, cannot be in cache + return false; + mMap.erase(mit); + } + typename boost::unordered_map::iterator cit = mCache.find(key); if (cit == mCache.end()) return false; From ee3b17e49fe394feb62c2f01b43e7208a233bb68 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 2 Jan 2013 19:12:21 -0800 Subject: [PATCH 161/525] Cleanups. --- src/cpp/ripple/TaggedCache.h | 63 +++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 9b75ee838..1d1607052 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -26,24 +26,29 @@ extern LogPartition TaggedCachePartition; template class TaggedCache { public: - typedef c_Key key_type; - typedef c_Data data_type; - - typedef boost::weak_ptr weak_data_ptr; - typedef boost::shared_ptr data_ptr; - typedef std::pair cache_entry; - typedef std::pair cache_pair; + typedef c_Key key_type; + typedef c_Data data_type; + typedef boost::weak_ptr weak_data_ptr; + typedef boost::shared_ptr data_ptr; protected: + + typedef std::pair cache_entry; + typedef std::pair cache_pair; + typedef boost::unordered_map cache_type; + typedef typename cache_type::iterator cache_iterator; + typedef boost::unordered_map map_type; + typedef typename map_type::iterator map_iterator; + mutable boost::recursive_mutex mLock; - std::string mName; - int mTargetSize, mTargetAge; + std::string mName; // Used for logging + int mTargetSize; // Desired number of cache entries + int mTargetAge; // Desired maximum cache age - boost::unordered_map mCache; // Hold strong reference to recent objects - time_t mLastSweep; - - boost::unordered_map mMap; // Track stored objects + cache_type mCache; // Hold strong reference to recent objects + map_type mMap; // Track stored objects + time_t mLastSweep; public: TaggedCache(const char *name, int size, int age) @@ -103,7 +108,7 @@ template void TaggedCache::sweep // Pass 1, remove old objects from cache int cacheRemovals = 0; - typename boost::unordered_map::iterator cit = mCache.begin(); + cache_iterator cit = mCache.begin(); while (cit != mCache.end()) { if (cit->second.first < target) @@ -117,7 +122,7 @@ template void TaggedCache::sweep // Pass 2, remove dead objects from map int mapRemovals = 0; - typename boost::unordered_map::iterator mit = mMap.begin(); + map_iterator mit = mMap.begin(); while (mit != mMap.end()) { if (mit->second.expired()) @@ -139,7 +144,7 @@ template bool TaggedCache::touch boost::recursive_mutex::scoped_lock sl(mLock); // Is the object in the map? - typename boost::unordered_map::iterator mit = mMap.find(key); + map_iterator mit = mMap.find(key); if (mit == mMap.end()) return false; if (mit->second.expired()) @@ -149,7 +154,7 @@ template bool TaggedCache::touch } // Is the object in the cache? - typename boost::unordered_map::iterator cit = mCache.find(key); + map_iterator cit = mCache.find(key); if (cit != mCache.end()) { // in both map and cache cit->second.first = time(NULL); @@ -167,13 +172,13 @@ template bool TaggedCache::del(c if (!valid) { // remove from map too - typename boost::unordered_map::iterator mit = mMap.find(key); + map_iterator mit = mMap.find(key); if (mit == mMap.end()) // not in map, cannot be in cache return false; mMap.erase(mit); } - typename boost::unordered_map::iterator cit = mCache.find(key); + cache_iterator cit = mCache.find(key); if (cit == mCache.end()) return false; mCache.erase(cit); @@ -186,7 +191,7 @@ bool TaggedCache::canonicalize(const key_type& key, boost::shared // Return values: true=we had the data already boost::recursive_mutex::scoped_lock sl(mLock); - typename boost::unordered_map::iterator mit = mMap.find(key); + map_iterator mit = mMap.find(key); if (mit == mMap.end()) { // not in map mCache.insert(cache_pair(key, cache_entry(time(NULL), data))); @@ -194,7 +199,7 @@ bool TaggedCache::canonicalize(const key_type& key, boost::shared return false; } - boost::shared_ptr cachedData = mit->second.lock(); + data_ptr cachedData = mit->second.lock(); if (!cachedData) { // in map, but expired. Update in map, insert in cache mit->second = data; @@ -209,7 +214,7 @@ bool TaggedCache::canonicalize(const key_type& key, boost::shared data = cachedData; // Valid in map, is it in cache? - typename boost::unordered_map::iterator cit = mCache.find(key); + cache_iterator cit = mCache.find(key); if (cit != mCache.end()) { cit->second.first = time(NULL); // Yes, refesh @@ -228,11 +233,11 @@ boost::shared_ptr TaggedCache::fetch(const key_type& key) boost::recursive_mutex::scoped_lock sl(mLock); // Is it in the map? - typename boost::unordered_map::iterator mit = mMap.find(key); + map_iterator mit = mMap.find(key); if (mit == mMap.end()) return data_ptr(); // No, we're done - boost::shared_ptr cachedData = mit->second.lock(); + data_ptr cachedData = mit->second.lock(); if (!cachedData) { // in map, but expired. Sorry, we don't have it mMap.erase(mit); @@ -240,7 +245,7 @@ boost::shared_ptr TaggedCache::fetch(const key_type& key) } // Valid in map, is it in the cache? - typename boost::unordered_map::iterator cit = mCache.find(key); + cache_iterator cit = mCache.find(key); if (cit != mCache.end()) cit->second.first = time(NULL); // Yes, refresh else // No, add to cache @@ -252,17 +257,17 @@ boost::shared_ptr TaggedCache::fetch(const key_type& key) template bool TaggedCache::store(const key_type& key, const c_Data& data) { - boost::shared_ptr d = boost::make_shared(boost::cref(data)); + data_ptr d = boost::make_shared(boost::cref(data)); return canonicalize(key, d); } template bool TaggedCache::retrieve(const key_type& key, c_Data& data) { // retrieve the value of the stored data - boost::shared_ptr dataPtr = fetch(key); - if (!dataPtr) + data_ptr entry = fetch(key); + if (!entry) return false; - data = *dataPtr; + data = *entry; return true; } From 8f5aa1a8103577c6f737e5445e26b778fb676576 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 2 Jan 2013 19:22:34 -0800 Subject: [PATCH 162/525] Wrong type. --- src/cpp/ripple/TaggedCache.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 1d1607052..5d24ce68e 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -154,7 +154,7 @@ template bool TaggedCache::touch } // Is the object in the cache? - map_iterator cit = mCache.find(key); + cache_iterator cit = mCache.find(key); if (cit != mCache.end()) { // in both map and cache cit->second.first = time(NULL); From 98fec1fd2f57b4835d46502449431db067ad2fb0 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 21:40:28 -0800 Subject: [PATCH 163/525] Update README. --- README | 10 ---------- README.md | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 10 deletions(-) delete mode 100644 README create mode 100644 README.md diff --git a/README b/README deleted file mode 100644 index 491939d73..000000000 --- a/README +++ /dev/null @@ -1,10 +0,0 @@ -Dependancies: -- boost 1.47 -- Google protocol buffers 2.4.1 -- openssl - -Sub modules: -- websocketpp: https://github.com/zaphoyd/websocketpp -- sjcl: https://github.com/bitwiseshiftleft/sjcl -- cryptojs: https://github.com/gwjjeff/cryptojs - aka http://code.google.com/p/crypto-js/ diff --git a/README.md b/README.md new file mode 100644 index 000000000..606259378 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +Ripple - P2P Payment Network +============================ + +Some portions of this source code are currently closed source. + +This the repository for Ripple's: +* rippled - P2P network server +* ripple.js - JavaScript client libraries. + +Build instructions: +* See: https://ripple.com/wiki/Rippled_build_instructions + +Setup instructions: +* See: https://ripple.com/wiki/Rippled_setup_instructions + +For more information: +* See: https://ripple.com +* See: https://ripple.com/wiki From 12b4273a74c517bd4b3d8bbe888af6add09c746a Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 21:42:27 -0800 Subject: [PATCH 164/525] JS: Add support for client knowing about connecting to testnet server. --- src/js/remote.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/js/remote.js b/src/js/remote.js index e87feead6..9e46470b4 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -199,7 +199,8 @@ var Remote = function (opts, trace) { this._ledger_current_index = undefined; this._ledger_hash = undefined; this._ledger_time = undefined; - this.stand_alone = undefined; + this._stand_alone = undefined; + this._testnet = undefined; this.online_target = false; this.online_state = 'closed'; // 'open', 'closed', 'connecting', 'closing' this.state = 'offline'; // 'online', 'offline' @@ -859,7 +860,8 @@ Remote.prototype._server_subscribe = function () { this.request_subscribe([ 'ledger', 'server' ]) .on('success', function (message) { - self.stand_alone = !!message.stand_alone; + self._stand_alone = !!message.stand_alone; + self._testnet = !!message.testnet; if (message.random) self.emit('random', utils.hexToArray(message.random)); @@ -899,7 +901,7 @@ Remote.prototype._server_subscribe = function () { // A good way to be notified of the result of this is: // remote.once('ledger_closed', function (ledger_closed, ledger_index) { ... } ); Remote.prototype.ledger_accept = function () { - if (this.stand_alone || undefined === this.stand_alone) + if (this._stand_alone || undefined === this._stand_alone) { var request = new Request(this, 'ledger_accept'); From 3781555bda9d686f2dc5200f62b9537cc6009260 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 22:51:21 -0800 Subject: [PATCH 165/525] Add --testnet flag. --- src/cpp/ripple/Config.cpp | 34 ++++++++++++++++++++++++++++------ src/cpp/ripple/Config.h | 16 +++++++++++++--- src/cpp/ripple/HashPrefixes.h | 15 ++++++++++++--- src/cpp/ripple/main.cpp | 3 ++- 4 files changed, 55 insertions(+), 13 deletions(-) diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index 943b5b727..b2700dbea 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -4,6 +4,7 @@ #include "Config.h" #include "utils.h" +#include "HashPrefixes.h" #include #include @@ -56,10 +57,12 @@ #define DEFAULT_FEE_OPERATION 1 Config theConfig; +const char* ALPHABET; -void Config::setup(const std::string& strConf, bool bQuiet) +void Config::setup(const std::string& strConf, bool bTestNet, bool bQuiet) { boost::system::error_code ec; + std::string strDbPath, strConfFile; // // Determine the config and data directories. @@ -67,21 +70,39 @@ void Config::setup(const std::string& strConf, bool bQuiet) // that with "db" as the data directory. // + TESTNET = bTestNet; QUIET = bQuiet; + // TESTNET forces a "test-" prefix on the conf file and db directory. + strDbPath = TESTNET ? "test-db" : "db"; + strConfFile = boost::str(boost::format(TESTNET ? "test-%s" : "%s") + % (strConf.empty() ? CONFIG_FILE_NAME : strConf)); + + VALIDATORS_BASE = boost::str(boost::format(TESTNET ? "test-%s" : "%s") + % VALIDATORS_FILE_NAME); + VALIDATORS_URI = boost::str(boost::format("/%s") % VALIDATORS_BASE); + + SIGN_TRANSACTION = TESTNET ? sHP_TestNetTransactionSign : sHP_TransactionSign; + SIGN_VALIDATION = TESTNET ? sHP_TestNetValidation : sHP_Validation; + SIGN_PROPOSAL = TESTNET ? sHP_TestNetProposal : sHP_Proposal; + + ALPHABET = TESTNET + ? "RPShNAF39wBUDnEGHJKLM4pQrsT7VWXYZ2bcdeCg65jkm8ofqi1tuvaxyz" + : "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz"; + if (!strConf.empty()) { // --conf= : everything is relative that file. - CONFIG_FILE = strConf; + CONFIG_FILE = strConfFile; CONFIG_DIR = CONFIG_FILE; CONFIG_DIR.remove_filename(); - DATA_DIR = CONFIG_DIR / "db"; + DATA_DIR = CONFIG_DIR / strDbPath; } else { CONFIG_DIR = boost::filesystem::current_path(); - CONFIG_FILE = CONFIG_DIR / CONFIG_FILE_NAME; - DATA_DIR = CONFIG_DIR / "db"; + CONFIG_FILE = CONFIG_DIR / strConfFile; + DATA_DIR = CONFIG_DIR / strDbPath; if (exists(CONFIG_FILE) // Can we figure out XDG dirs? @@ -111,7 +132,7 @@ void Config::setup(const std::string& strConf, bool bQuiet) } CONFIG_DIR = str(boost::format("%s/" SYSTEM_NAME) % strXdgConfigHome); - CONFIG_FILE = CONFIG_DIR / CONFIG_FILE_NAME; + CONFIG_FILE = CONFIG_DIR / strConfFile; DATA_DIR = str(boost::format("%s/" SYSTEM_NAME) % strXdgDataHome); boost::filesystem::create_directories(CONFIG_DIR, ec); @@ -140,6 +161,7 @@ Config::Config() // Defaults // + TESTNET = false; NETWORK_START_TIME = 1319844908; PEER_PORT = SYSTEM_PEER_PORT; diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index ca575ddf1..d43de2a6c 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -19,7 +19,7 @@ #define SYSTEM_CURRENCY_PARTS 1000000ull // 10^SYSTEM_CURRENCY_PRECISION #define SYSTEM_CURRENCY_START (SYSTEM_CURRENCY_GIFT*SYSTEM_CURRENCY_USERS*SYSTEM_CURRENCY_PARTS) -#define CONFIG_FILE_NAME SYSTEM_NAME "d.cfg" // rippled.cfg +#define CONFIG_FILE_NAME SYSTEM_NAME "d.cfg" // rippled.cfg #define DEFAULT_VALIDATORS_SITE "" #define VALIDATORS_FILE_NAME "validators.txt" @@ -47,14 +47,17 @@ class Config public: // Configuration parameters bool QUIET; + bool TESTNET; boost::filesystem::path CONFIG_FILE; boost::filesystem::path CONFIG_DIR; boost::filesystem::path DATA_DIR; boost::filesystem::path DEBUG_LOGFILE; - boost::filesystem::path VALIDATORS_FILE; + boost::filesystem::path VALIDATORS_FILE; // As specifed in rippled.cfg. std::string VALIDATORS_SITE; // Where to find validators.txt on the Internet. + std::string VALIDATORS_URI; // URI of validators.txt. + std::string VALIDATORS_BASE; // Name with testnet-, if needed. std::vector VALIDATORS; // Validators from rippled.cfg. std::vector IPS; // Peer IPs from rippled.cfg. std::vector SNTP_SERVERS; // SNTP servers from rippled.cfg. @@ -120,12 +123,19 @@ public: // Client behavior int ACCOUNT_PROBE_MAX; // How far to scan for accounts. + // Signing signatures. + uint32 SIGN_TRANSACTION; + uint32 SIGN_VALIDATION; + uint32 SIGN_PROPOSAL; + Config(); - void setup(const std::string& strConf, bool bQuiet); + + void setup(const std::string& strConf, bool bTestNet, bool bQuiet); void load(); }; extern Config theConfig; + #endif // vim:ts=4 diff --git a/src/cpp/ripple/HashPrefixes.h b/src/cpp/ripple/HashPrefixes.h index 832349ec6..799b66e62 100644 --- a/src/cpp/ripple/HashPrefixes.h +++ b/src/cpp/ripple/HashPrefixes.h @@ -6,9 +6,6 @@ // TXN - Hash of transaction plus signature to give transaction ID const uint32 sHP_TransactionID = 0x54584E00; -// STX - Hash of inner transaction to sign -const uint32 sHP_TransactionSign = 0x53545800; - // TND - Hash of transaction plus metadata const uint32 sHP_TransactionNode = 0x534E4400; @@ -21,12 +18,24 @@ const uint32 sHP_InnerNode = 0x4D494E00; // LGR - Hash of ledger master data for signing const uint32 sHP_Ledger = 0x4C575200; +// STX - Hash of inner transaction to sign +const uint32 sHP_TransactionSign = 0x53545800; + // VAL - Hash of validation for signing const uint32 sHP_Validation = 0x56414C00; // PRP - Hash of proposal for signing const uint32 sHP_Proposal = 0x50525000; +// stx - TESTNET Hash of inner transaction to sign +const uint32 sHP_TestNetTransactionSign = 0x73747800; + +// val - TESTNET Hash of validation for signing +const uint32 sHP_TestNetValidation = 0x76616C00; + +// prp - TESTNET Hash of proposal for signing +const uint32 sHP_TestNetProposal = 0x70727000; + #endif // vim:ts=4 diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index 3636b0fd9..6f11ae808 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -120,7 +120,6 @@ int main(int argc, char* argv[]) iResult = 2; } - if (iResult) { nothing(); @@ -154,6 +153,7 @@ int main(int argc, char* argv[]) if (vm.count("unittest")) { unit_test_main(init_unit_test, argc, argv); + return 0; } @@ -161,6 +161,7 @@ int main(int argc, char* argv[]) { theConfig.setup( vm.count("conf") ? vm["conf"].as() : "", // Config file. + !!vm.count("testnet"), // Testnet flag. !!vm.count("quiet")); // Quiet flag. if (vm.count("standalone")) From dfccda5ba8a1b592203b6772ee2bf4f7131b2a9f Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 22:54:29 -0800 Subject: [PATCH 166/525] Announce --testnet in Hello. --- src/cpp/ripple/Peer.cpp | 10 +++++++++- src/cpp/ripple/ripple.proto | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 534007543..c1b3676ab 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -627,7 +627,14 @@ void Peer::recvHello(ripple::TMHello& packet) } #endif - if (packet.has_nettime() && ((packet.nettime() < minTime) || (packet.nettime() > maxTime))) + if ((packet.has_testnet() && packet.testnet()) != theConfig.TESTNET) + { + // Format: actual/requested. + cLog(lsINFO) << boost::str(boost::format("Recv(Hello): Network mismatch: %d/%d") + % packet.testnet() + % theConfig.TESTNET); + } + else if (packet.has_nettime() && ((packet.nettime() < minTime) || (packet.nettime() > maxTime))) { if (packet.nettime() > maxTime) { @@ -1619,6 +1626,7 @@ void Peer::sendHello() h.set_nodeproof(&vchSig[0], vchSig.size()); h.set_ipv4port(theConfig.PEER_PORT); h.set_nodeprivate(theConfig.PEER_PRIVATE); + h.set_testnet(theConfig.TESTNET); Ledger::pointer closedLedger = theApp->getLedgerMaster().getClosedLedger(); if (closedLedger && closedLedger->isClosed()) diff --git a/src/cpp/ripple/ripple.proto b/src/cpp/ripple/ripple.proto index 3e238ddeb..e0d6c3257 100644 --- a/src/cpp/ripple/ripple.proto +++ b/src/cpp/ripple/ripple.proto @@ -71,6 +71,7 @@ message TMHello { optional bytes ledgerPrevious = 10; // the ledger before the last closed ledger optional bool nodePrivate = 11; // Request to not forward IP. optional TMProofWork proofOfWork = 12; // request/provide proof of work + optional bool testNet = 13; // Running as testnet. } From 511587da5d75c3dba454f7f97d250a57b2d13986 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 22:55:47 -0800 Subject: [PATCH 167/525] Sign based on --testnet. --- src/cpp/ripple/LedgerProposal.cpp | 2 +- src/cpp/ripple/SerializedTransaction.cpp | 2 +- src/cpp/ripple/SerializedValidation.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/LedgerProposal.cpp b/src/cpp/ripple/LedgerProposal.cpp index 5f5f05873..7d4d193ca 100644 --- a/src/cpp/ripple/LedgerProposal.cpp +++ b/src/cpp/ripple/LedgerProposal.cpp @@ -42,7 +42,7 @@ uint256 LedgerProposal::getSigningHash() const { Serializer s((32 + 32 + 32 + 256 + 256) / 8); - s.add32(sHP_Proposal); + s.add32(theConfig.SIGN_PROPOSAL); s.add32(mProposeSeq); s.add32(mCloseTime); s.add256(mPreviousLedger); diff --git a/src/cpp/ripple/SerializedTransaction.cpp b/src/cpp/ripple/SerializedTransaction.cpp index 7b5a58afc..115f8343e 100644 --- a/src/cpp/ripple/SerializedTransaction.cpp +++ b/src/cpp/ripple/SerializedTransaction.cpp @@ -126,7 +126,7 @@ std::vector SerializedTransaction::getAffectedAccounts() const uint256 SerializedTransaction::getSigningHash() const { - return STObject::getSigningHash(sHP_TransactionSign); + return STObject::getSigningHash(theConfig.SIGN_TRANSACTION); } uint256 SerializedTransaction::getTransactionID() const diff --git a/src/cpp/ripple/SerializedValidation.cpp b/src/cpp/ripple/SerializedValidation.cpp index 3f502d447..f50ed0894 100644 --- a/src/cpp/ripple/SerializedValidation.cpp +++ b/src/cpp/ripple/SerializedValidation.cpp @@ -1,7 +1,7 @@ #include "SerializedValidation.h" -#include "HashPrefixes.h" +#include "Config.h" #include "Log.h" DECLARE_INSTANCE(SerializedValidation); @@ -70,7 +70,7 @@ void SerializedValidation::sign(uint256& signingHash, const RippleAddress& raPri uint256 SerializedValidation::getSigningHash() const { - return STObject::getSigningHash(sHP_Validation); + return STObject::getSigningHash(theConfig.SIGN_VALIDATION); } uint256 SerializedValidation::getLedgerHash() const From e7e16e5c75b97d0e609e2ffad911d9aab338c1e4 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 22:57:11 -0800 Subject: [PATCH 168/525] Provide --testnet status to API. --- src/cpp/ripple/NetworkOPs.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index fa775e678..4b9520491 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1079,6 +1079,9 @@ Json::Value NetworkOPs::getServerInfo() { Json::Value info = Json::objectValue; + if (theConfig.TESTNET) + info["testnet"] = theConfig.TESTNET; + switch (mMode) { case omDISCONNECTED: info["serverState"] = "disconnected"; break; @@ -1462,7 +1465,11 @@ bool NetworkOPs::subServer(InfoSub* ispListener, Json::Value& jvResult) { uint256 uRandom; - jvResult["stand_alone"] = theConfig.RUN_STANDALONE; + if (theConfig.RUN_STANDALONE) + jvResult["stand_alone"] = theConfig.RUN_STANDALONE; + + if (theConfig.TESTNET) + jvResult["testnet"] = theConfig.TESTNET; getRand(uRandom.begin(), uRandom.size()); jvResult["random"] = uRandom.ToString(); From 94444a89b4ad4aec2f94c72dc086f64a4570f959 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 22:58:44 -0800 Subject: [PATCH 169/525] Vary alphabet by --testnet. --- src/cpp/ripple/base58.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/base58.h b/src/cpp/ripple/base58.h index 3a623c24f..733216faa 100644 --- a/src/cpp/ripple/base58.h +++ b/src/cpp/ripple/base58.h @@ -23,7 +23,7 @@ #include "bignum.h" #include "BitcoinUtil.h" -static const char* pszBase58 = "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz"; +extern const char* ALPHABET; inline std::string EncodeBase58(const unsigned char* pbegin, const unsigned char* pend) { @@ -52,12 +52,12 @@ inline std::string EncodeBase58(const unsigned char* pbegin, const unsigned char throw bignum_error("EncodeBase58 : BN_div failed"); bn = dv; unsigned int c = rem.getulong(); - str += pszBase58[c]; + str += ALPHABET[c]; } // Leading zeroes encoded as base58 zeros for (const unsigned char* p = pbegin; p < pend && *p == 0; p++) - str += pszBase58[0]; + str += ALPHABET[0]; // Convert little endian std::string to big endian reverse(str.begin(), str.end()); @@ -82,7 +82,7 @@ inline bool DecodeBase58(const char* psz, std::vector& vchRet) // Convert big endian string to bignum for (const char* p = psz; *p; p++) { - const char* p1 = strchr(pszBase58, *p); + const char* p1 = strchr(ALPHABET, *p); if (p1 == NULL) { while (isspace(*p)) @@ -91,7 +91,7 @@ inline bool DecodeBase58(const char* psz, std::vector& vchRet) return false; break; } - bnChar.setulong(p1 - pszBase58); + bnChar.setulong(p1 - ALPHABET); if (!BN_mul(&bn, &bn, &bn58, pctx)) throw bignum_error("DecodeBase58 : BN_mul failed"); bn += bnChar; @@ -106,7 +106,7 @@ inline bool DecodeBase58(const char* psz, std::vector& vchRet) // Restore leading zeros int nLeadingZeros = 0; - for (const char* p = psz; *p == pszBase58[0]; p++) + for (const char* p = psz; *p == ALPHABET[0]; p++) nLeadingZeros++; vchRet.assign(nLeadingZeros + vchTmp.size(), 0); From f873c1fc27f636eb6d4ba73536285de3d1fb7bb8 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 23:02:29 -0800 Subject: [PATCH 170/525] Load UNL by --testnet. --- src/cpp/ripple/UniqueNodeList.cpp | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/cpp/ripple/UniqueNodeList.cpp b/src/cpp/ripple/UniqueNodeList.cpp index ad7e56348..83bdd4692 100644 --- a/src/cpp/ripple/UniqueNodeList.cpp +++ b/src/cpp/ripple/UniqueNodeList.cpp @@ -3,6 +3,7 @@ #include "UniqueNodeList.h" +#include #include #include @@ -24,7 +25,6 @@ SETUP_LOG(); #define VALIDATORS_FETCH_SECONDS 30 -#define VALIDATORS_FILE_PATH "/" VALIDATORS_FILE_NAME #define VALIDATORS_FILE_BYTES_MAX (50 << 10) // Gather string constants. @@ -41,10 +41,6 @@ SETUP_LOG(); #define REFERRAL_VALIDATORS_MAX 50 #define REFERRAL_IPS_MAX 50 -#ifndef MIN -#define MIN(x,y) ((x)<(y)?(x):(y)) -#endif - UniqueNodeList::UniqueNodeList(boost::asio::io_service& io_service) : mdtScoreTimer(io_service), mFetchActive(0), @@ -633,9 +629,9 @@ void UniqueNodeList::processIps(const std::string& strSite, const RippleAddress& // Add new referral entries. if (pmtVecStrIps && !pmtVecStrIps->empty()) { - std::vector vstrValues; + std::vector vstrValues; - vstrValues.resize(MIN(pmtVecStrIps->size(), REFERRAL_IPS_MAX)); + vstrValues.resize(std::min((int) pmtVecStrIps->size(), REFERRAL_IPS_MAX)); int iValues = 0; BOOST_FOREACH(const std::string& strReferral, *pmtVecStrIps) @@ -707,7 +703,7 @@ int UniqueNodeList::processValidators(const std::string& strSite, const std::str if (pmtVecStrValidators && pmtVecStrValidators->size()) { std::vector vstrValues; - vstrValues.reserve(MIN(pmtVecStrValidators->size(), REFERRAL_VALIDATORS_MAX)); + vstrValues.reserve(std::min((int) pmtVecStrValidators->size(), REFERRAL_VALIDATORS_MAX)); BOOST_FOREACH(const std::string& strReferral, *pmtVecStrValidators) { @@ -1555,13 +1551,13 @@ void UniqueNodeList::validatorsResponse(const boost::system::error_code& err, st void UniqueNodeList::nodeNetwork() { - if(!theConfig.VALIDATORS_SITE.empty()) + if (!theConfig.VALIDATORS_SITE.empty()) { HttpsClient::httpsGet( theApp->getIOService(), theConfig.VALIDATORS_SITE, 443, - VALIDATORS_FILE_PATH, + theConfig.VALIDATORS_URI, VALIDATORS_FILE_BYTES_MAX, boost::posix_time::seconds(VALIDATORS_FETCH_SECONDS), boost::bind(&UniqueNodeList::validatorsResponse, this, _1, _2)); @@ -1597,9 +1593,10 @@ void UniqueNodeList::nodeBootstrap() // If never loaded anything try the current directory. if (!bLoaded && theConfig.VALIDATORS_FILE.empty()) { - cLog(lsINFO) << "Bootstrapping UNL: loading from '" VALIDATORS_FILE_NAME "'."; + cLog(lsINFO) << boost::str(boost::format("Bootstrapping UNL: loading from '%s'.") + % theConfig.VALIDATORS_BASE); - bLoaded = nodeLoad(VALIDATORS_FILE_NAME); + bLoaded = nodeLoad(theConfig.VALIDATORS_BASE); } // Always load from rippled.cfg @@ -1607,15 +1604,17 @@ void UniqueNodeList::nodeBootstrap() { RippleAddress naInvalid; // Don't want a referrer on added entries. - cLog(lsINFO) << "Bootstrapping UNL: loading from " CONFIG_FILE_NAME "."; + cLog(lsINFO) << boost::str(boost::format("Bootstrapping UNL: loading from '%s'.") + % theConfig.CONFIG_FILE); - if (processValidators("local", CONFIG_FILE_NAME, naInvalid, vsConfig, &theConfig.VALIDATORS)) + if (processValidators("local", theConfig.CONFIG_FILE.native(), naInvalid, vsConfig, &theConfig.VALIDATORS)) bLoaded = true; } if (!bLoaded) { - cLog(lsINFO) << "Bootstrapping UNL: loading from " << theConfig.VALIDATORS_SITE << "."; + cLog(lsINFO) << boost::str(boost::format("Bootstrapping UNL: loading from '%s'.") + % theConfig.VALIDATORS_SITE); nodeNetwork(); } @@ -1667,7 +1666,8 @@ void UniqueNodeList::nodeProcess(const std::string& strSite, const std::string& } else { - cLog(lsWARNING) << "'" VALIDATORS_FILE_NAME "' missing [" SECTION_VALIDATORS "]."; + cLog(lsWARNING) << boost::str(boost::format("'%s' missing [" SECTION_VALIDATORS "].") + % theConfig.VALIDATORS_BASE); } } From 6bbf86a2090db0c6d0bdadaeb931479d9f4ae096 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 23:13:41 -0800 Subject: [PATCH 171/525] Cosmetic. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 606259378..8ac219f98 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Ripple - P2P Payment Network Some portions of this source code are currently closed source. -This the repository for Ripple's: +This is the repository for Ripple's: * rippled - P2P network server * ripple.js - JavaScript client libraries. From 4201cd13c094866e3b0c1ba7d1c56dc61cb32827 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 23:56:41 -0800 Subject: [PATCH 172/525] Make prefix for testnet "testnet-". --- src/cpp/ripple/Config.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index b2700dbea..ff9c161a2 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -73,12 +73,12 @@ void Config::setup(const std::string& strConf, bool bTestNet, bool bQuiet) TESTNET = bTestNet; QUIET = bQuiet; - // TESTNET forces a "test-" prefix on the conf file and db directory. - strDbPath = TESTNET ? "test-db" : "db"; - strConfFile = boost::str(boost::format(TESTNET ? "test-%s" : "%s") + // TESTNET forces a "testnet-" prefix on the conf file and db directory. + strDbPath = TESTNET ? "testnet-db" : "db"; + strConfFile = boost::str(boost::format(TESTNET ? "testnet-%s" : "%s") % (strConf.empty() ? CONFIG_FILE_NAME : strConf)); - VALIDATORS_BASE = boost::str(boost::format(TESTNET ? "test-%s" : "%s") + VALIDATORS_BASE = boost::str(boost::format(TESTNET ? "testnet-%s" : "%s") % VALIDATORS_FILE_NAME); VALIDATORS_URI = boost::str(boost::format("/%s") % VALIDATORS_BASE); From fc03403004467f7fa73c3c27d3a0af43df4da822 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 2 Jan 2013 23:57:11 -0800 Subject: [PATCH 173/525] Clean up errors messages. --- src/cpp/ripple/TransactionErr.cpp | 23 +++++++++++------------ src/cpp/ripple/TransactionErr.h | 1 - 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index a6c444679..df2d62cef 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -8,8 +8,8 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) const char* cpToken; const char* cpHuman; } transResultInfoA[] = { - { tecCLAIM, "tecCLAIM", "Fee claim. Sequence used. No action." }, - { tecDIR_FULL, "tecDIR_FULL", "Can not add entry to full dir." }, + { tecCLAIM, "tecCLAIM", "Fee claimed. Sequence used. No action." }, + { tecDIR_FULL, "tecDIR_FULL", "Can not add entry to full directory." }, { tecINSUF_RESERVE_LINE, "tecINSUF_RESERVE_LINE", "Insufficent reserve to add trust line." }, { tecINSUF_RESERVE_OFFER, "tecINSUF_RESERVE_OFFER", "Insufficent reserve to create offer." }, { tecNO_DST, "tecNO_DST", "Destination does not exist. Send XRP to create it." }, @@ -23,33 +23,32 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { tefALREADY, "tefALREADY", "The exact transaction was already in this ledger." }, { tefBAD_ADD_AUTH, "tefBAD_ADD_AUTH", "Not authorized to add account." }, { tefBAD_AUTH, "tefBAD_AUTH", "Transaction's public key is not authorized." }, - { tefBAD_CLAIM_ID, "tefBAD_CLAIM_ID", "Malformed." }, + { tefBAD_CLAIM_ID, "tefBAD_CLAIM_ID", "Malformed: Bad claim id." }, { tefBAD_GEN_AUTH, "tefBAD_GEN_AUTH", "Not authorized to claim generator." }, { tefBAD_LEDGER, "tefBAD_LEDGER", "Ledger in unexpected state." }, { tefCLAIMED, "tefCLAIMED", "Can not claim a previously claimed account." }, { tefEXCEPTION, "tefEXCEPTION", "Unexpected program state." }, { tefCREATED, "tefCREATED", "Can't add an already created account." }, { tefGEN_IN_USE, "tefGEN_IN_USE", "Generator already in use." }, - { tefPAST_SEQ, "tefPAST_SEQ", "This sequence number has already past" }, + { tefPAST_SEQ, "tefPAST_SEQ", "This sequence number has already past." }, { telLOCAL_ERROR, "telLOCAL_ERROR", "Local failure." }, - { telBAD_PATH_COUNT, "telBAD_PATH_COUNT", "Malformed: too many paths." }, + { telBAD_PATH_COUNT, "telBAD_PATH_COUNT", "Malformed: Too many paths." }, { telINSUF_FEE_P, "telINSUF_FEE_P", "Fee insufficient." }, { temMALFORMED, "temMALFORMED", "Malformed transaction." }, { temBAD_AMOUNT, "temBAD_AMOUNT", "Can only send positive amounts." }, { temBAD_AUTH_MASTER, "temBAD_AUTH_MASTER", "Auth for unclaimed account needs correct master key." }, { temBAD_FEE, "temBAD_FEE", "Invalid fee, negative or not XRP." }, - { temBAD_EXPIRATION, "temBAD_EXPIRATION", "Malformed." }, - { temBAD_ISSUER, "temBAD_ISSUER", "Malformed." }, + { temBAD_EXPIRATION, "temBAD_EXPIRATION", "Malformed: Bad expiration." }, + { temBAD_ISSUER, "temBAD_ISSUER", "Malformed: Bad issuer." }, { temBAD_LIMIT, "temBAD_LIMIT", "Limits must be non-negative." }, - { temBAD_OFFER, "temBAD_OFFER", "Malformed." }, - { temBAD_PATH, "temBAD_PATH", "Malformed." }, - { temBAD_PATH_LOOP, "temBAD_PATH_LOOP", "Malformed." }, + { temBAD_OFFER, "temBAD_OFFER", "Malformed: Bad offer." }, + { temBAD_PATH, "temBAD_PATH", "Malformed: Bad path." }, + { temBAD_PATH_LOOP, "temBAD_PATH_LOOP", "Malformed: Loop in path." }, { temBAD_PUBLISH, "temBAD_PUBLISH", "Malformed: Bad publish." }, { temBAD_TRANSFER_RATE, "temBAD_TRANSFER_RATE", "Malformed: Transfer rate must be >= 1.0" }, - { temBAD_SET_ID, "temBAD_SET_ID", "Malformed." }, - { temBAD_SEQUENCE, "temBAD_SEQUENCE", "Malformed: Sequence in not in the past." }, + { temBAD_SEQUENCE, "temBAD_SEQUENCE", "Malformed: Sequence is not in the past." }, { temDST_IS_SRC, "temDST_IS_SRC", "Destination may not be source." }, { temDST_NEEDED, "temDST_NEEDED", "Destination not specified." }, { temINVALID, "temINVALID", "The transaction is ill-formed." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 1a497598f..238ef7ddf 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -37,7 +37,6 @@ enum TER // aka TransactionEngineResult temBAD_PUBLISH, temBAD_TRANSFER_RATE, temBAD_SEQUENCE, - temBAD_SET_ID, temDST_IS_SRC, temDST_NEEDED, temINVALID, From 325e83e02a91544d507a7c6de9b3e3eb46686fed Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 00:01:34 -0800 Subject: [PATCH 174/525] Improve README. --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8ac219f98..c72bba006 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,15 @@ Ripple - P2P Payment Network Some portions of this source code are currently closed source. This is the repository for Ripple's: -* rippled - P2P network server -* ripple.js - JavaScript client libraries. +* rippled - Reference P2P network server +* ripple.js - Reference JavaScript client libraries for node.js and browsers. Build instructions: -* See: https://ripple.com/wiki/Rippled_build_instructions +* https://ripple.com/wiki/Rippled_build_instructions Setup instructions: -* See: https://ripple.com/wiki/Rippled_setup_instructions +* https://ripple.com/wiki/Rippled_setup_instructions For more information: -* See: https://ripple.com -* See: https://ripple.com/wiki +* https://ripple.com +* https://ripple.com/wiki From 6f7712e6c779384fc06c2d556645ed73664d8a28 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 00:11:23 -0800 Subject: [PATCH 175/525] Fix typo. --- bin/email_hash.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/email_hash.js b/bin/email_hash.js index 4ba07c9e0..ec6da64bb 100755 --- a/bin/email_hash.js +++ b/bin/email_hash.js @@ -1,6 +1,6 @@ #!/usr/bin/node // -// Returns a Gravatar stle hash as per: http://en.gravatar.com/site/implement/hash/ +// Returns a Gravatar style hash as per: http://en.gravatar.com/site/implement/hash/ // if (process.argv.length != 3) { From 43f888fbfa6567104013fa70c3a3342b7d7ba08c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 00:16:19 -0800 Subject: [PATCH 176/525] Clean up utility scripts. --- bin/email_hash.js | 3 ++- bin/hexify.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/bin/email_hash.js b/bin/email_hash.js index ec6da64bb..f3067065a 100755 --- a/bin/email_hash.js +++ b/bin/email_hash.js @@ -3,8 +3,9 @@ // Returns a Gravatar style hash as per: http://en.gravatar.com/site/implement/hash/ // -if (process.argv.length != 3) { +if (3 != process.argv.length) { process.stderr.write("Usage: " + process.argv[1] + " email_address\n\nReturns gravitar style hash.\n"); + process.exit(1); } else { var md5 = require('crypto').createHash('md5'); diff --git a/bin/hexify.js b/bin/hexify.js index 1c14f646f..1e2fb7000 100755 --- a/bin/hexify.js +++ b/bin/hexify.js @@ -11,8 +11,9 @@ var stringToHex = function (s) { }).join(""); }; -if (process.argv.length != 3) { +if (3 != process.argv.length) { process.stderr.write("Usage: " + process.argv[1] + " string\n\nReturns hex of lowercasing string.\n"); + process.exit(1); } else { From b0ea77809da2c7024fb6344be5c79130921c7fc3 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 00:21:31 -0800 Subject: [PATCH 177/525] Improve README. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c72bba006..2d33f969b 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ This is the repository for Ripple's: Build instructions: * https://ripple.com/wiki/Rippled_build_instructions +* https://ripple.com/wiki/Ripple_JavaScript_library Setup instructions: * https://ripple.com/wiki/Rippled_setup_instructions From 01764aa09010fc0d0486918c060d2f116d3b42b7 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 00:54:20 -0800 Subject: [PATCH 178/525] JS: Restrict UInt160 parse_json to wire format. --- src/js/amount.js | 28 +++++++++++++++++++++++++++- test/amount-test.js | 6 +++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/js/amount.js b/src/js/amount.js index 489fbc240..0c1387b00 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -254,6 +254,13 @@ UInt160.json_rewrite = function (j) { return UInt160.from_json(j).to_json(); }; +// Return a new UInt160 from j. +UInt160.from_generic = function (j) { + return 'string' === typeof j + ? (new UInt160()).parse_generic(j) + : j.clone(); +}; + // Return a new UInt160 from j. UInt160.from_json = function (j) { return 'string' === typeof j @@ -285,7 +292,7 @@ UInt160.prototype.is_valid = function () { }; // value = NaN on error. -UInt160.prototype.parse_json = function (j) { +UInt160.prototype.parse_generic = function (j) { // Canonicalize and validate if (exports.config.accounts && j in exports.config.accounts) j = exports.config.accounts[j].account; @@ -329,6 +336,25 @@ UInt160.prototype.parse_json = function (j) { return this; }; +// value = NaN on error. +UInt160.prototype.parse_json = function (j) { + // Canonicalize and validate + if (exports.config.accounts && j in exports.config.accounts) + j = exports.config.accounts[j].account; + + if ('string' !== typeof j) { + this._value = NaN; + } + else if (j[0] === "r") { + this._value = decode_base_check(consts.VER_ACCOUNT_ID, j); + } + else { + this._value = NaN; + } + + return this; +}; + // Convert from internal form. // XXX Json form should allow 0 and 1, C++ doesn't currently allow it. UInt160.prototype.to_json = function () { diff --git a/test/amount-test.js b/test/amount-test.js index 712c2f8b4..71279cbee 100644 --- a/test/amount-test.js +++ b/test/amount-test.js @@ -17,13 +17,13 @@ var config = require('./config.js'); buster.testCase("Amount", { "UInt160" : { "Parse 0" : function () { - buster.assert.equals(nbi(), UInt160.from_json("0")._value); + buster.assert.equals(nbi(), UInt160.from_generic("0")._value); }, "Parse 0 export" : function () { - buster.assert.equals(amount.consts.address_xns, UInt160.from_json("0").to_json()); + buster.assert.equals(amount.consts.address_xns, UInt160.from_generic("0").to_json()); }, "Parse 1" : function () { - buster.assert.equals(new BigInteger([1]), UInt160.from_json("1")._value); + buster.assert.equals(new BigInteger([1]), UInt160.from_generic("1")._value); }, "Parse rrrrrrrrrrrrrrrrrrrrrhoLvTp export" : function () { buster.assert.equals(amount.consts.address_xns, UInt160.from_json("rrrrrrrrrrrrrrrrrrrrrhoLvTp").to_json()); From 7cd52cd448356b64b5f62b035be69258b411c320 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 12:42:37 -0800 Subject: [PATCH 179/525] Since most transactions will likely have zero for the Flags field, make it optional. --- src/cpp/ripple/TransactionFormats.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/TransactionFormats.cpp b/src/cpp/ripple/TransactionFormats.cpp index b428ed764..9c50cd029 100644 --- a/src/cpp/ripple/TransactionFormats.cpp +++ b/src/cpp/ripple/TransactionFormats.cpp @@ -5,7 +5,7 @@ std::map TransactionFormat::byName; #define TF_BASE \ << SOElement(sfTransactionType, SOE_REQUIRED) \ - << SOElement(sfFlags, SOE_REQUIRED) \ + << SOElement(sfFlags, SOE_OPTIONAL) \ << SOElement(sfSourceTag, SOE_OPTIONAL) \ << SOElement(sfAccount, SOE_REQUIRED) \ << SOElement(sfSequence, SOE_REQUIRED) \ From 75d935e0df84d2c1537154fe0d5d1a2c26e1692f Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 13:04:07 -0800 Subject: [PATCH 180/525] Merge tepPARTIAL into tecCLAIMED. --- src/cpp/ripple/RippleCalc.cpp | 8 +++----- src/cpp/ripple/TransactionEngine.cpp | 4 ---- src/cpp/ripple/TransactionErr.cpp | 5 ++--- src/cpp/ripple/TransactionErr.h | 17 +++-------------- src/js/remote.js | 8 ++++---- test/offer-test.js | 2 +- test/send-test.js | 4 ++-- 7 files changed, 15 insertions(+), 33 deletions(-) diff --git a/src/cpp/ripple/RippleCalc.cpp b/src/cpp/ripple/RippleCalc.cpp index 783ec7be2..2d85bea14 100644 --- a/src/cpp/ripple/RippleCalc.cpp +++ b/src/cpp/ripple/RippleCalc.cpp @@ -2567,8 +2567,7 @@ cLog(lsDEBUG) << boost::str(boost::format("rippleCalc: Summary: %d rate: %s qual { // Have sent maximum allowed. Partial payment not allowed. - terResult = tepPATH_PARTIAL; - lesActive = lesBase; // Revert to just fees charged. + terResult = tecPATH_PARTIAL; } else { @@ -2581,14 +2580,13 @@ cLog(lsDEBUG) << boost::str(boost::format("rippleCalc: Summary: %d rate: %s qual else if (!bPartialPayment) { // Partial payment not allowed. - terResult = tepPATH_PARTIAL; - lesActive = lesBase; // Revert to just fees charged. + terResult = tecPATH_PARTIAL; } // Partial payment ok. else if (!saDstAmountAct) { // No payment at all. - terResult = tecPATH_DRY; // Revert to just fees charged is built into tec. + terResult = tecPATH_DRY; } else { diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index 7a3af2d4c..2f8641b70 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -116,10 +116,6 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa { didApply = true; } - else if (isTepPartial(terResult) && !isSetBit(params, tapRETRY)) - { - didApply = true; - } else if (isTecClaim(terResult) && !isSetBit(params, tapRETRY)) { // only claim the transaction fee cLog(lsINFO) << "Reprocessing to only claim fee"; diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index df2d62cef..131e03ad3 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -17,6 +17,8 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { tecNO_LINE_INSUF_RESERVE, "tecNO_LINE_INSUF_RESERVE", "No such line. Too little reserve to create it." }, { tecNO_LINE_REDUNDANT, "tecNO_LINE_REDUNDANT", "Can't set non-existant line to default." }, { tecPATH_DRY, "tecPATH_DRY", "Path could not send partial amount." }, + { tecPATH_PARTIAL, "tecPATH_PARTIAL", "Path could not send full amount." }, + { tecUNFUNDED, "tecUNFUNDED", "Source account had insufficient balance for transaction." }, { tefFAILURE, "tefFAILURE", "Failed to apply." }, @@ -58,9 +60,6 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temUNCERTAIN, "temUNCERTAIN", "In process of determining result. Never returned." }, { temUNKNOWN, "temUNKNOWN", "The transactions requires logic not implemented yet." }, - { tepPARTIAL, "tepPARTIAL", "Partial success." }, - { tepPATH_PARTIAL, "tepPATH_PARTIAL", "Path could not send full amount." }, - { terRETRY, "terRETRY", "Retry transaction." }, { terFUNDS_SPENT, "terFUNDS_SPENT", "Can't set password, password set funds already spent." }, { terINSUF_FEE_B, "terINSUF_FEE_B", "Account balance can't pay fee." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 238ef7ddf..85f822607 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -92,20 +92,9 @@ enum TER // aka TransactionEngineResult // - Forwarded tesSUCCESS = 0, - // 100 .. 119 P Partial success (SR) (ripple transaction with no good paths, pay to non-existent account) + // 100 .. 129 C Claim fee only (ripple transaction with no good paths, pay to non-existent account, no path) // Causes: // - Success, but does not achieve optimal result. - // Implications: - // - Applied - // - Forwarded - // Only allowed as a return code of appliedTransaction when !tapRetry. Otherwise, treated as terRETRY. - // - // DO NOT CHANGE THESE NUMBERS: They appear in ledger meta data. - tepPARTIAL = 100, - tepPATH_PARTIAL = 101, - - // 120 .. C Claim fee only (CO) (no path) - // Causes: // - Invalid transaction or no effect, but claim fee to use the sequence number. // Implications: // - Applied @@ -113,7 +102,8 @@ enum TER // aka TransactionEngineResult // Only allowed as a return code of appliedTransaction when !tapRetry. Otherwise, treated as terRETRY. // // DO NOT CHANGE THESE NUMBERS: They appear in ledger meta data. - tecCLAIM = 120, + tecCLAIM = 100, + tecPATH_PARTIAL = 101, tecDIR_FULL = 121, tecINSUF_RESERVE_LINE = 122, tecINSUF_RESERVE_OFFER = 123, @@ -130,7 +120,6 @@ enum TER // aka TransactionEngineResult #define isTefFailure(x) ((x) >= tefFAILURE && (x) < terRETRY) #define isTerRetry(x) ((x) >= terRETRY && (x) < tesSUCCESS) #define isTepSuccess(x) ((x) >= tesSUCCESS) -#define isTepPartial(x) ((x) >= tepPATH_PARTIAL && (x) < tecCLAIM) #define isTecClaim(x) ((x) >= tecCLAIM) bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman); diff --git a/src/js/remote.js b/src/js/remote.js index 9e46470b4..76b27f718 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -1162,7 +1162,7 @@ Remote.prototype.transaction = function () { // |/ // |- 'tesSUCCESS' - Transaction in ledger as expected. // |- 'ter...' - Transaction failed. -// \- 'tep...' - Transaction partially succeeded. +// \- 'tec...' - Transaction claimed fee only. // // Notes: // - All transactions including those with local and malformed errors may be @@ -1225,7 +1225,7 @@ Transaction.prototype.consts = { 'tefFAILURE' : -199, 'terRETRY' : -99, 'tesSUCCESS' : 0, - 'tepPARTIAL' : 100, + 'tecCLAIMED' : 100, }; Transaction.prototype.isTelLocal = function (ter) { @@ -1248,8 +1248,8 @@ Transaction.prototype.isTepSuccess = function (ter) { return ter >= this.consts.tesSUCCESS; }; -Transaction.prototype.isTepPartial = function (ter) { - return ter >= this.consts.tepPATH_PARTIAL; +Transaction.prototype.isTecClaimed = function (ter) { + return ter >= this.consts.tecCLAIMED; }; Transaction.prototype.isRejected = function (ter) { diff --git a/test/offer-test.js b/test/offer-test.js index ec629c66d..2c20dafb1 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -602,7 +602,7 @@ buster.testCase("Offer tests", { .on('proposed', function (m) { // console.log("proposed: %s", JSON.stringify(m)); - callback(m.result !== 'tepPATH_PARTIAL'); + callback(m.result !== 'tecPATH_PARTIAL'); }) .submit(); }, diff --git a/test/send-test.js b/test/send-test.js index 2322da8a9..c47b054f1 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -549,7 +549,7 @@ buster.testCase("Indirect ripple", { .on('proposed', function (m) { // console.log("proposed: %s", JSON.stringify(m)); - callback(m.result !== 'tepPATH_PARTIAL'); + callback(m.result !== 'tecPATH_PARTIAL'); }) .submit(); }, @@ -561,7 +561,7 @@ buster.testCase("Indirect ripple", { .on('proposed', function (m) { // console.log("proposed: %s", JSON.stringify(m)); - callback(m.result !== 'tepPATH_PARTIAL'); + callback(m.result !== 'tecPATH_PARTIAL'); }) .submit(); }, From 75466bc4b6566834fe6773e912dda2f42b8980fe Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 13:04:48 -0800 Subject: [PATCH 181/525] UT: Add reserve tests. --- test/reserve-test.js | 920 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 920 insertions(+) create mode 100644 test/reserve-test.js diff --git a/test/reserve-test.js b/test/reserve-test.js new file mode 100644 index 000000000..50c5d4e74 --- /dev/null +++ b/test/reserve-test.js @@ -0,0 +1,920 @@ + +var async = require("async"); +var buster = require("buster"); + +var Amount = require("../src/js/amount.js").Amount; +var Remote = require("../src/js/remote.js").Remote; +var Server = require("./server.js").Server; + +var testutils = require("./testutils.js"); + +require("../src/js/amount.js").config = require("./config.js"); +require("../src/js/remote.js").config = require("./config.js"); + +buster.testRunner.timeout = 5000; + +buster.testCase("Reserve", { + 'setUp' : testutils.build_setup(), + // 'setUp' : testutils.build_setup({ verbose: true, standalone: false }), + 'tearDown' : testutils.build_teardown(), + + "offer create then cancel in one ledger" : + function (done) { + var self = this; + var final_create; + + async.waterfall([ + function (callback) { + self.remote.transaction() + .offer_create("root", "500", "100/USD/root") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS', m); + }) + .on('final', function (m) { + // console.log("FINAL: offer_create: %s", JSON.stringify(m)); + + buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult); + + buster.assert(final_create); + }) + .submit(); + }, + function (m, callback) { + self.remote.transaction() + .offer_cancel("root", m.tx_json.Sequence) + .on('proposed', function (m) { + // console.log("PROPOSED: offer_cancel: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS', m); + }) + .on('final', function (m) { + // console.log("FINAL: offer_cancel: %s", JSON.stringify(m, undefined, 2)); + + buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult); + buster.assert(final_create); + done(); + }) + .submit(); + }, + function (m, callback) { + self.remote + .once('ledger_closed', function (message) { + // console.log("LEDGER_CLOSED: %d: %s", ledger_index, ledger_hash); + final_create = message; + }) + .ledger_accept(); + } + ], function (error) { + // console.log("result: error=%s", error); + buster.refute(error); + + if (error) done(); + }); + }, + + "offer_create then ledger_accept then offer_cancel then ledger_accept." : + function (done) { + var self = this; + var final_create; + var offer_seq; + + async.waterfall([ + function (callback) { + self.remote.transaction() + .offer_create("root", "500", "100/USD/root") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + + offer_seq = m.tx_json.Sequence; + + callback(m.result !== 'tesSUCCESS'); + }) + .on('final', function (m) { + // console.log("FINAL: offer_create: %s", JSON.stringify(m)); + + buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult); + + final_create = m; + + callback(); + }) + .submit(); + }, + function (callback) { + if (!final_create) { + self.remote + .once('ledger_closed', function (mesage) { + // console.log("LEDGER_CLOSED: %d: %s", ledger_index, ledger_hash); + + }) + .ledger_accept(); + } + else { + callback(); + } + }, + function (callback) { + // console.log("CANCEL: offer_cancel: %d", offer_seq); + + self.remote.transaction() + .offer_cancel("root", offer_seq) + .on('proposed', function (m) { + // console.log("PROPOSED: offer_cancel: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .on('final', function (m) { + // console.log("FINAL: offer_cancel: %s", JSON.stringify(m)); + + buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult); + buster.assert(final_create); + + done(); + }) + .submit(); + }, + // See if ledger_accept will crash. + function (callback) { + self.remote + .once('ledger_closed', function (mesage) { + // console.log("LEDGER_CLOSED: A: %d: %s", ledger_index, ledger_hash); + callback(); + }) + .ledger_accept(); + }, + function (callback) { + self.remote + .once('ledger_closed', function (mesage) { + // console.log("LEDGER_CLOSED: B: %d: %s", ledger_index, ledger_hash); + callback(); + }) + .ledger_accept(); + }, + ], function (error) { + // console.log("result: error=%s", error); + buster.refute(error); + + if (error) done(); + }); + }, + + "//new user offer_create then ledger_accept then offer_cancel then ledger_accept." : + function (done) { + var self = this; + var final_create; + var offer_seq; + + async.waterfall([ + function (callback) { + self.remote.transaction() + .payment('root', 'alice', "1000") + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + buster.assert.equals(m.result, 'tesSUCCESS'); + callback(); + }) + .submit() + }, + function (callback) { + self.remote.transaction() + .offer_create("alice", "500", "100/USD/alice") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + + offer_seq = m.tx_json.Sequence; + + callback(m.result !== 'tesSUCCESS'); + }) + .on('final', function (m) { + // console.log("FINAL: offer_create: %s", JSON.stringify(m)); + + buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult); + + final_create = m; + + callback(); + }) + .submit(); + }, + function (callback) { + if (!final_create) { + self.remote + .once('ledger_closed', function (mesage) { + // console.log("LEDGER_CLOSED: %d: %s", ledger_index, ledger_hash); + + }) + .ledger_accept(); + } + else { + callback(); + } + }, + function (callback) { + // console.log("CANCEL: offer_cancel: %d", offer_seq); + + self.remote.transaction() + .offer_cancel("alice", offer_seq) + .on('proposed', function (m) { + // console.log("PROPOSED: offer_cancel: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .on('final', function (m) { + // console.log("FINAL: offer_cancel: %s", JSON.stringify(m)); + + buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult); + buster.assert(final_create); + + done(); + }) + .submit(); + }, + // See if ledger_accept will crash. + function (callback) { + self.remote + .once('ledger_closed', function (mesage) { + // console.log("LEDGER_CLOSED: A: %d: %s", ledger_index, ledger_hash); + callback(); + }) + .ledger_accept(); + }, + function (callback) { + self.remote + .once('ledger_closed', function (mesage) { + // console.log("LEDGER_CLOSED: B: %d: %s", ledger_index, ledger_hash); + callback(); + }) + .ledger_accept(); + }, + ], function (error) { + // console.log("result: error=%s", error); + buster.refute(error); + if (error) done(); + }); + }, + + "offer cancel past and future sequence" : + function (done) { + var self = this; + var final_create; + + async.waterfall([ + function (callback) { + self.remote.transaction() + .payment('root', 'alice', Amount.from_json("10000.0")) + .on('proposed', function (m) { + // console.log("PROPOSED: CreateAccount: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS', m); + }) + .on('error', function(m) { + // console.log("error: %s", m); + + buster.assert(false); + callback(m); + }) + .submit(); + }, + // Past sequence but wrong + function (m, callback) { + self.remote.transaction() + .offer_cancel("root", m.tx_json.Sequence) + .on('proposed', function (m) { + // console.log("PROPOSED: offer_cancel past: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS', m); + }) + .submit(); + }, + // Same sequence + function (m, callback) { + self.remote.transaction() + .offer_cancel("root", m.tx_json.Sequence+1) + .on('proposed', function (m) { + // console.log("PROPOSED: offer_cancel same: %s", JSON.stringify(m)); + callback(m.result !== 'temBAD_SEQUENCE', m); + }) + .submit(); + }, + // Future sequence + function (m, callback) { + // After a malformed transaction, need to recover correct sequence. + self.remote.set_account_seq("root", self.remote.account_seq("root")-1); + + self.remote.transaction() + .offer_cancel("root", m.tx_json.Sequence+2) + .on('proposed', function (m) { + // console.log("ERROR: offer_cancel future: %s", JSON.stringify(m)); + callback(m.result !== 'temBAD_SEQUENCE'); + }) + .submit(); + }, + // See if ledger_accept will crash. + function (callback) { + self.remote + .once('ledger_closed', function (mesage) { + // console.log("LEDGER_CLOSED: A: %d: %s", ledger_index, ledger_hash); + callback(); + }) + .ledger_accept(); + }, + function (callback) { + self.remote + .once('ledger_closed', function (mesage) { + // console.log("LEDGER_CLOSED: B: %d: %s", ledger_index, ledger_hash); + callback(); + }) + .ledger_accept(); + }, + function (callback) { + callback(); + } + ], function (error) { + // console.log("result: error=%s", error); + buster.refute(error); + + done(); + }); + }, + + "ripple currency conversion : entire offer" : + // mtgox in, XRP out + function (done) { + var self = this; + var seq; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "mtgox"], callback); + }, + function (callback) { + self.what = "Owner count 0."; + + testutils.verify_owner_count(self.remote, "bob", 0, callback); + }, + function (callback) { + self.what = "Set limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "100/USD/mtgox", + "bob" : "1000/USD/mtgox" + }, + callback); + }, + function (callback) { + self.what = "Owner counts after trust."; + + testutils.verify_owner_counts(self.remote, + { + "alice" : 1, + "bob" : 1, + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "mtgox" : "100/USD/alice" + }, + callback); + }, + function (callback) { + self.what = "Create offer."; + + self.remote.transaction() + .offer_create("bob", "100/USD/mtgox", "500") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + + seq = m.tx_json.Sequence; + }) + .submit(); + }, + function (callback) { + self.what = "Owner counts after offer create."; + + testutils.verify_owner_counts(self.remote, + { + "alice" : 1, + "bob" : 2, + }, + callback); + }, + function (callback) { + self.what = "Verify offer balance."; + + testutils.verify_offer(self.remote, "bob", seq, "100/USD/mtgox", "500", callback); + }, + function (callback) { + self.what = "Alice converts USD to XRP."; + + self.remote.transaction() + .payment("alice", "alice", "500") + .send_max("100/USD/mtgox") + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : [ "0/USD/mtgox", String(10000000000+500-2*(Remote.fees['default'].to_number())) ], + "bob" : "100/USD/mtgox", + }, + callback); + }, + function (callback) { + self.what = "Verify offer consumed."; + + testutils.verify_offer_not_found(self.remote, "bob", seq, callback); + }, + function (callback) { + self.what = "Owner counts after consumed."; + + testutils.verify_owner_counts(self.remote, + { + "alice" : 1, + "bob" : 1, + }, + callback); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, + + "ripple currency conversion : offerer into debt" : + // alice in, carol out + function (done) { + var self = this; + var seq; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "carol"], callback); + }, + function (callback) { + self.what = "Set limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "2000/EUR/carol", + "bob" : "100/USD/alice", + "carol" : "1000/EUR/bob" + }, + callback); + }, + function (callback) { + self.what = "Create offer to exchange."; + + self.remote.transaction() + .offer_create("bob", "50/USD/alice", "200/EUR/carol") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + callback(m.result !== 'tecUNFUNDED'); + + seq = m.tx_json.Sequence; + }) + .submit(); + }, +// function (callback) { +// self.what = "Alice converts USD to EUR via offer."; +// +// self.remote.transaction() +// .offer_create("alice", "200/EUR/carol", "50/USD/alice") +// .on('proposed', function (m) { +// // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); +// callback(m.result !== 'tesSUCCESS'); +// +// seq = m.tx_json.Sequence; +// }) +// .submit(); +// }, +// function (callback) { +// self.what = "Verify balances."; +// +// testutils.verify_balances(self.remote, +// { +// "alice" : [ "-50/USD/bob", "200/EUR/carol" ], +// "bob" : [ "50/USD/alice", "-200/EUR/carol" ], +// "carol" : [ "-200/EUR/alice", "200/EUR/bob" ], +// }, +// callback); +// }, +// function (callback) { +// self.what = "Verify offer consumed."; +// +// testutils.verify_offer_not_found(self.remote, "bob", seq, callback); +// }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, + + "ripple currency conversion : in parts" : + function (done) { + var self = this; + var seq; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "mtgox"], callback); + }, + function (callback) { + self.what = "Set limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "200/USD/mtgox", + "bob" : "1000/USD/mtgox" + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "mtgox" : "200/USD/alice" + }, + callback); + }, + function (callback) { + self.what = "Create offer."; + + self.remote.transaction() + .offer_create("bob", "100/USD/mtgox", "500") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + + seq = m.tx_json.Sequence; + }) + .submit(); + }, + function (callback) { + self.what = "Alice converts USD to XRP."; + + self.remote.transaction() + .payment("alice", "alice", "200") + .send_max("100/USD/mtgox") + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify offer balance."; + + testutils.verify_offer(self.remote, "bob", seq, "60/USD/mtgox", "300", callback); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : [ "160/USD/mtgox", String(10000000000+200-2*(Remote.fees['default'].to_number())) ], + "bob" : "40/USD/mtgox", + }, + callback); + }, + function (callback) { + self.what = "Alice converts USD to XRP should fail due to PartialPayment."; + + self.remote.transaction() + .payment("alice", "alice", "600") + .send_max("100/USD/mtgox") + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tecPATH_PARTIAL'); + }) + .submit(); + }, + function (callback) { + self.what = "Alice converts USD to XRP."; + + self.remote.transaction() + .payment("alice", "alice", "600") + .send_max("100/USD/mtgox") + .set_flags('PartialPayment') + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify offer consumed."; + + testutils.verify_offer_not_found(self.remote, "bob", seq, callback); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : [ "100/USD/mtgox", String(10000000000+200+300-4*(Remote.fees['default'].to_number())) ], + "bob" : "100/USD/mtgox", + }, + callback); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, +}); + +buster.testCase("Offer cross currency", { + 'setUp' : testutils.build_setup(), + 'tearDown' : testutils.build_teardown(), + + "ripple cross currency payment - start with XRP" : + // alice --> [XRP --> carol --> USD/mtgox] --> bob + + function (done) { + var self = this; + var seq; + + // self.remote.set_trace(); + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "carol", "mtgox"], callback); + }, + function (callback) { + self.what = "Set limits."; + + testutils.credit_limits(self.remote, + { + "carol" : "1000/USD/mtgox", + "bob" : "2000/USD/mtgox" + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "mtgox" : "500/USD/carol" + }, + callback); + }, + function (callback) { + self.what = "Create offer."; + + self.remote.transaction() + .offer_create("carol", "500", "50/USD/mtgox") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + + seq = m.tx_json.Sequence; + }) + .submit(); + }, + function (callback) { + self.what = "Alice send USD/mtgox converting from XRP."; + + self.remote.transaction() + .payment("alice", "bob", "25/USD/mtgox") + .send_max("333") + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { +// "alice" : [ "500" ], + "bob" : "25/USD/mtgox", + "carol" : "475/USD/mtgox", + }, + callback); + }, + function (callback) { + self.what = "Verify offer consumed."; + + testutils.verify_offer_not_found(self.remote, "bob", seq, callback); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, + + "ripple cross currency payment - end with XRP" : + // alice --> [USD/mtgox --> carol --> XRP] --> bob + + function (done) { + var self = this; + var seq; + + // self.remote.set_trace(); + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "carol", "mtgox"], callback); + }, + function (callback) { + self.what = "Set limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "1000/USD/mtgox", + "carol" : "2000/USD/mtgox" + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "mtgox" : "500/USD/alice" + }, + callback); + }, + function (callback) { + self.what = "Create offer."; + + self.remote.transaction() + .offer_create("carol", "50/USD/mtgox", "500") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + + seq = m.tx_json.Sequence; + }) + .submit(); + }, + function (callback) { + self.what = "Alice send XRP to bob converting from USD/mtgox."; + + self.remote.transaction() + .payment("alice", "bob", "250") + .send_max("333/USD/mtgox") + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : "475/USD/mtgox", + "bob" : "10000000250", + "carol" : "25/USD/mtgox", + }, + callback); + }, + function (callback) { + self.what = "Verify offer partially consumed."; + + testutils.verify_offer(self.remote, "carol", seq, "25/USD/mtgox", "250", callback); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, + + "ripple cross currency bridged payment" : + // alice --> [USD/mtgox --> carol --> XRP] --> [XRP --> dan --> EUR/bitstamp] --> bob + + function (done) { + var self = this; + var seq_carol; + var seq_dan; + + // self.remote.set_trace(); + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "carol", "dan", "bitstamp", "mtgox"], callback); + }, + function (callback) { + self.what = "Set limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "1000/USD/mtgox", + "bob" : "1000/EUR/bitstamp", + "carol" : "1000/USD/mtgox", + "dan" : "1000/EUR/bitstamp" + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "bitstamp" : "400/EUR/dan", + "mtgox" : "500/USD/alice", + }, + callback); + }, + function (callback) { + self.what = "Create offer carol."; + + self.remote.transaction() + .offer_create("carol", "50/USD/mtgox", "500") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + + seq_carol = m.tx_json.Sequence; + }) + .submit(); + }, + function (callback) { + self.what = "Create offer dan."; + + self.remote.transaction() + .offer_create("dan", "500", "50/EUR/bitstamp") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + + seq_dan = m.tx_json.Sequence; + }) + .submit(); + }, + function (callback) { + self.what = "Alice send EUR/bitstamp to bob converting from USD/mtgox."; + + self.remote.transaction() + .payment("alice", "bob", "30/EUR/bitstamp") + .send_max("333/USD/mtgox") + .path_add( [ { currency: "XRP" } ]) + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : "470/USD/mtgox", + "bob" : "30/EUR/bitstamp", + "carol" : "30/USD/mtgox", + "dan" : "370/EUR/bitstamp", + }, + callback); + }, + function (callback) { + self.what = "Verify carol offer partially consumed."; + + testutils.verify_offer(self.remote, "carol", seq_carol, "20/USD/mtgox", "200", callback); + }, + function (callback) { + self.what = "Verify dan offer partially consumed."; + + testutils.verify_offer(self.remote, "dan", seq_dan, "200", "20/EUR/mtgox", callback); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, +}); + +// vim:sw=2:sts=2:ts=8:et From 949679dd1a5d5321f40250b8405a41895fea98af Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 13:06:38 -0800 Subject: [PATCH 182/525] Add disabled support for DestinationTag & lsfRequireDestTag. --- src/cpp/ripple/LedgerFormats.h | 5 +++++ src/cpp/ripple/PaymentTransactor.cpp | 8 ++++++++ src/cpp/ripple/SerializeProto.h | 5 +++++ src/cpp/ripple/Transaction.h | 2 +- src/cpp/ripple/TransactionErr.cpp | 3 +++ src/cpp/ripple/TransactionErr.h | 3 +++ src/cpp/ripple/TransactionFormats.cpp | 3 +++ 7 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerFormats.h b/src/cpp/ripple/LedgerFormats.h index e39e7a894..4c2ba9c54 100644 --- a/src/cpp/ripple/LedgerFormats.h +++ b/src/cpp/ripple/LedgerFormats.h @@ -3,6 +3,8 @@ #include "SerializedObject.h" +#define ENABLE_REQUIRE_DEST_TAG 0 + // Used as the type of a transaction or the type of a ledger entry. enum LedgerEntryType { @@ -40,6 +42,9 @@ enum LedgerSpecificFlags { // ltACCOUNT_ROOT lsfPasswordSpent = 0x00010000, // True, if password set fee is spent. +#if ENABLE_REQUIRE_DEST_TAG + lsfRequireDestTag = 0x00020000, // True, to require a DestinationTag for payments. +#endif // ltOFFER lsfPassive = 0x00010000, diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index e5e27a057..9cc97309e 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -99,6 +99,14 @@ TER PaymentTransactor::doApply() sleDst->setFieldAccount(sfAccount, uDstAccountID); sleDst->setFieldU32(sfSequence, 1); } +#if ENABLE_REQUIRE_DEST_TAG + else if ((sleDst->getFlags() & lsfRequireDestTag) && !mTxn.isFieldPresent(sfDestinationTag)) + { + cLog(lsINFO) << "doPayment: Malformed transaction: DestinationTag required."; + + return temINVALID; + } +#endif else { mEngine->entryModify(sleDst); diff --git a/src/cpp/ripple/SerializeProto.h b/src/cpp/ripple/SerializeProto.h index 57ef55200..fc6ee038a 100644 --- a/src/cpp/ripple/SerializeProto.h +++ b/src/cpp/ripple/SerializeProto.h @@ -1,6 +1,8 @@ // This is not really a header file, but it can be used as one with // appropriate #define statements. +#define ENABLE_DESTINATION_TAG 0 + // types (common) TYPE(Int16, UINT16, 1) TYPE(Int32, UINT32, 2) @@ -44,6 +46,9 @@ FIELD(TransferRate, UINT32, 11) FIELD(WalletSize, UINT32, 12) FIELD(OwnerCount, UINT32, 13) +#if ENABLE_DESTINATION_TAG + FIELD(DestinationTag, UINT32, 14) +#endif // 32-bit integers (uncommon) FIELD(HighQualityIn, UINT32, 16) diff --git a/src/cpp/ripple/Transaction.h b/src/cpp/ripple/Transaction.h index 35d33b91a..29505f285 100644 --- a/src/cpp/ripple/Transaction.h +++ b/src/cpp/ripple/Transaction.h @@ -84,7 +84,7 @@ public: STAmount getAmount() const { return mTransaction->getFieldU64(sfAmount); } STAmount getFee() const { return mTransaction->getTransactionFee(); } uint32 getFromAccountSeq() const { return mTransaction->getSequence(); } - uint32 getIdent() const { return mTransaction->getFieldU32(sfSourceTag); } + uint32 getSourceTag() const { return mTransaction->getFieldU32(sfSourceTag); } std::vector getSignature() const { return mTransaction->getSignature(); } uint32 getLedger() const { return mInLedger; } TransStatus getStatus() const { return mStatus; } diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index 131e03ad3..b02b2c50c 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -53,6 +53,9 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temBAD_SEQUENCE, "temBAD_SEQUENCE", "Malformed: Sequence is not in the past." }, { temDST_IS_SRC, "temDST_IS_SRC", "Destination may not be source." }, { temDST_NEEDED, "temDST_NEEDED", "Destination not specified." }, +#if ENABLE_REQUIRE_DEST_TAG + { temDST_TAG_NEEDED, "temDST_TAG_NEEDED", "Destination tag required." }, +#endif { temINVALID, "temINVALID", "The transaction is ill-formed." }, { temINVALID_FLAG, "temINVALID_FLAG", "The transaction has an invalid flag." }, { temREDUNDANT, "temREDUNDANT", "Sends same currency to self." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 85f822607..676a84142 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -39,6 +39,9 @@ enum TER // aka TransactionEngineResult temBAD_SEQUENCE, temDST_IS_SRC, temDST_NEEDED, +#if ENABLE_REQUIRE_DEST_TAG + temDST_TAG_NEEDED, +#endif temINVALID, temINVALID_FLAG, temREDUNDANT, diff --git a/src/cpp/ripple/TransactionFormats.cpp b/src/cpp/ripple/TransactionFormats.cpp index b428ed764..8e77e585c 100644 --- a/src/cpp/ripple/TransactionFormats.cpp +++ b/src/cpp/ripple/TransactionFormats.cpp @@ -55,6 +55,9 @@ static bool TFInit() << SOElement(sfSendMax, SOE_OPTIONAL) << SOElement(sfPaths, SOE_DEFAULT) << SOElement(sfInvoiceID, SOE_OPTIONAL) +#if ENABLE_DESTINATION_TAG + << SOElement(sfDestinationTag, SOE_OPTIONAL) +#endif ; DECLARE_TF(Contract, ttCONTRACT) From 7dfbe2aea1e43758a0331abf0f94031bb54bae81 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 14:07:41 -0800 Subject: [PATCH 183/525] Return temINVALID_FLAG for transaction with no flags. --- src/cpp/ripple/AccountSetTransactor.cpp | 35 +++++++---- src/cpp/ripple/OfferCancelTransactor.cpp | 19 ++++-- src/cpp/ripple/OfferCreateTransactor.cpp | 72 +++++++++++----------- src/cpp/ripple/PaymentTransactor.cpp | 24 ++++---- src/cpp/ripple/RegularKeySetTransactor.cpp | 24 +++++--- src/cpp/ripple/TrustSetTransactor.cpp | 9 +++ src/cpp/ripple/WalletAddTransactor.cpp | 13 +++- 7 files changed, 123 insertions(+), 73 deletions(-) diff --git a/src/cpp/ripple/AccountSetTransactor.cpp b/src/cpp/ripple/AccountSetTransactor.cpp index 0d1499e5a..08f2bedaf 100644 --- a/src/cpp/ripple/AccountSetTransactor.cpp +++ b/src/cpp/ripple/AccountSetTransactor.cpp @@ -4,7 +4,16 @@ SETUP_LOG(); TER AccountSetTransactor::doApply() { - cLog(lsINFO) << "doAccountSet>"; + cLog(lsINFO) << "AccountSet>"; + + const uint32 uTxFlags = mTxn.getFlags(); + + if (uTxFlags) + { + cLog(lsINFO) << "AccountSet: Malformed transaction: Invalid flags set."; + + return temINVALID_FLAG; + } // // EmailHash @@ -16,13 +25,13 @@ TER AccountSetTransactor::doApply() if (!uHash) { - cLog(lsINFO) << "doAccountSet: unset email hash"; + cLog(lsINFO) << "AccountSet: unset email hash"; mTxnAccount->makeFieldAbsent(sfEmailHash); } else { - cLog(lsINFO) << "doAccountSet: set email hash"; + cLog(lsINFO) << "AccountSet: set email hash"; mTxnAccount->setFieldH128(sfEmailHash, uHash); } @@ -38,13 +47,13 @@ TER AccountSetTransactor::doApply() if (!uHash) { - cLog(lsINFO) << "doAccountSet: unset wallet locator"; + cLog(lsINFO) << "AccountSet: unset wallet locator"; mTxnAccount->makeFieldAbsent(sfEmailHash); } else { - cLog(lsINFO) << "doAccountSet: set wallet locator"; + cLog(lsINFO) << "AccountSet: set wallet locator"; mTxnAccount->setFieldH256(sfWalletLocator, uHash); } @@ -60,7 +69,7 @@ TER AccountSetTransactor::doApply() } else { - cLog(lsINFO) << "doAccountSet: set message key"; + cLog(lsINFO) << "AccountSet: set message key"; mTxnAccount->setFieldVL(sfMessageKey, mTxn.getFieldVL(sfMessageKey)); } @@ -75,13 +84,13 @@ TER AccountSetTransactor::doApply() if (vucDomain.empty()) { - cLog(lsINFO) << "doAccountSet: unset domain"; + cLog(lsINFO) << "AccountSet: unset domain"; mTxnAccount->makeFieldAbsent(sfDomain); } else { - cLog(lsINFO) << "doAccountSet: set domain"; + cLog(lsINFO) << "AccountSet: set domain"; mTxnAccount->setFieldVL(sfDomain, vucDomain); } @@ -97,25 +106,27 @@ TER AccountSetTransactor::doApply() if (!uRate || uRate == QUALITY_ONE) { - cLog(lsINFO) << "doAccountSet: unset transfer rate"; + cLog(lsINFO) << "AccountSet: unset transfer rate"; mTxnAccount->makeFieldAbsent(sfTransferRate); } else if (uRate > QUALITY_ONE) { - cLog(lsINFO) << "doAccountSet: set transfer rate"; + cLog(lsINFO) << "AccountSet: set transfer rate"; mTxnAccount->setFieldU32(sfTransferRate, uRate); } else { - cLog(lsINFO) << "doAccountSet: bad transfer rate"; + cLog(lsINFO) << "AccountSet: bad transfer rate"; return temBAD_TRANSFER_RATE; } } - cLog(lsINFO) << "doAccountSet<"; + cLog(lsINFO) << "AccountSet<"; return tesSUCCESS; } + +// vim:ts=4 diff --git a/src/cpp/ripple/OfferCancelTransactor.cpp b/src/cpp/ripple/OfferCancelTransactor.cpp index 0eaff9daa..e17e4c9cf 100644 --- a/src/cpp/ripple/OfferCancelTransactor.cpp +++ b/src/cpp/ripple/OfferCancelTransactor.cpp @@ -1,17 +1,28 @@ #include "OfferCancelTransactor.h" #include "Log.h" +SETUP_LOG(); + TER OfferCancelTransactor::doApply() { TER terResult; const uint32 uOfferSequence = mTxn.getFieldU32(sfOfferSequence); const uint32 uAccountSequenceNext = mTxnAccount->getFieldU32(sfSequence); - Log(lsDEBUG) << "doOfferCancel: uAccountSequenceNext=" << uAccountSequenceNext << " uOfferSequence=" << uOfferSequence; + cLog(lsDEBUG) << "OfferCancel: uAccountSequenceNext=" << uAccountSequenceNext << " uOfferSequence=" << uOfferSequence; + + const uint32 uTxFlags = mTxn.getFlags(); + + if (uTxFlags) + { + cLog(lsINFO) << "OfferCancel: Malformed transaction: Invalid flags set."; + + return temINVALID_FLAG; + } if (!uOfferSequence || uAccountSequenceNext-1 <= uOfferSequence) { - Log(lsINFO) << "doOfferCancel: uAccountSequenceNext=" << uAccountSequenceNext << " uOfferSequence=" << uOfferSequence; + cLog(lsINFO) << "OfferCancel: uAccountSequenceNext=" << uAccountSequenceNext << " uOfferSequence=" << uOfferSequence; terResult = temBAD_SEQUENCE; } @@ -22,13 +33,13 @@ TER OfferCancelTransactor::doApply() if (sleOffer) { - Log(lsWARNING) << "doOfferCancel: uOfferSequence=" << uOfferSequence; + cLog(lsWARNING) << "OfferCancel: uOfferSequence=" << uOfferSequence; terResult = mEngine->getNodes().offerDelete(sleOffer, uOfferIndex, mTxnAccountID); } else { - Log(lsWARNING) << "doOfferCancel: offer not found: " + cLog(lsWARNING) << "OfferCancel: offer not found: " << RippleAddress::createHumanAccountID(mTxnAccountID) << " : " << uOfferSequence << " : " << uOfferIndex.ToString(); diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index ec6b9192b..aa7929c41 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -256,13 +256,13 @@ TER OfferCreateTransactor::takeOffers( TER OfferCreateTransactor::doApply() { - cLog(lsWARNING) << "doOfferCreate> " << mTxn.getJson(0); + cLog(lsWARNING) << "OfferCreate> " << mTxn.getJson(0); const uint32 uTxFlags = mTxn.getFlags(); const bool bPassive = isSetBit(uTxFlags, tfPassive); STAmount saTakerPays = mTxn.getFieldAmount(sfTakerPays); STAmount saTakerGets = mTxn.getFieldAmount(sfTakerGets); - cLog(lsINFO) << boost::str(boost::format("doOfferCreate: saTakerPays=%s saTakerGets=%s") + cLog(lsINFO) << boost::str(boost::format("OfferCreate: saTakerPays=%s saTakerGets=%s") % saTakerPays.getFullText() % saTakerGets.getFullText()); @@ -274,7 +274,7 @@ TER OfferCreateTransactor::doApply() const uint256 uLedgerIndex = Ledger::getOfferIndex(mTxnAccountID, uSequence); - cLog(lsINFO) << "doOfferCreate: Creating offer node: " << uLedgerIndex.ToString() << " uSequence=" << uSequence; + cLog(lsINFO) << "OfferCreate: Creating offer node: " << uLedgerIndex.ToString() << " uSequence=" << uSequence; const uint160 uPaysCurrency = saTakerPays.getCurrency(); const uint160 uGetsCurrency = saTakerGets.getCurrency(); @@ -287,49 +287,49 @@ TER OfferCreateTransactor::doApply() if (uTxFlags & tfOfferCreateMask) { - cLog(lsINFO) << "doOfferCreate: Malformed transaction: Invalid flags set."; + cLog(lsINFO) << "OfferCreate: Malformed transaction: Invalid flags set."; return temINVALID_FLAG; } else if (bHaveExpiration && !uExpiration) { - cLog(lsWARNING) << "doOfferCreate: Malformed offer: bad expiration"; + cLog(lsWARNING) << "OfferCreate: Malformed offer: bad expiration"; terResult = temBAD_EXPIRATION; } else if (bHaveExpiration && mEngine->getLedger()->getParentCloseTimeNC() >= uExpiration) { - cLog(lsWARNING) << "doOfferCreate: Expired transaction: offer expired"; + cLog(lsWARNING) << "OfferCreate: Expired transaction: offer expired"; terResult = tesSUCCESS; // Only charged fee. } else if (saTakerPays.isNative() && saTakerGets.isNative()) { - cLog(lsWARNING) << "doOfferCreate: Malformed offer: XRP for XRP"; + cLog(lsWARNING) << "OfferCreate: Malformed offer: XRP for XRP"; terResult = temBAD_OFFER; } else if (!saTakerPays.isPositive() || !saTakerGets.isPositive()) { - cLog(lsWARNING) << "doOfferCreate: Malformed offer: bad amount"; + cLog(lsWARNING) << "OfferCreate: Malformed offer: bad amount"; terResult = temBAD_OFFER; } else if (uPaysCurrency == uGetsCurrency && uPaysIssuerID == uGetsIssuerID) { - cLog(lsWARNING) << "doOfferCreate: Malformed offer: redundant offer"; + cLog(lsWARNING) << "OfferCreate: Malformed offer: redundant offer"; terResult = temREDUNDANT; } else if (saTakerPays.isNative() != !uPaysIssuerID || saTakerGets.isNative() != !uGetsIssuerID) { - cLog(lsWARNING) << "doOfferCreate: Malformed offer: bad issuer"; + cLog(lsWARNING) << "OfferCreate: Malformed offer: bad issuer"; terResult = temBAD_ISSUER; } else if (!mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets).isPositive()) { - cLog(lsWARNING) << "doOfferCreate: delay: Offers must be at least partially funded."; + cLog(lsWARNING) << "OfferCreate: delay: Offers must be at least partially funded."; terResult = tecUNFUNDED; } @@ -340,7 +340,7 @@ TER OfferCreateTransactor::doApply() if (!sleTakerPays) { - cLog(lsWARNING) << "doOfferCreate: delay: can't receive IOUs from non-existent issuer: " << RippleAddress::createHumanAccountID(uPaysIssuerID); + cLog(lsWARNING) << "OfferCreate: delay: can't receive IOUs from non-existent issuer: " << RippleAddress::createHumanAccountID(uPaysIssuerID); terResult = terNO_ACCOUNT; } @@ -353,13 +353,13 @@ TER OfferCreateTransactor::doApply() { const uint256 uTakeBookBase = Ledger::getBookBase(uGetsCurrency, uGetsIssuerID, uPaysCurrency, uPaysIssuerID); - cLog(lsINFO) << boost::str(boost::format("doOfferCreate: take against book: %s for %s -> %s") + cLog(lsINFO) << boost::str(boost::format("OfferCreate: take against book: %s for %s -> %s") % uTakeBookBase.ToString() % saTakerGets.getFullText() % saTakerPays.getFullText()); // Take using the parameters of the offer. - cLog(lsWARNING) << "doOfferCreate: takeOffers: BEFORE saTakerGets=" << saTakerGets.getFullText(); + cLog(lsWARNING) << "OfferCreate: takeOffers: BEFORE saTakerGets=" << saTakerGets.getFullText(); terResult = takeOffers( bPassive, uTakeBookBase, @@ -371,11 +371,11 @@ TER OfferCreateTransactor::doApply() saOfferGot // How much was got. ); - cLog(lsWARNING) << "doOfferCreate: takeOffers=" << terResult; - cLog(lsWARNING) << "doOfferCreate: takeOffers: saOfferPaid=" << saOfferPaid.getFullText(); - cLog(lsWARNING) << "doOfferCreate: takeOffers: saOfferGot=" << saOfferGot.getFullText(); - cLog(lsWARNING) << "doOfferCreate: takeOffers: saTakerPays=" << saTakerPays.getFullText(); - cLog(lsWARNING) << "doOfferCreate: takeOffers: AFTER saTakerGets=" << saTakerGets.getFullText(); + cLog(lsWARNING) << "OfferCreate: takeOffers=" << terResult; + cLog(lsWARNING) << "OfferCreate: takeOffers: saOfferPaid=" << saOfferPaid.getFullText(); + cLog(lsWARNING) << "OfferCreate: takeOffers: saOfferGot=" << saOfferGot.getFullText(); + cLog(lsWARNING) << "OfferCreate: takeOffers: saTakerPays=" << saTakerPays.getFullText(); + cLog(lsWARNING) << "OfferCreate: takeOffers: AFTER saTakerGets=" << saTakerGets.getFullText(); if (tesSUCCESS == terResult) { @@ -384,13 +384,13 @@ TER OfferCreateTransactor::doApply() } } - cLog(lsWARNING) << "doOfferCreate: takeOffers: saTakerPays=" << saTakerPays.getFullText(); - cLog(lsWARNING) << "doOfferCreate: takeOffers: saTakerGets=" << saTakerGets.getFullText(); - cLog(lsWARNING) << "doOfferCreate: takeOffers: mTxnAccountID=" << RippleAddress::createHumanAccountID(mTxnAccountID); - cLog(lsWARNING) << "doOfferCreate: takeOffers: FUNDS=" << mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets).getFullText(); + cLog(lsWARNING) << "OfferCreate: takeOffers: saTakerPays=" << saTakerPays.getFullText(); + cLog(lsWARNING) << "OfferCreate: takeOffers: saTakerGets=" << saTakerGets.getFullText(); + cLog(lsWARNING) << "OfferCreate: takeOffers: mTxnAccountID=" << RippleAddress::createHumanAccountID(mTxnAccountID); + cLog(lsWARNING) << "OfferCreate: takeOffers: FUNDS=" << mEngine->getNodes().accountFunds(mTxnAccountID, saTakerGets).getFullText(); - // cLog(lsWARNING) << "doOfferCreate: takeOffers: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); - // cLog(lsWARNING) << "doOfferCreate: takeOffers: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); + // cLog(lsWARNING) << "OfferCreate: takeOffers: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); + // cLog(lsWARNING) << "OfferCreate: takeOffers: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); if (tesSUCCESS != terResult || !saTakerPays // Wants nothing more. @@ -424,7 +424,7 @@ TER OfferCreateTransactor::doApply() else { // We need to place the remainder of the offer into its order book. - cLog(lsINFO) << boost::str(boost::format("doOfferCreate: offer not fully consumed: saTakerPays=%s saTakerGets=%s") + cLog(lsINFO) << boost::str(boost::format("OfferCreate: offer not fully consumed: saTakerPays=%s saTakerGets=%s") % saTakerPays.getFullText() % saTakerGets.getFullText()); @@ -440,7 +440,7 @@ TER OfferCreateTransactor::doApply() uint256 uBookBase = Ledger::getBookBase(uPaysCurrency, uPaysIssuerID, uGetsCurrency, uGetsIssuerID); - cLog(lsINFO) << boost::str(boost::format("doOfferCreate: adding to book: %s : %s/%s -> %s/%s") + cLog(lsINFO) << boost::str(boost::format("OfferCreate: adding to book: %s : %s/%s -> %s/%s") % uBookBase.ToString() % saTakerPays.getHumanCurrency() % RippleAddress::createHumanAccountID(saTakerPays.getIssuer()) @@ -457,13 +457,13 @@ TER OfferCreateTransactor::doApply() if (tesSUCCESS == terResult) { - cLog(lsWARNING) << "doOfferCreate: sfAccount=" << RippleAddress::createHumanAccountID(mTxnAccountID); - cLog(lsWARNING) << "doOfferCreate: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); - cLog(lsWARNING) << "doOfferCreate: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); - cLog(lsWARNING) << "doOfferCreate: saTakerPays.isNative()=" << saTakerPays.isNative(); - cLog(lsWARNING) << "doOfferCreate: saTakerGets.isNative()=" << saTakerGets.isNative(); - cLog(lsWARNING) << "doOfferCreate: uPaysCurrency=" << saTakerPays.getHumanCurrency(); - cLog(lsWARNING) << "doOfferCreate: uGetsCurrency=" << saTakerGets.getHumanCurrency(); + cLog(lsWARNING) << "OfferCreate: sfAccount=" << RippleAddress::createHumanAccountID(mTxnAccountID); + cLog(lsWARNING) << "OfferCreate: uPaysIssuerID=" << RippleAddress::createHumanAccountID(uPaysIssuerID); + cLog(lsWARNING) << "OfferCreate: uGetsIssuerID=" << RippleAddress::createHumanAccountID(uGetsIssuerID); + cLog(lsWARNING) << "OfferCreate: saTakerPays.isNative()=" << saTakerPays.isNative(); + cLog(lsWARNING) << "OfferCreate: saTakerGets.isNative()=" << saTakerGets.isNative(); + cLog(lsWARNING) << "OfferCreate: uPaysCurrency=" << saTakerPays.getHumanCurrency(); + cLog(lsWARNING) << "OfferCreate: uGetsCurrency=" << saTakerGets.getHumanCurrency(); SLE::pointer sleOffer = mEngine->entryCreate(ltOFFER, uLedgerIndex); @@ -481,13 +481,13 @@ TER OfferCreateTransactor::doApply() if (bPassive) sleOffer->setFlag(lsfPassive); - cLog(lsINFO) << boost::str(boost::format("doOfferCreate: final terResult=%s sleOffer=%s") + cLog(lsINFO) << boost::str(boost::format("OfferCreate: final terResult=%s sleOffer=%s") % transToken(terResult) % sleOffer->getJson(0)); } } - tLog(tesSUCCESS != terResult, lsINFO) << boost::str(boost::format("doOfferCreate: final terResult=%s") % transToken(terResult)); + tLog(tesSUCCESS != terResult, lsINFO) << boost::str(boost::format("OfferCreate: final terResult=%s") % transToken(terResult)); return terResult; } diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index 9cc97309e..51dd34649 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -26,37 +26,37 @@ TER PaymentTransactor::doApply() const uint160 uSrcCurrency = saMaxAmount.getCurrency(); const uint160 uDstCurrency = saDstAmount.getCurrency(); - cLog(lsINFO) << boost::str(boost::format("doPayment> saMaxAmount=%s saDstAmount=%s") + cLog(lsINFO) << boost::str(boost::format("Payment> saMaxAmount=%s saDstAmount=%s") % saMaxAmount.getFullText() % saDstAmount.getFullText()); if (uTxFlags & tfPaymentMask) { - cLog(lsINFO) << "doPayment: Malformed transaction: Invalid flags set."; + cLog(lsINFO) << "Payment: Malformed transaction: Invalid flags set."; return temINVALID_FLAG; } else if (!uDstAccountID) { - cLog(lsINFO) << "doPayment: Malformed transaction: Payment destination account not specified."; + cLog(lsINFO) << "Payment: Malformed transaction: Payment destination account not specified."; return temDST_NEEDED; } else if (bMax && !saMaxAmount.isPositive()) { - cLog(lsINFO) << "doPayment: Malformed transaction: bad max amount: " << saMaxAmount.getFullText(); + cLog(lsINFO) << "Payment: Malformed transaction: bad max amount: " << saMaxAmount.getFullText(); return temBAD_AMOUNT; } else if (!saDstAmount.isPositive()) { - cLog(lsINFO) << "doPayment: Malformed transaction: bad dst amount: " << saDstAmount.getFullText(); + cLog(lsINFO) << "Payment: Malformed transaction: bad dst amount: " << saDstAmount.getFullText(); return temBAD_AMOUNT; } else if (mTxnAccountID == uDstAccountID && uSrcCurrency == uDstCurrency && !bPaths) { - cLog(lsINFO) << boost::str(boost::format("doPayment: Malformed transaction: Redundant transaction: src=%s, dst=%s, src_cur=%s, dst_cur=%s") + cLog(lsINFO) << boost::str(boost::format("Payment: Malformed transaction: Redundant transaction: src=%s, dst=%s, src_cur=%s, dst_cur=%s") % mTxnAccountID.ToString() % uDstAccountID.ToString() % uSrcCurrency.ToString() @@ -68,7 +68,7 @@ TER PaymentTransactor::doApply() && ((saMaxAmount == saDstAmount && saMaxAmount.getCurrency() == saDstAmount.getCurrency()) || (saDstAmount.isNative() && saMaxAmount.isNative()))) { - cLog(lsINFO) << "doPayment: Malformed transaction: bad SendMax."; + cLog(lsINFO) << "Payment: Malformed transaction: bad SendMax."; return temINVALID; } @@ -80,14 +80,14 @@ TER PaymentTransactor::doApply() if (!saDstAmount.isNative()) { - cLog(lsINFO) << "doPayment: Delay transaction: Destination account does not exist."; + cLog(lsINFO) << "Payment: Delay transaction: Destination account does not exist."; // Another transaction could create the account and then this transaction would succeed. return tecNO_DST; } else if (saDstAmount.getNValue() < mEngine->getLedger()->getReserve(0)) // Reserve is not scaled by load. { - cLog(lsINFO) << "doPayment: Delay transaction: Destination account does not exist. Insufficent payment to create account."; + cLog(lsINFO) << "Payment: Delay transaction: Destination account does not exist. Insufficent payment to create account."; // Another transaction could create the account and then this transaction would succeed. return tecNO_DST_INSUF_XRP; @@ -102,7 +102,7 @@ TER PaymentTransactor::doApply() #if ENABLE_REQUIRE_DEST_TAG else if ((sleDst->getFlags() & lsfRequireDestTag) && !mTxn.isFieldPresent(sfDestinationTag)) { - cLog(lsINFO) << "doPayment: Malformed transaction: DestinationTag required."; + cLog(lsINFO) << "Payment: Malformed transaction: DestinationTag required."; return temINVALID; } @@ -156,7 +156,7 @@ TER PaymentTransactor::doApply() { // Vote no. However, transaction might succeed, if applied in a different order. cLog(lsINFO) << ""; - cLog(lsINFO) << boost::str(boost::format("doPayment: Delay transaction: Insufficient funds: %s / %s (%d)") + cLog(lsINFO) << boost::str(boost::format("Payment: Delay transaction: Insufficient funds: %s / %s (%d)") % saSrcXRPBalance.getText() % (saDstAmount + uReserve).getText() % uReserve); terResult = tecUNFUNDED; @@ -179,7 +179,7 @@ TER PaymentTransactor::doApply() if (transResultInfo(terResult, strToken, strHuman)) { - cLog(lsINFO) << boost::str(boost::format("doPayment: %s: %s") % strToken % strHuman); + cLog(lsINFO) << boost::str(boost::format("Payment: %s: %s") % strToken % strHuman); } else { diff --git a/src/cpp/ripple/RegularKeySetTransactor.cpp b/src/cpp/ripple/RegularKeySetTransactor.cpp index b2361c873..0b88bc478 100644 --- a/src/cpp/ripple/RegularKeySetTransactor.cpp +++ b/src/cpp/ripple/RegularKeySetTransactor.cpp @@ -1,14 +1,12 @@ #include "RegularKeySetTransactor.h" #include "Log.h" - SETUP_LOG(); - uint64_t RegularKeySetTransactor::calculateBaseFee() { - if ( !(mTxnAccount->getFlags() & lsfPasswordSpent) && - (mSigningPubKey.getAccountID() == mTxnAccountID)) + if ( !(mTxnAccount->getFlags() & lsfPasswordSpent) + && (mSigningPubKey.getAccountID() == mTxnAccountID)) { // flag is armed and they signed with the right account return 0; } @@ -18,9 +16,18 @@ uint64_t RegularKeySetTransactor::calculateBaseFee() TER RegularKeySetTransactor::doApply() { - std::cerr << "doRegularKeySet>" << std::endl; + std::cerr << "RegularKeySet>" << std::endl; - if(mFeeDue.isZero()) + const uint32 uTxFlags = mTxn.getFlags(); + + if (uTxFlags) + { + cLog(lsINFO) << "RegularKeySet: Malformed transaction: Invalid flags set."; + + return temINVALID_FLAG; + } + + if (mFeeDue.isZero()) { mTxnAccount->setFlag(lsfPasswordSpent); } @@ -28,8 +35,9 @@ TER RegularKeySetTransactor::doApply() uint160 uAuthKeyID=mTxn.getFieldAccount160(sfRegularKey); mTxnAccount->setFieldAccount(sfRegularKey, uAuthKeyID); - - std::cerr << "doRegularKeySet<" << std::endl; + std::cerr << "RegularKeySet<" << std::endl; return tesSUCCESS; } + +// vim:ts=4 diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index 8262eb063..ca852b82f 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -25,6 +25,15 @@ TER TrustSetTransactor::doApply() if (bQualityOut && QUALITY_ONE == uQualityOut) uQualityOut = 0; + const uint32 uTxFlags = mTxn.getFlags(); + + if (uTxFlags) + { + cLog(lsINFO) << "doTrustSet: Malformed transaction: Invalid flags set."; + + return temINVALID_FLAG; + } + // Check if destination makes sense. if (saLimitAmount.isNegative()) diff --git a/src/cpp/ripple/WalletAddTransactor.cpp b/src/cpp/ripple/WalletAddTransactor.cpp index 2567d8f1b..05a06dc1c 100644 --- a/src/cpp/ripple/WalletAddTransactor.cpp +++ b/src/cpp/ripple/WalletAddTransactor.cpp @@ -1,5 +1,7 @@ #include "WalletAddTransactor.h" +SETUP_LOG(); + TER WalletAddTransactor::doApply() { std::cerr << "WalletAdd>" << std::endl; @@ -7,9 +9,18 @@ TER WalletAddTransactor::doApply() const std::vector vucPubKey = mTxn.getFieldVL(sfPublicKey); const std::vector vucSignature = mTxn.getFieldVL(sfSignature); const uint160 uAuthKeyID = mTxn.getFieldAccount160(sfRegularKey); - const RippleAddress naMasterPubKey = RippleAddress::createAccountPublic(vucPubKey); + const RippleAddress naMasterPubKey = RippleAddress::createAccountPublic(vucPubKey); const uint160 uDstAccountID = naMasterPubKey.getAccountID(); + const uint32 uTxFlags = mTxn.getFlags(); + + if (uTxFlags) + { + cLog(lsINFO) << "WalletAdd: Malformed transaction: Invalid flags set."; + + return temINVALID_FLAG; + } + // FIXME: This should be moved to the transaction's signature check logic and cached if (!naMasterPubKey.accountPublicVerify(Serializer::getSHA512Half(uAuthKeyID.begin(), uAuthKeyID.size()), vucSignature)) { From 039568616c0908fa62563623cc8ae7457f3c7654 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 14:25:32 -0800 Subject: [PATCH 184/525] Cosmetic. --- src/cpp/ripple/SerializedObject.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/SerializedObject.h b/src/cpp/ripple/SerializedObject.h index aeab2e351..545ce91fb 100644 --- a/src/cpp/ripple/SerializedObject.h +++ b/src/cpp/ripple/SerializedObject.h @@ -77,8 +77,8 @@ public: int giveObject(std::auto_ptr t) { mData.push_back(t); return mData.size() - 1; } int giveObject(SerializedType* t) { mData.push_back(t); return mData.size() - 1; } const boost::ptr_vector& peekData() const { return mData; } - boost::ptr_vector& peekData() { return mData; } - SerializedType& front() { return mData.front(); } + boost::ptr_vector& peekData() { return mData; } + SerializedType& front() { return mData.front(); } const SerializedType& front() const { return mData.front(); } SerializedType& back() { return mData.back(); } const SerializedType& back() const { return mData.back(); } @@ -248,7 +248,7 @@ public: bool operator==(const STArray &s) { return value == s.value; } bool operator!=(const STArray &s) { return value != s.value; } - virtual SerializedTypeID getSType() const { return STI_ARRAY; } + virtual SerializedTypeID getSType() const { return STI_ARRAY; } virtual bool isEquivalent(const SerializedType& t) const; virtual bool isDefault() const { return value.empty(); } }; From 21940ee9cf45a177789b408f88cddc4d774458b3 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 14:25:57 -0800 Subject: [PATCH 185/525] Add disabled support for setting RequireDestTag. --- src/cpp/ripple/AccountSetTransactor.cpp | 37 +++++++++++++++++++++++++ src/cpp/ripple/TransactionFormats.h | 8 ++++++ 2 files changed, 45 insertions(+) diff --git a/src/cpp/ripple/AccountSetTransactor.cpp b/src/cpp/ripple/AccountSetTransactor.cpp index 08f2bedaf..7808dcdb6 100644 --- a/src/cpp/ripple/AccountSetTransactor.cpp +++ b/src/cpp/ripple/AccountSetTransactor.cpp @@ -8,13 +8,50 @@ TER AccountSetTransactor::doApply() const uint32 uTxFlags = mTxn.getFlags(); +#if ENABLE_REQUIRE_DEST_TAG + const uint32 uFlagsIn = mTxnAccount->getFieldU32(sfFlags); + uint32 uFlagsOut = uFlagsIn; + + if (uTxFlags & tfAccountSetMask) +#else if (uTxFlags) +#endif { cLog(lsINFO) << "AccountSet: Malformed transaction: Invalid flags set."; return temINVALID_FLAG; } +#if ENABLE_REQUIRE_DEST_TAG + // + // RequireDestTag + // + + if ((tfRequireDestTag|tfOptionalDestTag) == (uTxFlags & (tfRequireDestTag|tfOptionalDestTag))) + { + cLog(lsINFO) << "AccountSet: Malformed transaction: Contradictory flags set."; + + return temINVALID_FLAG; + } + + if (uTxFlags & tfRequireDestTag) + { + cLog(lsINFO) << "AccountSet: Set RequireDestTag."; + + uFlagsOut |= lsfRequireDestTag; + } + + if (uTxFlags & tfOptionalDestTag) + { + cLog(lsINFO) << "AccountSet: Clear RequireDestTag."; + + uFlagsOut &= ~lsfRequireDestTag; + } + + if (uFlagsIn != uFlagsOut) + mTxnAccount->setFieldU32(sfFlags, uFlagsOut); +#endif + // // EmailHash // diff --git a/src/cpp/ripple/TransactionFormats.h b/src/cpp/ripple/TransactionFormats.h index 6af1a74d9..333ede8a9 100644 --- a/src/cpp/ripple/TransactionFormats.h +++ b/src/cpp/ripple/TransactionFormats.h @@ -2,6 +2,7 @@ #define __TRANSACTIONFORMATS__ #include "SerializedObject.h" +#include "LedgerFormats.h" enum TransactionType { @@ -58,6 +59,13 @@ const int TransactionMaxLen = 1048576; // Transaction flags. // +#if ENABLE_REQUIRE_DEST_TAG +// AccountSet flags: +const uint32 tfRequireDestTag = 0x00010000; +const uint32 tfOptionalDestTag = 0x00020000; +const uint32 tfAccountSetMask = ~(tfRequireDestTag|tfOptionalDestTag); +#endif + // OfferCreate flags: const uint32 tfPassive = 0x00010000; const uint32 tfOfferCreateMask = ~(tfPassive); From a043b7084f6741b26c7327efd3bb4bbf25049ef2 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 3 Jan 2013 14:28:45 -0800 Subject: [PATCH 186/525] Cosmetic. --- src/cpp/ripple/TransactionFormats.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/TransactionFormats.h b/src/cpp/ripple/TransactionFormats.h index 333ede8a9..ad804ccb9 100644 --- a/src/cpp/ripple/TransactionFormats.h +++ b/src/cpp/ripple/TransactionFormats.h @@ -20,10 +20,10 @@ enum TransactionType ttCONTRACT = 9, ttCONTRACT_REMOVE = 10, // can we use the same msg as offer cancel - ttTRUST_SET = 20, + ttTRUST_SET = 20, - ttFEATURE = 100, - ttFEE = 101, + ttFEATURE = 100, + ttFEE = 101, }; class TransactionFormat From 6783f800344469f2f3375652494b16409e8a65a2 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 18:17:08 -0800 Subject: [PATCH 187/525] Remove a FIXME, it has been fixed. --- src/cpp/ripple/NetworkOPs.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index ce3722706..23ebcbd02 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1150,8 +1150,9 @@ void NetworkOPs::pubProposedTransaction(Ledger::ref lpCurrent, const SerializedT void NetworkOPs::pubLedger(Ledger::ref lpAccepted) { - // Don't publish to clients ledgers we don't trust. - // TODO: we need to publish old transactions when we get reconnected to the network otherwise clients can miss transactions + // Ledgers are published only when they acquire sufficient validations + // Holes are filled across connection loss or other catastrophe + { boost::recursive_mutex::scoped_lock sl(mMonitorLock); From ea514b7cf39ef9d45cc5a21104af43993f095dc8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 21:03:51 -0800 Subject: [PATCH 188/525] Fix a bug that could stall the ledger acquire engine. --- src/cpp/ripple/LedgerAcquire.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 763c91644..3d56c9f19 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -131,6 +131,8 @@ void LedgerAcquire::onTimer(bool progress) else trigger(Peer::pointer(), true); } + else + resetTimer(); } void LedgerAcquire::addPeers() @@ -509,7 +511,6 @@ LedgerAcquire::pointer LedgerAcquireMaster::findCreate(const uint256& hash) if (ptr) return ptr; ptr = boost::make_shared(hash); - assert(mLedgers[hash] == ptr); ptr->addPeers(); ptr->resetTimer(); // Cannot call in constructor return ptr; From b7fe1424fb3a93a8b18066e8ef8c92823acd3b50 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 21:04:11 -0800 Subject: [PATCH 189/525] Count a ledger as present (for purposes of allowing clients that trust us to query it) only when it has been validated. --- src/cpp/ripple/Ledger.cpp | 1 - src/cpp/ripple/LedgerMaster.cpp | 9 ++++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index b8ffa1b86..9b1f797d8 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -464,7 +464,6 @@ void Ledger::saveAcceptedLedger(bool fromConsensus, LoadEvent::pointer event) return; } - theApp->getLedgerMaster().setFullLedger(shared_from_this()); event->stop(); decPendingSaves(); diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index f6cf11652..d0d4cd5cb 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -218,6 +218,9 @@ void LedgerMaster::fixMismatch(Ledger::ref ledger) { int invalidate = 0; + mMissingLedger.reset(); + mMissingSeq = 0; + for (uint32 lSeq = ledger->getLedgerSeq() - 1; lSeq > 0; --lSeq) if (mCompleteLedgers.hasValue(lSeq)) { @@ -233,11 +236,6 @@ void LedgerMaster::fixMismatch(Ledger::ref ledger) } } mCompleteLedgers.clearValue(lSeq); - if (mMissingSeq == lSeq) - { - mMissingLedger.reset(); - mMissingSeq = 0; - } ++invalidate; } @@ -400,6 +398,7 @@ void LedgerMaster::pubThread() BOOST_FOREACH(Ledger::ref l, ledgers) { + setFullLedger(l); // OPTIMIZEME: This is actually more work than we need to do theApp->getOPs().pubLedger(l); BOOST_FOREACH(callback& c, mOnValidate) { From d4f4d9bf787f16850ab1cf67b3da8d652d0be6e2 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 21:25:40 -0800 Subject: [PATCH 190/525] Redesign the way the acquire timer is (re)set so that we won't have bugs where we fail to arm it. --- src/cpp/ripple/LedgerAcquire.cpp | 23 +++++++++++------------ src/cpp/ripple/LedgerAcquire.h | 3 ++- src/cpp/ripple/LedgerConsensus.cpp | 24 +++++++++--------------- 3 files changed, 22 insertions(+), 28 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 3d56c9f19..29a2aad70 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -37,7 +37,7 @@ void PeerSet::badPeer(Peer::ref ptr) mPeers.erase(ptr->getPeerId()); } -void PeerSet::resetTimer() +void PeerSet::setTimer() { mTimer.expires_from_now(boost::posix_time::milliseconds(mTimerInterval)); mTimer.async_wait(boost::bind(&PeerSet::TimerEntry, pmDowncast(), boost::asio::placeholders::error)); @@ -45,6 +45,9 @@ void PeerSet::resetTimer() void PeerSet::invokeOnTimer() { + if (isDone()) + return; + if (!mProgress) { ++mTimeouts; @@ -56,6 +59,9 @@ void PeerSet::invokeOnTimer() mProgress = false; onTimer(true); } + + if (!isDone()) + setTimer(); } void PeerSet::TimerEntry(boost::weak_ptr wptr, const boost::system::error_code& result) @@ -120,19 +126,16 @@ void LedgerAcquire::onTimer(bool progress) { setFailed(); done(); + return; } - else if (!progress) + + if (!progress) { if (!getPeerCount()) - { addPeers(); - resetTimer(); - } else trigger(Peer::pointer(), true); } - else - resetTimer(); } void LedgerAcquire::addPeers() @@ -226,8 +229,6 @@ void LedgerAcquire::trigger(Peer::ref peer, bool timer) tmGL.set_itype(ripple::liBASE); cLog(lsTRACE) << "Sending base request to " << (peer ? "selected peer" : "all peers"); sendRequest(tmGL, peer); - if (timer) - resetTimer(); return; } @@ -319,8 +320,6 @@ void LedgerAcquire::trigger(Peer::ref peer, bool timer) cLog(lsDEBUG) << "Done:" << (mComplete ? " complete" : "") << (mFailed ? " failed" : ""); done(); } - else if (timer) - resetTimer(); } void PeerSet::sendRequest(const ripple::TMGetLedger& tmGL, Peer::ref peer) @@ -512,7 +511,7 @@ LedgerAcquire::pointer LedgerAcquireMaster::findCreate(const uint256& hash) return ptr; ptr = boost::make_shared(hash); ptr->addPeers(); - ptr->resetTimer(); // Cannot call in constructor + ptr->setTimer(); // Cannot call in constructor return ptr; } diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 68cd27c48..68753afab 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -47,10 +47,11 @@ public: void peerHas(Peer::ref); void badPeer(Peer::ref); - void resetTimer(); + void setTimer(); int takePeerSetFrom(const PeerSet& s); int getPeerCount() const; + virtual bool isDone() const { return mComplete || mFailed; } protected: virtual void newPeer(Peer::ref) = 0; diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index c386f62b3..0c174a806 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -67,7 +67,6 @@ void TransactionAcquire::onTimer(bool progress) BOOST_FOREACH(Peer::ref peer, peerList) peerHas(peer); } - resetTimer(); } else if (!progress) trigger(Peer::pointer(), true); @@ -111,20 +110,15 @@ void TransactionAcquire::trigger(Peer::ref peer, bool timer) done(); return; } - else - { - ripple::TMGetLedger tmGL; - tmGL.set_ledgerhash(mHash.begin(), mHash.size()); - tmGL.set_itype(ripple::liTS_CANDIDATE); - if (getTimeouts() != 0) - tmGL.set_querytype(ripple::qtINDIRECT); - BOOST_FOREACH(SHAMapNode& it, nodeIDs) - *(tmGL.add_nodeids()) = it.getRawString(); - sendRequest(tmGL, peer); - } + ripple::TMGetLedger tmGL; + tmGL.set_ledgerhash(mHash.begin(), mHash.size()); + tmGL.set_itype(ripple::liTS_CANDIDATE); + if (getTimeouts() != 0) + tmGL.set_querytype(ripple::qtINDIRECT); + BOOST_FOREACH(SHAMapNode& it, nodeIDs) + *(tmGL.add_nodeids()) = it.getRawString(); + sendRequest(tmGL, peer); } - if (timer) - resetTimer(); } SMAddNode TransactionAcquire::takeNodes(const std::list& nodeIDs, @@ -882,7 +876,7 @@ void LedgerConsensus::startAcquiring(const TransactionAcquire::pointer& acquire) acquire->peerHas(peer); } - acquire->resetTimer(); + acquire->setTimer(); } void LedgerConsensus::propose() From e78b5d11b601c07d8397a61f3537c36c7812627c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 22:33:55 -0800 Subject: [PATCH 191/525] Bugfix. --- src/cpp/ripple/LedgerConsensus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 0c174a806..a66cba2c6 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -419,7 +419,7 @@ void LedgerConsensus::handleLCL(const uint256& lclHash) cLog(lsINFO) << "Have the consensus ledger " << mPrevLedgerHash; mHaveCorrectLCL = true; - if (mAcquiringLedger->isComplete()) + if (mAcquiringLedger && mAcquiringLedger->isComplete()) theApp->getOPs().clearNeedNetworkLedger(); mCloseResolution = ContinuousLedgerTiming::getNextLedgerTimeResolution( mPreviousLedger->getCloseResolution(), mPreviousLedger->getCloseAgree(), From 0d8ed85bd4da2d1a1ecf9a0037a6dadda4a02e33 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 22:44:56 -0800 Subject: [PATCH 192/525] Update. --- src/cpp/ripple/LedgerConsensus.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index a66cba2c6..74d332e09 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -419,8 +419,10 @@ void LedgerConsensus::handleLCL(const uint256& lclHash) cLog(lsINFO) << "Have the consensus ledger " << mPrevLedgerHash; mHaveCorrectLCL = true; +#if 0 // FIXME: can trigger early if (mAcquiringLedger && mAcquiringLedger->isComplete()) theApp->getOPs().clearNeedNetworkLedger(); +#endif mCloseResolution = ContinuousLedgerTiming::getNextLedgerTimeResolution( mPreviousLedger->getCloseResolution(), mPreviousLedger->getCloseAgree(), mPreviousLedger->getLedgerSeq() + 1); From 903a04e9bd7416dc7698ae6aaa864c6ad2cb322a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 23:07:56 -0800 Subject: [PATCH 193/525] Raise the pending save count sooner. --- src/cpp/ripple/Ledger.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 9b1f797d8..bb1da54ce 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -1188,11 +1188,14 @@ void Ledger::pendSave(bool fromConsensus) if (!fromConsensus && !theApp->isNewFlag(getHash(), SF_SAVED)) return; + { + boost::recursive_mutex::scoped_lock sl(sPendingSaveLock); + ++sPendingSaves; + } + boost::thread(boost::bind(&Ledger::saveAcceptedLedger, shared_from_this(), fromConsensus, theApp->getJobQueue().getLoadEvent(jtDISK))).detach(); - boost::recursive_mutex::scoped_lock sl(sPendingSaveLock); - ++sPendingSaves; } void Ledger::decPendingSaves() From 7859dceb3219b87d71f199f75fd55a788f8088f9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 23:09:17 -0800 Subject: [PATCH 194/525] Small cleanup. --- src/cpp/ripple/NetworkOPs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 23ebcbd02..fc10d0236 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -789,7 +789,7 @@ void NetworkOPs::switchLastClosedLedger(Ledger::pointer newLedger, bool duringCo else cLog(lsERROR) << "JUMP last closed ledger to " << newLedger->getHash(); - mNeedNetworkLedger = false; + clearNeedNetworkLedger(); newLedger->setClosed(); Ledger::pointer openLedger = boost::make_shared(false, boost::ref(*newLedger)); mLedgerMaster->switchLedgers(newLedger, openLedger); From 6849c579eb6abdd18aa0125cb6309cc305b44fc0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 23:12:48 -0800 Subject: [PATCH 195/525] Extra safety. --- src/cpp/ripple/LedgerConsensus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 74d332e09..6d6535979 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -277,7 +277,7 @@ LedgerConsensus::LedgerConsensus(const uint256& prevLCLHash, Ledger::ref previou mCloseResolution = ContinuousLedgerTiming::getNextLedgerTimeResolution( mPreviousLedger->getCloseResolution(), mPreviousLedger->getCloseAgree(), previousLedger->getLedgerSeq() + 1); - if (mValPublic.isValid() && mValPrivate.isValid()) + if (mValPublic.isValid() && mValPrivate.isValid() && !theApp->getOPs().isNeedNetworkLedger()) { cLog(lsINFO) << "Entering consensus process, validating"; mValidating = true; From 11cb109c1613971ab28ebcd74574b0c8b76fbde5 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 23:23:10 -0800 Subject: [PATCH 196/525] Another safety. --- src/cpp/ripple/LedgerConsensus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 6d6535979..09de20131 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -304,7 +304,7 @@ LedgerConsensus::LedgerConsensus(const uint256& prevLCLHash, Ledger::ref previou void LedgerConsensus::checkOurValidation() { // This only covers some cases - Fix for the case where we can't ever acquire the consensus ledger - if (!mHaveCorrectLCL || !mValPublic.isValid() || !mValPrivate.isValid()) + if (!mHaveCorrectLCL || !mValPublic.isValid() || !mValPrivate.isValid() || theApp->getOPs().isNeedNetworkLedger()) return; SerializedValidation::pointer lastVal = theApp->getOPs().getLastValidation(); From 3eafdbc38ba2520a08f0a3d749e5e020ad7c8d39 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 23:28:03 -0800 Subject: [PATCH 197/525] Emergency fix. --- src/cpp/ripple/RPCHandler.cpp | 11 +++++++++++ src/cpp/ripple/RPCHandler.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 30d5de75f..7bc3d1783 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1160,6 +1160,16 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) } } +Json::Value RPCHandler::doLedgerOkay(Json::Value) +{ + theApp->getOPs().clearNeedNetworkLedger(); + Json::Value ret(Json::objectValue); + + ret["okay"] = true; + + return ret; +} + Json::Value RPCHandler::doServerInfo(Json::Value) { Json::Value ret(Json::objectValue); @@ -2447,6 +2457,7 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { "ripple_path_find", &RPCHandler::doRipplePathFind, false, optCurrent }, { "submit", &RPCHandler::doSubmit, false, optCurrent }, { "server_info", &RPCHandler::doServerInfo, true, optNone }, + { "ledger_okay", &RPCHandler::doLedgerOkay, true, optNone }, { "stop", &RPCHandler::doStop, true, optNone }, { "transaction_entry", &RPCHandler::doTransactionEntry, false, optCurrent }, { "tx", &RPCHandler::doTx, false, optNetwork }, diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index a5650a214..5d4fe29da 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -90,6 +90,7 @@ class RPCHandler Json::Value doSubscribe(Json::Value params); Json::Value doUnsubscribe(Json::Value params); + Json::Value doLedgerOkay(Json::Value params); public: From 3708271ae5708846aec6704af347576270667fd9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 3 Jan 2013 23:37:38 -0800 Subject: [PATCH 198/525] Rest of fix. --- src/cpp/ripple/CallRPC.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 4b5b46816..e78b7c06c 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -439,6 +439,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) // { "ripple_path_find", &RPCParser::parseRipplePathFind, -1, -1 }, { "submit", &RPCParser::parseSubmit, 2, 2 }, { "server_info", &RPCParser::parseAsIs, 0, 0 }, + { "ledger_okay", &RPCParser::parseAsIs, 0, 0 }, { "stop", &RPCParser::parseAsIs, 0, 0 }, // { "transaction_entry", &RPCParser::parseTransactionEntry, -1, -1 }, { "tx", &RPCParser::parseTx, 1, 1 }, From aee92a447c27cb30094995f3862421985fbba8c1 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 00:01:43 -0800 Subject: [PATCH 199/525] Suppress some spurious non-local fetches of data. --- src/cpp/ripple/Ledger.cpp | 11 ++++++----- src/cpp/ripple/Ledger.h | 7 +++---- src/cpp/ripple/LedgerAcquire.cpp | 13 ++++++++----- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index bb1da54ce..3db595c5a 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -94,19 +94,19 @@ Ledger::Ledger(bool /* dummy */, Ledger& prevLedger) : zeroFees(); } -Ledger::Ledger(const std::vector& rawLedger) : +Ledger::Ledger(const std::vector& rawLedger, bool hasPrefix) : mClosed(false), mValidHash(false), mAccepted(false), mImmutable(true) { Serializer s(rawLedger); - setRaw(s); + setRaw(s, hasPrefix); zeroFees(); } -Ledger::Ledger(const std::string& rawLedger) : +Ledger::Ledger(const std::string& rawLedger, bool hasPrefix) : mClosed(false), mValidHash(false), mAccepted(false), mImmutable(true) { Serializer s(rawLedger); - setRaw(s); + setRaw(s, hasPrefix); zeroFees(); } @@ -127,9 +127,10 @@ void Ledger::updateHash() mValidHash = true; } -void Ledger::setRaw(Serializer &s) +void Ledger::setRaw(Serializer &s, bool hasPrefix) { SerializerIterator sit(s); + if (hasPrefix) sit.get32(); mLedgerSeq = sit.get32(); mTotCoins = sit.get64(); mParentHash = sit.get256(); diff --git a/src/cpp/ripple/Ledger.h b/src/cpp/ripple/Ledger.h index b9cf05892..27fad106c 100644 --- a/src/cpp/ripple/Ledger.h +++ b/src/cpp/ripple/Ledger.h @@ -109,9 +109,8 @@ public: uint64 totCoins, uint32 closeTime, uint32 parentCloseTime, int closeFlags, int closeResolution, uint32 ledgerSeq); // used for database ledgers - Ledger(const std::vector& rawLedger); - - Ledger(const std::string& rawLedger); + Ledger(const std::vector& rawLedger, bool hasPrefix); + Ledger(const std::string& rawLedger, bool hasPrefix); Ledger(bool dummy, Ledger& previous); // ledger after this one @@ -132,7 +131,7 @@ public: // ledger signature operations void addRaw(Serializer &s) const; - void setRaw(Serializer& s); + void setRaw(Serializer& s, bool hasPrefix); uint256 getHash(); const uint256& getParentHash() const { return mParentHash; } diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 29a2aad70..55c539be1 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -79,6 +79,7 @@ LedgerAcquire::LedgerAcquire(const uint256& hash) : PeerSet(hash, LEDGER_ACQUIRE #ifdef LA_DEBUG cLog(lsTRACE) << "Acquiring ledger " << mHash; #endif + tryLocal(); } bool LedgerAcquire::tryLocal() @@ -87,7 +88,7 @@ bool LedgerAcquire::tryLocal() if (!node) return false; - mLedger = boost::make_shared(strCopy(node->getData())); + mLedger = boost::make_shared(strCopy(node->getData()), true); assert(mLedger->getHash() == mHash); mHaveBase = true; @@ -254,7 +255,8 @@ void LedgerAcquire::trigger(Peer::ref peer, bool timer) mLedger->peekTransactionMap()->getMissingNodes(nodeIDs, nodeHashes, 128, &tFilter); if (nodeIDs.empty()) { - if (!mLedger->peekTransactionMap()->isValid()) mFailed = true; + if (!mLedger->peekTransactionMap()->isValid()) + mFailed = true; else { mHaveTransactions = true; @@ -294,7 +296,8 @@ void LedgerAcquire::trigger(Peer::ref peer, bool timer) mLedger->peekAccountStateMap()->getMissingNodes(nodeIDs, nodeHashes, 128, &aFilter); if (nodeIDs.empty()) { - if (!mLedger->peekAccountStateMap()->isValid()) mFailed = true; + if (!mLedger->peekAccountStateMap()->isValid()) + mFailed = true; else { mHaveState = true; @@ -367,14 +370,14 @@ int PeerSet::getPeerCount() const return ret; } -bool LedgerAcquire::takeBase(const std::string& data) +bool LedgerAcquire::takeBase(const std::string& data) // data must not have hash prefix { // Return value: true=normal, false=bad data #ifdef LA_DEBUG cLog(lsTRACE) << "got base acquiring ledger " << mHash; #endif boost::recursive_mutex::scoped_lock sl(mLock); if (mHaveBase) return true; - mLedger = boost::make_shared(data); + mLedger = boost::make_shared(data, false); if (mLedger->getHash() != mHash) { cLog(lsWARNING) << "Acquire hash mismatch"; From 06c54c425cff4d895a55cd61f2310a2667c7aa22 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 00:08:27 -0800 Subject: [PATCH 200/525] Fix not leaving the "need network ledger" state correctly. --- src/cpp/ripple/CallRPC.cpp | 1 - src/cpp/ripple/LedgerMaster.cpp | 3 +++ src/cpp/ripple/RPCHandler.cpp | 11 ----------- src/cpp/ripple/RPCHandler.h | 1 - 4 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index e78b7c06c..4b5b46816 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -439,7 +439,6 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) // { "ripple_path_find", &RPCParser::parseRipplePathFind, -1, -1 }, { "submit", &RPCParser::parseSubmit, 2, 2 }, { "server_info", &RPCParser::parseAsIs, 0, 0 }, - { "ledger_okay", &RPCParser::parseAsIs, 0, 0 }, { "stop", &RPCParser::parseAsIs, 0, 0 }, // { "transaction_entry", &RPCParser::parseTransactionEntry, -1, -1 }, { "tx", &RPCParser::parseTx, 1, 1 }, diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index d0d4cd5cb..0a139c7ca 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -338,6 +338,8 @@ void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) if (theConfig.RUN_STANDALONE) minVal = 0; + else if (theApp->getOPs().isNeedNetworkLedger()) + minVal = 1; cLog(lsTRACE) << "Sweeping for ledgers to publish: minval=" << minVal; @@ -347,6 +349,7 @@ void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(seq); if (ledger && (theApp->getValidations().getTrustedValidationCount(ledger->getHash()) >= minVal)) { // this ledger (and any priors) can be published + theApp->getOPs().clearNeedNetworkLedger(); if (ledger->getLedgerSeq() > (mLastValidateSeq + MAX_LEDGER_GAP)) mLastValidateSeq = ledger->getLedgerSeq() - MAX_LEDGER_GAP; diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 7bc3d1783..30d5de75f 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1160,16 +1160,6 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) } } -Json::Value RPCHandler::doLedgerOkay(Json::Value) -{ - theApp->getOPs().clearNeedNetworkLedger(); - Json::Value ret(Json::objectValue); - - ret["okay"] = true; - - return ret; -} - Json::Value RPCHandler::doServerInfo(Json::Value) { Json::Value ret(Json::objectValue); @@ -2457,7 +2447,6 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { "ripple_path_find", &RPCHandler::doRipplePathFind, false, optCurrent }, { "submit", &RPCHandler::doSubmit, false, optCurrent }, { "server_info", &RPCHandler::doServerInfo, true, optNone }, - { "ledger_okay", &RPCHandler::doLedgerOkay, true, optNone }, { "stop", &RPCHandler::doStop, true, optNone }, { "transaction_entry", &RPCHandler::doTransactionEntry, false, optCurrent }, { "tx", &RPCHandler::doTx, false, optNetwork }, diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index 5d4fe29da..a5650a214 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -90,7 +90,6 @@ class RPCHandler Json::Value doSubscribe(Json::Value params); Json::Value doUnsubscribe(Json::Value params); - Json::Value doLedgerOkay(Json::Value params); public: From 03ecbd1ea89829d4014bdd0d77924358f9e7f35c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 00:22:20 -0800 Subject: [PATCH 201/525] Create a few extra threads. --- src/cpp/ripple/JobQueue.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index 47c402c3f..954785204 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -195,8 +195,9 @@ void JobQueue::setThreadCount(int c) else if (c == 0) { c = boost::thread::hardware_concurrency(); - if (c < 2) - c = 2; + if (c < 0) + c = 0; + c += 2; cLog(lsINFO) << "Auto-tuning to " << c << " validation/transaction/proposal threads"; } From f0c73a76ce9341d6c5ac23890bb62113a2cc7e9e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 00:40:03 -0800 Subject: [PATCH 202/525] Fix some local acquire logic --- src/cpp/ripple/LedgerMaster.cpp | 30 ++++++++++++++++++++++++++++-- src/cpp/ripple/LedgerMaster.h | 1 + 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 0a139c7ca..267473869 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -132,8 +132,35 @@ bool LedgerMaster::haveLedgerRange(uint32 from, uint32 to) return (prevMissing == RangeSet::RangeSetAbsent) || (prevMissing < from); } +void LedgerMaster::asyncAccept(Ledger::pointer ledger) +{ + do + { + { + boost::recursive_mutex::scoped_lock ml(mLock); + mCompleteLedgers.setValue(ledger->getLedgerSeq()); + if ((ledger->getLedgerSeq() == 0) || mCompleteLedgers.hasValue(ledger->getLedgerSeq() - 1)) + break; + } + Ledger::pointer prevLedger = Ledger::loadByIndex(ledger->getLedgerSeq() - 1); + if (!prevLedger || (prevLedger->getHash() != ledger->getParentHash())) + break; + ledger = prevLedger; + } while(1); + resumeAcquiring(); +} + void LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq) { + Ledger::pointer ledger = Ledger::loadByIndex(ledgerSeq); + if (ledger && (ledger->getHash() == ledgerHash)) + { + cLog(lsDEBUG) << "Ledger found is database, doing async accept"; + mTooFast = true; + theApp->getJobQueue().addJob(jtPUBLEDGER, boost::bind(&LedgerMaster::asyncAccept, this, ledger)); + return; + } + mMissingLedger = theApp->getMasterLedgerAcquire().findCreate(ledgerHash); if (mMissingLedger->isComplete()) { @@ -294,10 +321,9 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) cLog(lsDEBUG) << "no prior missing ledger"; return; } - cLog(lsTRACE) << "Ledger " << prevMissing << " is missing"; if (shouldAcquire(mCurrentLedger->getLedgerSeq(), theConfig.LEDGER_HISTORY, prevMissing)) { - cLog(lsINFO) << "Ledger " << prevMissing << " is needed"; + cLog(lsDEBUG) << "Ledger " << prevMissing << " is needed"; assert(!mCompleteLedgers.hasValue(prevMissing)); Ledger::pointer nextLedger = getLedgerBySeq(prevMissing + 1); if (nextLedger) diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 2ec4f0748..dd37c299f 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -51,6 +51,7 @@ protected: bool isTransactionOnFutureList(const Transaction::pointer& trans); void acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq); + void asyncAccept(Ledger::pointer); void missingAcquireComplete(LedgerAcquire::pointer); void pubThread(); From d78b7468899ac007550bcb5fa97ab8a946f5a856 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Fri, 4 Jan 2013 09:46:41 +0100 Subject: [PATCH 203/525] More robust input type handling for Uint160.from_json(). --- src/js/amount.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/js/amount.js b/src/js/amount.js index 0c1387b00..7af56b991 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -263,9 +263,13 @@ UInt160.from_generic = function (j) { // Return a new UInt160 from j. UInt160.from_json = function (j) { - return 'string' === typeof j - ? (new UInt160()).parse_json(j) - : j.clone(); + if ('string' === typeof j) { + return (new UInt160()).parse_json(j); + } else if (j instanceof Uint160) { + return j.clone(); + } else { + return new UInt160(); + } }; UInt160.is_valid = function (j) { From 4e5979564ea4cd24a4198a5e3a8a37c3da808843 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Fri, 4 Jan 2013 09:46:55 +0100 Subject: [PATCH 204/525] Fix JS compile output file names. --- grunt.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/grunt.js b/grunt.js index 4b9fd1294..cd2d59a70 100644 --- a/grunt.js +++ b/grunt.js @@ -2,7 +2,7 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-webpack'); grunt.initConfig({ - pkg: '', meta: { banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' + '<%= grunt.template.today("yyyy-mm-dd") %>\n' + @@ -43,12 +43,12 @@ module.exports = function(grunt) { }, lib_debug: { src: "src/js/index.js", - dest: "build/ripple-<%= pkg.version %>.js", + dest: "build/ripple-<%= pkg.version %>-debug.js", debug: true }, lib_min: { src: "src/js/index.js", - dest: "build/ripple-<%= pkg.version %>.js", + dest: "build/ripple-<%= pkg.version %>-min.js", minimize: true } }, From 0748d97524710a058872cbc1d7407bf35fe97377 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Fri, 4 Jan 2013 09:59:05 +0100 Subject: [PATCH 205/525] Fix: Grunt/Webpack should compile JS code as a library. --- grunt.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/grunt.js b/grunt.js index cd2d59a70..d1a8c46e9 100644 --- a/grunt.js +++ b/grunt.js @@ -39,16 +39,22 @@ module.exports = function(grunt) { webpack: { lib: { src: "src/js/index.js", - dest: "build/ripple-<%= pkg.version %>.js" + dest: "build/ripple-<%= pkg.version %>.js", + libary: "ripple", // misspelling fixed in later versions of webpack + library: "ripple" }, lib_debug: { src: "src/js/index.js", dest: "build/ripple-<%= pkg.version %>-debug.js", + libary: "ripple", // misspelling fixed in later versions of webpack + library: "ripple", debug: true }, lib_min: { src: "src/js/index.js", dest: "build/ripple-<%= pkg.version %>-min.js", + libary: "ripple", // misspelling fixed in later versions of webpack + library: "ripple", minimize: true } }, From 2288089a97d8ee52dec3b796da9e5e1364fc2456 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Fri, 4 Jan 2013 10:02:13 +0100 Subject: [PATCH 206/525] Update upstream SJCL. This version contains our SHA512 contribution. Preparing to get rid of the client having it's own separate copy of SJCL which is not all that cool. :/ --- src/js/sjcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/sjcl b/src/js/sjcl index d04d0bdcc..dbdef434e 160000 --- a/src/js/sjcl +++ b/src/js/sjcl @@ -1 +1 @@ -Subproject commit d04d0bdccd986e434b98fe393e1e01286c10fc36 +Subproject commit dbdef434e76c3f16835f3126a7ff1c717b1ce8af From 8ace87066a2b3956e725517eeee7ac0531136030 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 01:10:13 -0800 Subject: [PATCH 207/525] Fix a huge delay with --net --- src/cpp/ripple/LedgerMaster.cpp | 43 +++++++++++++++------------------ 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 267473869..db7faa57a 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -369,32 +369,29 @@ void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) cLog(lsTRACE) << "Sweeping for ledgers to publish: minval=" << minVal; - // See if any later ledgers have at least the minimum number of validations - for (seq = mFinalizedLedger->getLedgerSeq(); seq > mLastValidateSeq; --seq) - { - Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(seq); - if (ledger && (theApp->getValidations().getTrustedValidationCount(ledger->getHash()) >= minVal)) - { // this ledger (and any priors) can be published - theApp->getOPs().clearNeedNetworkLedger(); - if (ledger->getLedgerSeq() > (mLastValidateSeq + MAX_LEDGER_GAP)) - mLastValidateSeq = ledger->getLedgerSeq() - MAX_LEDGER_GAP; + // See if this ledger have at least the minimum number of validations + Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(seq); + if (ledger && (theApp->getValidations().getTrustedValidationCount(ledger->getHash()) >= minVal)) + { // this ledger (and any priors) can be published + theApp->getOPs().clearNeedNetworkLedger(); + if (ledger->getLedgerSeq() > (mLastValidateSeq + MAX_LEDGER_GAP)) + mLastValidateSeq = ledger->getLedgerSeq() - MAX_LEDGER_GAP; - cLog(lsTRACE) << "Ledger " << ledger->getLedgerSeq() << " can be published"; - for (uint32 pubSeq = mLastValidateSeq + 1; pubSeq <= seq; ++pubSeq) + cLog(lsTRACE) << "Ledger " << ledger->getLedgerSeq() << " can be published"; + for (uint32 pubSeq = mLastValidateSeq + 1; pubSeq <= seq; ++pubSeq) + { + uint256 pubHash = ledger->getLedgerHash(pubSeq); + if (pubHash.isZero()) // CHECKME: Should we double-check validations in this case? + pubHash = mLedgerHistory.getLedgerHash(pubSeq); + if (pubHash.isNonZero()) { - uint256 pubHash = ledger->getLedgerHash(pubSeq); - if (pubHash.isZero()) // CHECKME: Should we double-check validations in this case? - pubHash = mLedgerHistory.getLedgerHash(pubSeq); - if (pubHash.isNonZero()) + Ledger::pointer ledger = mLedgerHistory.getLedgerByHash(pubHash); + if (ledger) { - Ledger::pointer ledger = mLedgerHistory.getLedgerByHash(pubHash); - if (ledger) - { - mPubLedgers.push_back(ledger); - mValidLedger = ledger; - mLastValidateSeq = ledger->getLedgerSeq(); - mLastValidateHash = ledger->getHash(); - } + mPubLedgers.push_back(ledger); + mValidLedger = ledger; + mLastValidateSeq = ledger->getLedgerSeq(); + mLastValidateHash = ledger->getHash(); } } } From 07bb2a82ddcfda006a0ce99b1eba13a686f78b6f Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Fri, 4 Jan 2013 19:19:27 +0100 Subject: [PATCH 208/525] Fix typo. Uint vs UInt always trips me up. :/ --- src/js/amount.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/amount.js b/src/js/amount.js index 7af56b991..0191ee6b1 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -265,7 +265,7 @@ UInt160.from_generic = function (j) { UInt160.from_json = function (j) { if ('string' === typeof j) { return (new UInt160()).parse_json(j); - } else if (j instanceof Uint160) { + } else if (j instanceof UInt160) { return j.clone(); } else { return new UInt160(); From 3dfb1ca1eb9b14fcfe644f3febd1a4114e4dc9dc Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 4 Jan 2013 11:56:45 -0800 Subject: [PATCH 209/525] Note problems with account_tx. --- src/cpp/ripple/RPCHandler.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 30d5de75f..65508ba7e 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1296,6 +1296,10 @@ Json::Value RPCHandler::doLedger(Json::Value jvRequest) // { account: , ledger: } // { account: , ledger_min: , ledger_max: } +// THIS ROUTINE DOESN'T SCALE. +// FIXME: Require admin. +// FIXME: Doesn't report database holes. +// FIXME: For consistency change inputs to: ledger_index, ledger_index_min, ledger_index_max. Json::Value RPCHandler::doAccountTransactions(Json::Value jvRequest) { RippleAddress raAccount; From 2746806cd30f176d28c428238fe9e9e6f000322c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 4 Jan 2013 11:57:05 -0800 Subject: [PATCH 210/525] Enable DestinationTag features. --- src/cpp/ripple/AccountSetTransactor.cpp | 6 ------ src/cpp/ripple/LedgerFormats.h | 4 ---- src/cpp/ripple/PaymentTransactor.cpp | 2 -- src/cpp/ripple/SerializeProto.h | 4 ---- src/cpp/ripple/TransactionErr.cpp | 2 -- src/cpp/ripple/TransactionErr.h | 2 -- src/cpp/ripple/TransactionFormats.cpp | 2 -- src/cpp/ripple/TransactionFormats.h | 2 -- 8 files changed, 24 deletions(-) diff --git a/src/cpp/ripple/AccountSetTransactor.cpp b/src/cpp/ripple/AccountSetTransactor.cpp index 7808dcdb6..88c48b246 100644 --- a/src/cpp/ripple/AccountSetTransactor.cpp +++ b/src/cpp/ripple/AccountSetTransactor.cpp @@ -8,21 +8,16 @@ TER AccountSetTransactor::doApply() const uint32 uTxFlags = mTxn.getFlags(); -#if ENABLE_REQUIRE_DEST_TAG const uint32 uFlagsIn = mTxnAccount->getFieldU32(sfFlags); uint32 uFlagsOut = uFlagsIn; if (uTxFlags & tfAccountSetMask) -#else - if (uTxFlags) -#endif { cLog(lsINFO) << "AccountSet: Malformed transaction: Invalid flags set."; return temINVALID_FLAG; } -#if ENABLE_REQUIRE_DEST_TAG // // RequireDestTag // @@ -50,7 +45,6 @@ TER AccountSetTransactor::doApply() if (uFlagsIn != uFlagsOut) mTxnAccount->setFieldU32(sfFlags, uFlagsOut); -#endif // // EmailHash diff --git a/src/cpp/ripple/LedgerFormats.h b/src/cpp/ripple/LedgerFormats.h index 4c2ba9c54..7e575650f 100644 --- a/src/cpp/ripple/LedgerFormats.h +++ b/src/cpp/ripple/LedgerFormats.h @@ -3,8 +3,6 @@ #include "SerializedObject.h" -#define ENABLE_REQUIRE_DEST_TAG 0 - // Used as the type of a transaction or the type of a ledger entry. enum LedgerEntryType { @@ -42,9 +40,7 @@ enum LedgerSpecificFlags { // ltACCOUNT_ROOT lsfPasswordSpent = 0x00010000, // True, if password set fee is spent. -#if ENABLE_REQUIRE_DEST_TAG lsfRequireDestTag = 0x00020000, // True, to require a DestinationTag for payments. -#endif // ltOFFER lsfPassive = 0x00010000, diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index 51dd34649..ac4a7a42c 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -99,14 +99,12 @@ TER PaymentTransactor::doApply() sleDst->setFieldAccount(sfAccount, uDstAccountID); sleDst->setFieldU32(sfSequence, 1); } -#if ENABLE_REQUIRE_DEST_TAG else if ((sleDst->getFlags() & lsfRequireDestTag) && !mTxn.isFieldPresent(sfDestinationTag)) { cLog(lsINFO) << "Payment: Malformed transaction: DestinationTag required."; return temINVALID; } -#endif else { mEngine->entryModify(sleDst); diff --git a/src/cpp/ripple/SerializeProto.h b/src/cpp/ripple/SerializeProto.h index fc6ee038a..a36debe66 100644 --- a/src/cpp/ripple/SerializeProto.h +++ b/src/cpp/ripple/SerializeProto.h @@ -1,8 +1,6 @@ // This is not really a header file, but it can be used as one with // appropriate #define statements. -#define ENABLE_DESTINATION_TAG 0 - // types (common) TYPE(Int16, UINT16, 1) TYPE(Int32, UINT32, 2) @@ -46,9 +44,7 @@ FIELD(TransferRate, UINT32, 11) FIELD(WalletSize, UINT32, 12) FIELD(OwnerCount, UINT32, 13) -#if ENABLE_DESTINATION_TAG FIELD(DestinationTag, UINT32, 14) -#endif // 32-bit integers (uncommon) FIELD(HighQualityIn, UINT32, 16) diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index b02b2c50c..5b8020ad3 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -53,9 +53,7 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temBAD_SEQUENCE, "temBAD_SEQUENCE", "Malformed: Sequence is not in the past." }, { temDST_IS_SRC, "temDST_IS_SRC", "Destination may not be source." }, { temDST_NEEDED, "temDST_NEEDED", "Destination not specified." }, -#if ENABLE_REQUIRE_DEST_TAG { temDST_TAG_NEEDED, "temDST_TAG_NEEDED", "Destination tag required." }, -#endif { temINVALID, "temINVALID", "The transaction is ill-formed." }, { temINVALID_FLAG, "temINVALID_FLAG", "The transaction has an invalid flag." }, { temREDUNDANT, "temREDUNDANT", "Sends same currency to self." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 676a84142..9de5fe065 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -39,9 +39,7 @@ enum TER // aka TransactionEngineResult temBAD_SEQUENCE, temDST_IS_SRC, temDST_NEEDED, -#if ENABLE_REQUIRE_DEST_TAG temDST_TAG_NEEDED, -#endif temINVALID, temINVALID_FLAG, temREDUNDANT, diff --git a/src/cpp/ripple/TransactionFormats.cpp b/src/cpp/ripple/TransactionFormats.cpp index 18c782ad9..effb98369 100644 --- a/src/cpp/ripple/TransactionFormats.cpp +++ b/src/cpp/ripple/TransactionFormats.cpp @@ -55,9 +55,7 @@ static bool TFInit() << SOElement(sfSendMax, SOE_OPTIONAL) << SOElement(sfPaths, SOE_DEFAULT) << SOElement(sfInvoiceID, SOE_OPTIONAL) -#if ENABLE_DESTINATION_TAG << SOElement(sfDestinationTag, SOE_OPTIONAL) -#endif ; DECLARE_TF(Contract, ttCONTRACT) diff --git a/src/cpp/ripple/TransactionFormats.h b/src/cpp/ripple/TransactionFormats.h index ad804ccb9..f761c5c70 100644 --- a/src/cpp/ripple/TransactionFormats.h +++ b/src/cpp/ripple/TransactionFormats.h @@ -59,12 +59,10 @@ const int TransactionMaxLen = 1048576; // Transaction flags. // -#if ENABLE_REQUIRE_DEST_TAG // AccountSet flags: const uint32 tfRequireDestTag = 0x00010000; const uint32 tfOptionalDestTag = 0x00020000; const uint32 tfAccountSetMask = ~(tfRequireDestTag|tfOptionalDestTag); -#endif // OfferCreate flags: const uint32 tfPassive = 0x00010000; From e683f92844c4deb1b9f9fbcbd24a5b7762db71e8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 12:13:58 -0800 Subject: [PATCH 211/525] Fix one case where we stop acquiring historical ledgers after a failure. --- src/cpp/ripple/LedgerMaster.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index db7faa57a..25a856cd1 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -290,7 +290,11 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) } if (mMissingLedger && mMissingLedger->isDone()) + { + if (mMissingLedger->isFailed()) + theApp->getMasterLedgerAcquire().dropLedger(mMissingLedger->getHash()); mMissingLedger.reset(); + } if (mMissingLedger || !theConfig.LEDGER_HISTORY) { From bb6b72fea40fc56dab6fdcc73994ffe9e12aacc0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 15:21:02 -0800 Subject: [PATCH 212/525] Make a "getNeededHashes" function to get the hashes we need to fill in a ledger hole. --- src/cpp/ripple/SHAMap.h | 1 + src/cpp/ripple/SHAMapSync.cpp | 53 ++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/SHAMap.h b/src/cpp/ripple/SHAMap.h index e7d456558..6071603f5 100644 --- a/src/cpp/ripple/SHAMap.h +++ b/src/cpp/ripple/SHAMap.h @@ -413,6 +413,7 @@ public: bool getNodeFat(const SHAMapNode& node, std::vector& nodeIDs, std::list >& rawNode, bool fatRoot, bool fatLeaves); bool getRootNode(Serializer& s, SHANodeFormat format); + void getNeededHashes(std::vector& hashes, int max); SMAddNode addRootNode(const uint256& hash, const std::vector& rootNode, SHANodeFormat format, SHAMapSyncFilter* filter); SMAddNode addRootNode(const std::vector& rootNode, SHANodeFormat format, diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 344e2bdc1..eb5e11b23 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -19,7 +19,7 @@ void SHAMap::getMissingNodes(std::vector& nodeIDs, std::vectorisValid()); - + if (root->isFullBelow()) { clearSynching(); @@ -91,6 +91,57 @@ void SHAMap::getMissingNodes(std::vector& nodeIDs, std::vector& ret, int max) +{ + boost::recursive_mutex::scoped_lock sl(mLock); + + assert(root->isValid()); + + if (root->isFullBelow() || !root->isInner()) + { + clearSynching(); + return; + } + + std::stack stack; + stack.push(root.get()); + + while (!stack.empty()) + { + SHAMapTreeNode* node = stack.top(); + stack.pop(); + + int base = rand() % 256; + bool have_all = false; + for (int ii = 0; ii < 16; ++ii) + { // traverse in semi-random order + int branch = (base + ii) % 16; + if (!node->isEmptyBranch(branch)) + { + SHAMapNode childID = node->getChildNodeID(branch); + const uint256& childHash = node->getChildHash(branch); + SHAMapTreeNode* d; + try + { + d = getNodePointer(childID, childHash); + assert(d); + if (d->isInner() && !d->isFullBelow()) + stack.push(d); + } + catch (SHAMapMissingNode&) + { // node is not in the map + have_all = false; + ret.push_back(childHash); + if (--max <= 0) + return; + } + } + } + if (have_all) + node->setFullBelow(); + } +} + bool SHAMap::getNodeFat(const SHAMapNode& wanted, std::vector& nodeIDs, std::list >& rawNodes, bool fatRoot, bool fatLeaves) { // Gets a node and some of its children From d57b5a9797e2ec4f510ecccdc38e795f9007b36a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 15:21:31 -0800 Subject: [PATCH 213/525] Track failed acquires. Fix a case where an acquire both succeeds and fails. --- src/cpp/ripple/LedgerAcquire.cpp | 54 ++++++++++++++++++++++++++++++-- src/cpp/ripple/LedgerAcquire.h | 6 ++++ src/cpp/ripple/LedgerMaster.cpp | 5 +++ 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 55c539be1..6312d61c4 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -175,18 +175,21 @@ void LedgerAcquire::done() #endif std::vector< boost::function > triggers; - setComplete(); + assert(isComplete() || isFailed()); + mLock.lock(); triggers = mOnComplete; mOnComplete.clear(); mLock.unlock(); - if (mLedger) + if (isComplete() && mLedger) { if (mAccept) mLedger->setAccepted(); theApp->getLedgerMaster().storeLedger(mLedger); } + else if (isFailed()) + theApp->getMasterLedgerAcquire().logFailure(mHash); for (unsigned int i = 0; i < triggers.size(); ++i) triggers[i](shared_from_this()); @@ -528,6 +531,21 @@ LedgerAcquire::pointer LedgerAcquireMaster::find(const uint256& hash) return LedgerAcquire::pointer(); } +std::vector LedgerAcquire::getNeededHashes() +{ + std::vector ret; + if (!mHaveBase) + { + ret.push_back(mHash); + return ret; + } + if (!mHaveState) + mLedger->peekAccountStateMap()->getNeededHashes(ret, 16); + if (!mHaveTransactions) + mLedger->peekTransactionMap()->getNeededHashes(ret, 16); + return ret; +} + bool LedgerAcquireMaster::hasLedger(const uint256& hash) { assert(hash.isNonZero()); @@ -621,4 +639,36 @@ SMAddNode LedgerAcquireMaster::gotLedgerData(ripple::TMLedgerData& packet, Peer: return SMAddNode::invalid(); } +void LedgerAcquireMaster::logFailure(const uint256& hash) +{ + time_t now = time(NULL); + boost::mutex::scoped_lock sl(mLock); + + std::map::iterator it = mRecentFailures.begin(); + while (it != mRecentFailures.end()) + { + if (it->first == hash) + { + it->second = now; + return; + } + if (it->second > now) + { // time jump or discontinuity + it->second = now; + ++it; + } + else if ((it->second + 180) < now) + mRecentFailures.erase(it++); + else + ++it; + } + mRecentFailures[hash] = now; +} + +bool LedgerAcquireMaster::isFailure(const uint256& hash) +{ + boost::mutex::scoped_lock sl(mLock); + return mRecentFailures.find(hash) != mRecentFailures.end(); +} + // vim:ts=4 diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 68753afab..a4b54a3ae 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -108,6 +108,8 @@ public: void trigger(Peer::ref, bool timer); bool tryLocal(); void addPeers(); + + std::vector getNeededHashes(); }; class LedgerAcquireMaster @@ -115,6 +117,7 @@ class LedgerAcquireMaster protected: boost::mutex mLock; std::map mLedgers; + std::map mRecentFailures; public: LedgerAcquireMaster() { ; } @@ -124,6 +127,9 @@ public: bool hasLedger(const uint256& ledgerHash); void dropLedger(const uint256& ledgerHash); SMAddNode gotLedgerData(ripple::TMLedgerData& packet, Peer::ref); + + void logFailure(const uint256&); + bool isFailure(const uint256&); }; #endif diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 25a856cd1..aa63876d1 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -170,6 +170,11 @@ void LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledger mMissingLedger.reset(); return; } + else if (mMissingLedger->isDone()) + { + mMissingLedger.reset(); + return; + } mMissingSeq = ledgerSeq; if (mMissingLedger->setAccept()) mMissingLedger->addOnComplete(boost::bind(&LedgerMaster::missingAcquireComplete, this, _1)); From d998feb13cf2970ed9e1dbb721151fc4f8e153fc Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 15:23:03 -0800 Subject: [PATCH 214/525] Don't start a publish thread if there's nothing to publish. --- src/cpp/ripple/LedgerMaster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index aa63876d1..c8eafcb4c 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -406,7 +406,7 @@ void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) } } - if (!mPubThread) + if (!mPubLedgers.empty() && !mPubThread) { mPubThread = true; theApp->getJobQueue().addJob(jtPUBLEDGER, boost::bind(&LedgerMaster::pubThread, this)); From 217573599dc9c104d1da170cd00a2ca3c609b2e2 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 15:50:16 -0800 Subject: [PATCH 215/525] Be more aggressive in finding ledgers that other nodes want. --- src/cpp/ripple/Ledger.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 3db595c5a..803f24004 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -538,7 +538,24 @@ Ledger::pointer Ledger::loadByHash(const uint256& ledgerHash) std::string sql="SELECT * from Ledgers WHERE LedgerHash='"; sql.append(ledgerHash.GetHex()); sql.append("';"); - return getSQL(sql); + Ledger::pointer ret = getSQL(sql); + if (ret) + return ret; + HashedObject::pointer node = theApp->getHashedObjectStore().retrieve(ledgerHash); + if (!node) + return Ledger::pointer(); + try + { + Ledger::pointer ledger = boost::make_shared(strCopy(node->getData()), true); + if (ledger->getHash() == ledgerHash) + return ledger; + } + catch (...) + { + cLog(lsDEBUG) << "Exception trying to load ledger by hash: " << ledgerHash; + return Ledger::pointer(); + } + return Ledger::pointer(); } Ledger::pointer Ledger::getLastFullLedger() From dfd39949218088ddadd79ed68f2e7c54e109568e Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 4 Jan 2013 16:01:55 -0800 Subject: [PATCH 216/525] Add config option [database_path]. --- rippled-example.cfg | 8 ++++++-- src/cpp/ripple/Config.cpp | 16 ++++++++++------ src/cpp/ripple/Config.h | 3 +++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index c37cd9c0e..43bd2944c 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -102,7 +102,7 @@ # # [websocket_ssl]: # 0 or 1. -# Enable websocket SSL +# Enable websocket SSL. # # [websocket_ssl_key]: # Specify the filename holding the SSL key in PEM format. @@ -128,7 +128,11 @@ # past ledgers to acquire on server startup and the minimum to maintain while # running. Servers that don't need to serve clients can set this to "none". # Servers that want complete history can set this to "full". -# The default is 256 ledgers +# The default is 256 ledgers. +# +# [database_path]: +# Full path of database directory. +# [peer_ip] 0.0.0.0 diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index ff9c161a2..a13e1e0e7 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -13,6 +13,7 @@ #include #define SECTION_ACCOUNT_PROBE_MAX "account_probe_max" +#define SECTION_DATABASE_PATH "database_path" #define SECTION_DEBUG_LOGFILE "debug_logfile" #define SECTION_FEE_DEFAULT "fee_default" #define SECTION_FEE_NICKNAME_CREATE "fee_nickname_create" @@ -142,17 +143,17 @@ void Config::setup(const std::string& strConf, bool bTestNet, bool bQuiet) } } - boost::filesystem::create_directories(DATA_DIR, ec); - - if (ec) - throw std::runtime_error(str(boost::format("Can not create %s") % DATA_DIR)); + // Update default values + load(); // std::cerr << "CONFIG FILE: " << CONFIG_FILE << std::endl; // std::cerr << "CONFIG DIR: " << CONFIG_DIR << std::endl; // std::cerr << "DATA DIR: " << DATA_DIR << std::endl; - // Update default values - load(); + boost::filesystem::create_directories(DATA_DIR, ec); + + if (ec) + throw std::runtime_error(str(boost::format("Can not create %s") % DATA_DIR)); } Config::Config() @@ -259,6 +260,9 @@ void Config::load() SNTP_SERVERS = *smtTmp; } + if (sectionSingleB(secConfig, SECTION_DATABASE_PATH, DATABASE_PATH)) + DATA_DIR = DATABASE_PATH; + (void) sectionSingleB(secConfig, SECTION_VALIDATORS_SITE, VALIDATORS_SITE); (void) sectionSingleB(secConfig, SECTION_PEER_IP, PEER_IP); diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index d43de2a6c..849d18852 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -65,6 +65,9 @@ public: enum StartUpType { FRESH, NORMAL, LOAD, NETWORK }; StartUpType START_UP; + // Database + std::string DATABASE_PATH; + // Network parameters int NETWORK_START_TIME; // The Unix time we start ledger 0. int TRANSACTION_FEE_BASE; // The number of fee units a reference transaction costs From 648f3c4a490cbefa8ad16c689c5dba38422533ce Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 4 Jan 2013 16:08:24 -0800 Subject: [PATCH 217/525] Note domains not allowed for [ips]. --- rippled-example.cfg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 43bd2944c..8b315b528 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -52,10 +52,10 @@ # # [ips]: # Only valid in "rippled.cfg", "ripple.txt", and the referered [ips_url]. -# List of ips where the Ripple protocol is avialable. -# One ipv4 or ipv6 address per line. -# A port may optionally be specified after adding a space to the address. -# By convention, if known, IPs are listed in from most to least trusted. +# List of ips where the Ripple protocol is avialable. Domain names are not +# allowed. One ipv4 or ipv6 address per line. A port may optionally be +# specified after adding a space to the address. By convention, if known, +# IPs are listed in from most to least trusted. # # Examples: # 192.168.0.1 From 0d40531dd76b520e2cd36596933dcc0b797c0d72 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 4 Jan 2013 17:47:54 -0800 Subject: [PATCH 218/525] Remove bad example from rippled-example.cfg. --- rippled-example.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 8b315b528..9f28dab46 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -167,7 +167,7 @@ pool.ntp.org [validation_seed] shh1D4oj5czH3PUEjYES8c7Bay3tE -[unl_default] +[validators_file] validators.txt [ips] From ee89904a00afe3d084984e04f9ac67578c441255 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 20:26:26 -0800 Subject: [PATCH 219/525] Cleanup trigger. --- src/cpp/ripple/LedgerAcquire.cpp | 8 ++++---- src/cpp/ripple/LedgerAcquire.h | 4 ++-- src/cpp/ripple/LedgerConsensus.cpp | 6 +++--- src/cpp/ripple/LedgerConsensus.h | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 6312d61c4..6bd537ab9 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -135,7 +135,7 @@ void LedgerAcquire::onTimer(bool progress) if (!getPeerCount()) addPeers(); else - trigger(Peer::pointer(), true); + trigger(Peer::pointer()); } } @@ -202,7 +202,7 @@ void LedgerAcquire::addOnComplete(boost::function mLock.unlock(); } -void LedgerAcquire::trigger(Peer::ref peer, bool timer) +void LedgerAcquire::trigger(Peer::ref peer) { if (mAborted || mComplete || mFailed) { @@ -599,7 +599,7 @@ SMAddNode LedgerAcquireMaster::gotLedgerData(ripple::TMLedgerData& packet, Peer: { cLog(lsWARNING) << "Included TXbase invalid"; } - ledger->trigger(peer, false); + ledger->trigger(peer); return san; } @@ -631,7 +631,7 @@ SMAddNode LedgerAcquireMaster::gotLedgerData(ripple::TMLedgerData& packet, Peer: else ledger->takeAsNode(nodeIDs, nodeData, ret); if (!ret.isInvalid()) - ledger->trigger(peer, false); + ledger->trigger(peer); return ret; } diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index a4b54a3ae..779976607 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -80,7 +80,7 @@ protected: void done(); void onTimer(bool progress); - void newPeer(Peer::ref peer) { trigger(peer, false); } + void newPeer(Peer::ref peer) { trigger(peer); } boost::weak_ptr pmDowncast(); @@ -105,7 +105,7 @@ public: bool takeAsNode(const std::list& IDs, const std::list >& data, SMAddNode&); bool takeAsRootNode(const std::vector& data, SMAddNode&); - void trigger(Peer::ref, bool timer); + void trigger(Peer::ref); bool tryLocal(); void addPeers(); diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 09de20131..f0579b3b6 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -69,7 +69,7 @@ void TransactionAcquire::onTimer(bool progress) } } else if (!progress) - trigger(Peer::pointer(), true); + trigger(Peer::pointer()); } boost::weak_ptr TransactionAcquire::pmDowncast() @@ -77,7 +77,7 @@ boost::weak_ptr TransactionAcquire::pmDowncast() return boost::shared_polymorphic_downcast(shared_from_this()); } -void TransactionAcquire::trigger(Peer::ref peer, bool timer) +void TransactionAcquire::trigger(Peer::ref peer) { if (mComplete || mFailed) { @@ -166,7 +166,7 @@ SMAddNode TransactionAcquire::takeNodes(const std::list& nodeIDs, ++nodeIDit; ++nodeDatait; } - trigger(peer, false); + trigger(peer); progress(); return SMAddNode::useful(); } diff --git a/src/cpp/ripple/LedgerConsensus.h b/src/cpp/ripple/LedgerConsensus.h index 240cc3229..7890d2094 100644 --- a/src/cpp/ripple/LedgerConsensus.h +++ b/src/cpp/ripple/LedgerConsensus.h @@ -32,10 +32,10 @@ protected: bool mHaveRoot; void onTimer(bool progress); - void newPeer(Peer::ref peer) { trigger(peer, false); } + void newPeer(Peer::ref peer) { trigger(peer); } void done(); - void trigger(Peer::ref, bool timer); + void trigger(Peer::ref); boost::weak_ptr pmDowncast(); public: From f666003977aad4852bc2da8af85cd9b215f0e08d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 20:42:31 -0800 Subject: [PATCH 220/525] TMGetObjectByHash needs to know the object type. --- src/cpp/ripple/LedgerAcquire.cpp | 32 +++++++++++++++++++++++++++----- src/cpp/ripple/LedgerAcquire.h | 3 ++- src/cpp/ripple/SHAMap.h | 2 +- src/cpp/ripple/SHAMapSync.cpp | 8 +++++--- 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 6bd537ab9..dcaff39f3 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -226,8 +226,22 @@ void LedgerAcquire::trigger(Peer::ref peer) ripple::TMGetLedger tmGL; tmGL.set_ledgerhash(mHash.begin(), mHash.size()); if (getTimeouts() != 0) + { tmGL.set_querytype(ripple::qtINDIRECT); +#if 0 + if (!isProgress()) + { + std::vector< std::pair > need = getNeededHashes(); + if (!need.empty()) + { + ripple::TMGetObjectByHash tmBH; + tmBH. + } + } +#endif + } + if (!mHaveBase) { tmGL.set_itype(ripple::liBASE); @@ -531,18 +545,26 @@ LedgerAcquire::pointer LedgerAcquireMaster::find(const uint256& hash) return LedgerAcquire::pointer(); } -std::vector LedgerAcquire::getNeededHashes() +std::vector< std::pair > LedgerAcquire::getNeededHashes() { - std::vector ret; + std::vector< std::pair > ret; if (!mHaveBase) { - ret.push_back(mHash); + ret.push_back(std::make_pair(ripple::TMGetObjectByHash::otLEDGER, mHash)); return ret; } if (!mHaveState) - mLedger->peekAccountStateMap()->getNeededHashes(ret, 16); + { + std::vector v = mLedger->peekAccountStateMap()->getNeededHashes(16); + BOOST_FOREACH(const uint256& h, v) + ret.push_back(std::make_pair(ripple::TMGetObjectByHash::otSTATE_NODE, h)); + } if (!mHaveTransactions) - mLedger->peekTransactionMap()->getNeededHashes(ret, 16); + { + std::vector v = mLedger->peekTransactionMap()->getNeededHashes(16); + BOOST_FOREACH(const uint256& h, v) + ret.push_back(std::make_pair(ripple::TMGetObjectByHash::otTRANSACTION_NODE, h)); + } return ret; } diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 779976607..da79bb308 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -44,6 +44,7 @@ public: int getTimeouts() const { return mTimeouts; } void progress() { mProgress = true; } + bool isProgress() { return mProgress; } void peerHas(Peer::ref); void badPeer(Peer::ref); @@ -109,7 +110,7 @@ public: bool tryLocal(); void addPeers(); - std::vector getNeededHashes(); + std::vector< std::pair > getNeededHashes(); }; class LedgerAcquireMaster diff --git a/src/cpp/ripple/SHAMap.h b/src/cpp/ripple/SHAMap.h index 6071603f5..2c1a444af 100644 --- a/src/cpp/ripple/SHAMap.h +++ b/src/cpp/ripple/SHAMap.h @@ -413,7 +413,7 @@ public: bool getNodeFat(const SHAMapNode& node, std::vector& nodeIDs, std::list >& rawNode, bool fatRoot, bool fatLeaves); bool getRootNode(Serializer& s, SHANodeFormat format); - void getNeededHashes(std::vector& hashes, int max); + std::vector getNeededHashes(int max); SMAddNode addRootNode(const uint256& hash, const std::vector& rootNode, SHANodeFormat format, SHAMapSyncFilter* filter); SMAddNode addRootNode(const std::vector& rootNode, SHANodeFormat format, diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index eb5e11b23..4ac682fe8 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -91,8 +91,9 @@ void SHAMap::getMissingNodes(std::vector& nodeIDs, std::vector& ret, int max) +std::vector SHAMap::getNeededHashes(int max) { + std::vector ret; boost::recursive_mutex::scoped_lock sl(mLock); assert(root->isValid()); @@ -100,7 +101,7 @@ void SHAMap::getNeededHashes(std::vector& ret, int max) if (root->isFullBelow() || !root->isInner()) { clearSynching(); - return; + return ret; } std::stack stack; @@ -133,13 +134,14 @@ void SHAMap::getNeededHashes(std::vector& ret, int max) have_all = false; ret.push_back(childHash); if (--max <= 0) - return; + return ret; } } } if (have_all) node->setFullBelow(); } + return ret; } bool SHAMap::getNodeFat(const SHAMapNode& wanted, std::vector& nodeIDs, From cb6f73cc8938eb98110045bff2594cd27911a4ec Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 20:58:07 -0800 Subject: [PATCH 221/525] Some cleanups and some additional code (currently disabled) toward acquire by pure hash. --- src/cpp/ripple/LedgerAcquire.cpp | 27 +++++++++++++++++++++++---- src/cpp/ripple/LedgerAcquire.h | 3 ++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index dcaff39f3..632d6d7fa 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -232,14 +232,33 @@ void LedgerAcquire::trigger(Peer::ref peer) #if 0 if (!isProgress()) { - std::vector< std::pair > need = getNeededHashes(); + std::vector need = getNeededHashes(); if (!need.empty()) { ripple::TMGetObjectByHash tmBH; - tmBH. + tmBH.set_ledgerhash(mHash.begin(), mHash.size()); + bool typeSet = false; + BOOST_FOREACH(neededHash_t& p, need) + { + if (!typeSet) + { + tmBH.set_type(p.first); + typeSet = true; + } + if (p.first == tmBH.type()) + { + // WRITEME: Approve this hash for local inclusion + ripple::TMIndexedObject *io = tmBH.add_objects(); + io->set_hash(p.second.begin(), p.second.size()); + } + } + + // WRITEME: Do something with this object + } } #endif + } if (!mHaveBase) @@ -545,9 +564,9 @@ LedgerAcquire::pointer LedgerAcquireMaster::find(const uint256& hash) return LedgerAcquire::pointer(); } -std::vector< std::pair > LedgerAcquire::getNeededHashes() +std::vector LedgerAcquire::getNeededHashes() { - std::vector< std::pair > ret; + std::vector ret; if (!mHaveBase) { ret.push_back(std::make_pair(ripple::TMGetObjectByHash::otLEDGER, mHash)); diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index da79bb308..569ec02af 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -110,7 +110,8 @@ public: bool tryLocal(); void addPeers(); - std::vector< std::pair > getNeededHashes(); + typedef std::pair neededHash_t; + std::vector getNeededHashes(); }; class LedgerAcquireMaster From dfbd640f6cb94977b9f86f30d94dba2db0b16429 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 4 Jan 2013 22:14:53 -0800 Subject: [PATCH 222/525] Complete the fetch by hash logic, including tracking the hashes we want. --- src/cpp/ripple/LedgerAcquire.cpp | 24 ++++++++++++++++------ src/cpp/ripple/LoadManager.cpp | 1 + src/cpp/ripple/LoadManager.h | 1 + src/cpp/ripple/NetworkOPs.cpp | 12 +++++++++++ src/cpp/ripple/NetworkOPs.h | 6 ++++++ src/cpp/ripple/Peer.cpp | 34 +++++++++++++++++++++++++++++++- 6 files changed, 71 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 632d6d7fa..4d3ab2625 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -229,14 +229,16 @@ void LedgerAcquire::trigger(Peer::ref peer) { tmGL.set_querytype(ripple::qtINDIRECT); -#if 0 if (!isProgress()) { std::vector need = getNeededHashes(); if (!need.empty()) { ripple::TMGetObjectByHash tmBH; + tmBH.set_query(true); tmBH.set_ledgerhash(mHash.begin(), mHash.size()); + if (mHaveBase) + tmBH.set_seq(mLedger->getLedgerSeq()); bool typeSet = false; BOOST_FOREACH(neededHash_t& p, need) { @@ -247,17 +249,27 @@ void LedgerAcquire::trigger(Peer::ref peer) } if (p.first == tmBH.type()) { - // WRITEME: Approve this hash for local inclusion + theApp->getOPs().addWantedHash(p.second); ripple::TMIndexedObject *io = tmBH.add_objects(); io->set_hash(p.second.begin(), p.second.size()); } } - - // WRITEME: Do something with this object - + PackedMessage::pointer packet = boost::make_shared(tmBH, ripple::mtGET_OBJECTS); + if (peer) + peer->sendPacket(packet); + else + { + boost::recursive_mutex::scoped_lock sl(mLock); + for (boost::unordered_map::iterator it = mPeers.begin(), end = mPeers.end(); + it != end; ++it) + { + Peer::pointer iPeer = theApp->getConnectionPool().getPeerById(it->first); + if (iPeer) + iPeer->sendPacket(packet); + } + } } } -#endif } diff --git a/src/cpp/ripple/LoadManager.cpp b/src/cpp/ripple/LoadManager.cpp index 5eb9b8e5f..daacb5215 100644 --- a/src/cpp/ripple/LoadManager.cpp +++ b/src/cpp/ripple/LoadManager.cpp @@ -15,6 +15,7 @@ LoadManager::LoadManager(int creditRate, int creditLimit, int debitWarn, int deb addLoadCost(LoadCost(LT_RequestNoReply, 1, LC_CPU | LC_Disk)); addLoadCost(LoadCost(LT_InvalidSignature, 100, LC_CPU)); addLoadCost(LoadCost(LT_UnwantedData, 5, LC_CPU | LC_Network)); + addLoadCost(LoadCost(LT_BadData, 20, LC_CPU)); addLoadCost(LoadCost(LT_NewTrusted, 10, 0)); addLoadCost(LoadCost(LT_NewTransaction, 2, 0)); diff --git a/src/cpp/ripple/LoadManager.h b/src/cpp/ripple/LoadManager.h index 22baff69a..0cecd6c1e 100644 --- a/src/cpp/ripple/LoadManager.h +++ b/src/cpp/ripple/LoadManager.h @@ -18,6 +18,7 @@ enum LoadType LT_InvalidSignature, // An object whose signature we had to check and it failed LT_UnwantedData, // Data we have no use for LT_BadPoW, // Proof of work not valid + LT_BadData, // Data we have to verify before rejecting // Good things LT_NewTrusted, // A new transaction/validation/proposal we trust diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index fc10d0236..13e917e56 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -100,6 +100,18 @@ bool NetworkOPs::haveLedgerRange(uint32 from, uint32 to) return mLedgerMaster->haveLedgerRange(from, to); } +bool NetworkOPs::addWantedHash(const uint256& h) +{ + boost::recursive_mutex::scoped_lock sl(mWantedHashLock); + return mWantedHashes.insert(h).second; +} + +bool NetworkOPs::isWantedHash(const uint256& h, bool remove) +{ + boost::recursive_mutex::scoped_lock sl(mWantedHashLock); + return (remove ? mWantedHashes.erase(h) : mWantedHashes.count(h)) != 0; +} + void NetworkOPs::submitTransaction(Job&, SerializedTransaction::pointer iTrans, stCallback callback) { // this is an asynchronous interface Serializer s; diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 180a06ff8..0bc53601b 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -108,6 +108,9 @@ protected: boost::unordered_set mSubTransactions; // all accepted transactions boost::unordered_set mSubRTTransactions; // all proposed and accepted transactions + boost::recursive_mutex mWantedHashLock; + boost::unordered_set mWantedHashes; + void setMode(OperatingMode); Json::Value transJson(const SerializedTransaction& stTxn, TER terResult, bool bAccepted, Ledger::ref lpCurrent, const std::string& strType); @@ -245,6 +248,9 @@ public: void storeProposal(const LedgerProposal::pointer& proposal, const RippleAddress& peerPublic); uint256 getConsensusLCL(); + bool addWantedHash(const uint256& h); + bool isWantedHash(const uint256& h, bool remove); + // client information retrieval functions std::vector< std::pair > getAccountTxs(const RippleAddress& account, uint32 minLedger, uint32 maxLedger); diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index c1b3676ab..d3fbd0e9c 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1111,6 +1111,8 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) newObj.set_data(&hObj->getData().front(), hObj->getData().size()); if (obj.has_nodeid()) newObj.set_index(obj.nodeid()); + if (!packet.has_seq() && (hObj->getIndex() != 0)) + packet.set_seq(hObj->getIndex()); } } } @@ -1119,7 +1121,37 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) } else { // this is a reply - // WRITEME + uint32 seq = packet.has_seq() ? packet.seq() : 0; + HashedObjectType type; + switch (packet.type()) + { + case ripple::TMGetObjectByHash::otLEDGER: type = hotLEDGER; break; + case ripple::TMGetObjectByHash::otTRANSACTION: type = hotTRANSACTION; break; + case ripple::TMGetObjectByHash::otSTATE_NODE: type = hotACCOUNT_NODE; break; + case ripple::TMGetObjectByHash::otTRANSACTION_NODE: type = hotTRANSACTION_NODE; break; + default: type = hotUNKNOWN; + } + for (int i = 0; i < packet.objects_size(); ++i) + { + const ripple::TMIndexedObject& obj = packet.objects(i); + if (obj.has_hash() && (obj.hash().size() == (256/8))) + { + uint256 hash; + memcpy(hash.begin(), obj.hash().data(), 256 / 8); + if (theApp->getOPs().isWantedHash(hash, true)) + { + std::vector data(obj.data().begin(), obj.data().end()); + if (Serializer::getSHA512Half(data) != hash) + { + cLog(lsWARNING) << "Bad hash in data from peer"; + theApp->getOPs().addWantedHash(hash); + punishPeer(LT_BadData); + } + else + theApp->getHashedObjectStore().store(type, seq, data, hash); + } + } + } } } From 53f900fbe17d8d69cb251cf6235fb5eb141838de Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 4 Jan 2013 22:29:46 -0800 Subject: [PATCH 223/525] JS: Fix saving fee info. --- src/js/remote.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/js/remote.js b/src/js/remote.js index 76b27f718..8207d1971 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -209,8 +209,8 @@ var Remote = function (opts, trace) { this._load_base = 256; this._load_fee = 256; - this._load_base = undefined; - this._load_fee = undefined; + this._fee_ref = undefined; + this._fee_base = undefined; this._reserve_base = undefined; this._reserve_inc = undefined; this._server_status = undefined; @@ -877,8 +877,8 @@ Remote.prototype._server_subscribe = function () { // FIXME Use this to estimate fee. self._load_base = message.load_base || 256; self._load_fee = message.load_fee || 256; - self._load_base = message.fee_ref; - self._load_fee = message.fee_base; + self._fee_ref = message.fee_ref; + self._fee_base = message.fee_base; self._reserve_base = message.reverse_base; self._reserve_inc = message.reserve_inc; self._server_status = message.server_status; From b912eeb0afebce8f213345da04b69a86c64daa7f Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 5 Jan 2013 15:33:31 -0800 Subject: [PATCH 224/525] Add on_send_empty() to websockettpp. --- src/cpp/websocketpp/src/connection.hpp | 6 ++++-- src/cpp/websocketpp/src/roles/server.hpp | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cpp/websocketpp/src/connection.hpp b/src/cpp/websocketpp/src/connection.hpp index a21605955..53f37a559 100644 --- a/src/cpp/websocketpp/src/connection.hpp +++ b/src/cpp/websocketpp/src/connection.hpp @@ -1225,7 +1225,9 @@ public: alog()->at(log::alevel::DEBUG_CLOSE) << "Exit after inturrupt" << log::endl; terminate(false); - } + } else { + m_handler->on_send_empty(type::shared_from_this()); + } } } @@ -1267,7 +1269,7 @@ public: if (m_write_queue.size() == 0) { alog()->at(log::alevel::DEBUG_CLOSE) << "handle_write called with empty queue" << log::endl; - return; + return; } m_write_buffer -= m_write_queue.front()->get_payload().size(); diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index e256a5d44..270a478a0 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -189,6 +189,8 @@ public: virtual void on_pong(connection_ptr con,std::string) {} virtual void on_pong_timeout(connection_ptr con,std::string) {} virtual void http(connection_ptr con) {} + + virtual void on_send_empty(connection_ptr con) {} }; server(boost::asio::io_service& m) From 04c17ac1f39749b271ee9554f2853709618758ab Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 5 Jan 2013 16:51:45 -0800 Subject: [PATCH 225/525] Work toward subscribe accounts by ledger index. --- src/cpp/ripple/NetworkOPs.cpp | 55 ++++++++++++++++++++++++----------- src/cpp/ripple/NetworkOPs.h | 20 +++++++------ src/cpp/ripple/RPCHandler.cpp | 41 +++++++++----------------- src/cpp/ripple/WSHandler.h | 16 ++++++++++ src/js/remote.js | 2 ++ 5 files changed, 80 insertions(+), 54 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 13e917e56..cc5287983 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -27,6 +27,11 @@ SETUP_LOG(); DECLARE_INSTANCE(InfoSub); +void InfoSub::onSendEmpty() +{ + +} + NetworkOPs::NetworkOPs(boost::asio::io_service& io_service, LedgerMaster* pLedgerMaster) : mMode(omDISCONNECTED), mNeedNetworkLedger(false), mNetTimer(io_service), mLedgerMaster(pLedgerMaster), mCloseTimeOffset(0), mLastCloseProposers(0), mLastCloseConvergeTime(1000 * LEDGER_IDLE_INTERVAL), @@ -1189,7 +1194,7 @@ void NetworkOPs::pubLedger(Ledger::ref lpAccepted) } } - // we don't lock since pubAcceptedTransaction is locking + // Don't lock since pubAcceptedTransaction is locking. if (!mSubTransactions.empty() || !mSubRTTransactions.empty() || !mSubAccount.empty() || !mSubRTAccount.empty() || !mSubmitMap.empty() ) { SHAMap& txSet = *lpAccepted->peekTransactionMap(); @@ -1241,10 +1246,12 @@ Json::Value NetworkOPs::transJson(const SerializedTransaction& stTxn, TER terRes void NetworkOPs::pubAcceptedTransaction(Ledger::ref lpCurrent, const SerializedTransaction& stTxn, TER terResult,TransactionMetaSet::pointer& meta) { Json::Value jvObj = transJson(stTxn, terResult, true, lpCurrent, "transaction"); - if(meta) jvObj["meta"]=meta->getJson(0); + + if (meta) jvObj["meta"] = meta->getJson(0); { boost::recursive_mutex::scoped_lock sl(mMonitorLock); + BOOST_FOREACH(InfoSub* ispListener, mSubTransactions) { ispListener->send(jvObj); @@ -1256,22 +1263,22 @@ void NetworkOPs::pubAcceptedTransaction(Ledger::ref lpCurrent, const SerializedT } } - pubAccountTransaction(lpCurrent,stTxn,terResult,true,meta); + pubAccountTransaction(lpCurrent, stTxn, terResult, true, meta); } - -void NetworkOPs::pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTransaction& stTxn, TER terResult, bool bAccepted,TransactionMetaSet::pointer& meta) +void NetworkOPs::pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTransaction& stTxn, TER terResult, bool bAccepted, TransactionMetaSet::pointer& meta) { boost::unordered_set notify; { boost::recursive_mutex::scoped_lock sl(mMonitorLock); - if(!bAccepted && mSubRTAccount.empty()) return; + if (!bAccepted && mSubRTAccount.empty()) return; if (!mSubAccount.empty() || (!mSubRTAccount.empty()) ) { typedef std::map::value_type AccountPair; + BOOST_FOREACH(const AccountPair& affectedAccount, getAffectedAccounts(stTxn)) { subInfoMapIterator simiIt = mSubRTAccount.find(affectedAccount.first.getAccountID()); @@ -1283,7 +1290,8 @@ void NetworkOPs::pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTr notify.insert(ispListener); } } - if(bAccepted) + + if (bAccepted) { simiIt = mSubAccount.find(affectedAccount.first.getAccountID()); @@ -1302,7 +1310,8 @@ void NetworkOPs::pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTr if (!notify.empty()) { Json::Value jvObj = transJson(stTxn, terResult, bAccepted, lpCurrent, "account"); - if(meta) jvObj["meta"]=meta->getJson(0); + + if (meta) jvObj["meta"] = meta->getJson(0); BOOST_FOREACH(InfoSub* ispListener, notify) { @@ -1344,12 +1353,15 @@ std::map NetworkOPs::getAffectedAccounts(const SerializedTra // Monitoring // - - -void NetworkOPs::subAccount(InfoSub* ispListener, const boost::unordered_set& vnaAccountIDs,bool rt) +void NetworkOPs::subAccount(InfoSub* ispListener, const boost::unordered_set& vnaAccountIDs, uint32 uLedgerIndex, bool rt) { - subInfoMapType& subMap=mSubAccount; - if(rt) subMap=mSubRTAccount; + subInfoMapType& subMap = rt ? mSubRTAccount : mSubAccount; + + // For the connection, monitor each account. + BOOST_FOREACH(const RippleAddress& naAccountID, vnaAccountIDs) + { + ispListener->insertSubAccountInfo(naAccountID, uLedgerIndex); + } boost::recursive_mutex::scoped_lock sl(mMonitorLock); @@ -1358,7 +1370,7 @@ void NetworkOPs::subAccount(InfoSub* ispListener, const boost::unordered_set usisElement; usisElement.insert(ispListener); @@ -1366,21 +1378,30 @@ void NetworkOPs::subAccount(InfoSub* ispListener, const boost::unordered_setsecond.insert(ispListener); } } } -void NetworkOPs::unsubAccount(InfoSub* ispListener, const boost::unordered_set& vnaAccountIDs,bool rt) +void NetworkOPs::unsubAccount(InfoSub* ispListener, const boost::unordered_set& vnaAccountIDs, bool rt) { - subInfoMapType& subMap= rt ? mSubRTAccount : mSubAccount; + subInfoMapType& subMap = rt ? mSubRTAccount : mSubAccount; + + // For the connection, unmonitor each account. + // FIXME: Don't we need to unsub? + // BOOST_FOREACH(const RippleAddress& naAccountID, vnaAccountIDs) + // { + // ispListener->deleteSubAccountInfo(naAccountID); + // } boost::recursive_mutex::scoped_lock sl(mMonitorLock); BOOST_FOREACH(const RippleAddress& naAccountID, vnaAccountIDs) { subInfoMapType::iterator simIterator = subMap.find(naAccountID.getAccountID()); + + if (simIterator == mSubAccount.end()) { // Not found. Done. diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 0bc53601b..66d757ffa 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -26,12 +26,6 @@ class RPCSub; class InfoSub : public IS_INSTANCE(InfoSub) { -public: - - virtual ~InfoSub(); - - virtual void send(const Json::Value& jvObj) = 0; - protected: boost::unordered_set mSubAccountInfo; boost::unordered_set mSubAccountTransaction; @@ -39,9 +33,17 @@ protected: boost::mutex mLockInfo; public: - void insertSubAccountInfo(RippleAddress addr) + + virtual ~InfoSub(); + + virtual void send(const Json::Value& jvObj) = 0; + + void onSendEmpty(); + + void insertSubAccountInfo(RippleAddress addr, uint32 uLedgerIndex) { boost::mutex::scoped_lock sl(mLockInfo); + mSubAccountInfo.insert(addr); } }; @@ -267,8 +269,8 @@ public: // // Monitoring: subscriber side // - void subAccount(InfoSub* ispListener, const boost::unordered_set& vnaAccountIDs,bool rt); - void unsubAccount(InfoSub* ispListener, const boost::unordered_set& vnaAccountIDs,bool rt); + void subAccount(InfoSub* ispListener, const boost::unordered_set& vnaAccountIDs, uint32 uLedgerIndex, bool rt); + void unsubAccount(InfoSub* ispListener, const boost::unordered_set& vnaAccountIDs, bool rt); bool subLedger(InfoSub* ispListener, Json::Value& jvResult); bool unsubLedger(InfoSub* ispListener); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 65508ba7e..cc64c1280 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -514,7 +514,7 @@ Json::Value RPCHandler::doProfile(Json::Value jvRequest) STAmount(uCurrencyOfferB, naAccountB.getAccountID(), 1+n), // saTakerGets 0); // uExpiration - if(bSubmit) + if (bSubmit) tpOfferA = mNetOps->submitTransactionSync(tpOfferA); // FIXME: Don't use synch interface } @@ -1194,7 +1194,7 @@ Json::Value RPCHandler::doTxHistory(Json::Value jvRequest) SQL_FOREACH(db, sql) { Transaction::pointer trans=Transaction::transactionFromSQL(db, false); - if(trans) txs.append(trans->getJson(0)); + if (trans) txs.append(trans->getJson(0)); } } @@ -1344,8 +1344,10 @@ Json::Value RPCHandler::doAccountTransactions(Json::Value jvRequest) for (std::vector< std::pair >::iterator it = txns.begin(), end = txns.end(); it != end; ++it) { Json::Value obj(Json::objectValue); - if(it->first) obj["tx"]=it->first->getJson(1); - if(it->second) obj["meta"]=it->second->getJson(0); + + if (it->first) obj["tx"] = it->first->getJson(1); + if (it->second) obj["meta"] = it->second->getJson(0); + ret["transactions"].append(obj); } return ret; @@ -2149,6 +2151,9 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) { InfoSub* ispSub; Json::Value jvResult(Json::objectValue); + uint32 uLedgerIndex = jvRequest.isMember("ledger_index") && jvRequest["ledger_index"].isNumeric() + ? jvRequest["ledger_index"].asUInt() + : 0; if (!mInfoSub && !jvRequest.isMember("url")) { @@ -2235,12 +2240,7 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) } else { - BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds) - { - ispSub->insertSubAccountInfo(naAccountID); - } - - mNetOps->subAccount(ispSub, usnaAccoundIds, true); + mNetOps->subAccount(ispSub, usnaAccoundIds, uLedgerIndex, true); } } @@ -2254,12 +2254,7 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) } else { - BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds) - { - ispSub->insertSubAccountInfo(naAccountID); - } - - mNetOps->subAccount(ispSub, usnaAccoundIds, false); + mNetOps->subAccount(ispSub, usnaAccoundIds, uLedgerIndex, false); } } @@ -2342,12 +2337,7 @@ Json::Value RPCHandler::doUnsubscribe(Json::Value jvRequest) } else { - BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds) - { - ispSub->insertSubAccountInfo(naAccountID); - } - - mNetOps->unsubAccount(ispSub, usnaAccoundIds,true); + mNetOps->unsubAccount(ispSub, usnaAccoundIds, true); } } @@ -2361,12 +2351,7 @@ Json::Value RPCHandler::doUnsubscribe(Json::Value jvRequest) } else { - BOOST_FOREACH(const RippleAddress& naAccountID, usnaAccoundIds) - { - ispSub->insertSubAccountInfo(naAccountID); - } - - mNetOps->unsubAccount(ispSub, usnaAccoundIds,false); + mNetOps->unsubAccount(ispSub, usnaAccoundIds, false); } } diff --git a/src/cpp/ripple/WSHandler.h b/src/cpp/ripple/WSHandler.h index ed6e4ba0d..887303b29 100644 --- a/src/cpp/ripple/WSHandler.h +++ b/src/cpp/ripple/WSHandler.h @@ -103,6 +103,22 @@ public: } } + void on_send_empty(connection_ptr cpClient) + { + typedef boost::shared_ptr< WSConnection > wsc_ptr; + + wsc_ptr ptr; + { + boost::mutex::scoped_lock sl(mMapLock); + typename boost::unordered_map::iterator it = mMap.find(cpClient); + if (it == mMap.end()) + return; + ptr = it->second; + } + + ptr->onSendEmpty(); + } + void on_open(connection_ptr cpClient) { boost::mutex::scoped_lock sl(mMapLock); diff --git a/src/js/remote.js b/src/js/remote.js index 8207d1971..e64a26671 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -687,6 +687,7 @@ Remote.prototype.request_ledger_entry = function (type) { return request; }; +// .accounts(accounts, realtime) Remote.prototype.request_subscribe = function (streams) { var request = new Request(this, 'subscribe'); @@ -700,6 +701,7 @@ Remote.prototype.request_subscribe = function (streams) { return request; }; +// .accounts(accounts, realtime) Remote.prototype.request_unsubscribe = function (streams) { var request = new Request(this, 'unsubscribe'); From 8877501e5b61b32ace770a527db969c969e4de32 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 02:08:54 -0800 Subject: [PATCH 226/525] Remove db->escape in favor of sqlEscape. --- src/cpp/database/SqliteDatabase.cpp | 45 +++++++----------------- src/cpp/database/SqliteDatabase.h | 2 -- src/cpp/database/database.cpp | 8 ----- src/cpp/database/database.h | 3 -- src/cpp/ripple/ConnectionPool.cpp | 10 +++--- src/cpp/ripple/HashedObject.cpp | 5 ++- src/cpp/ripple/HashedObject.h | 3 +- src/cpp/ripple/PubKeyCache.cpp | 5 ++- src/cpp/ripple/SerializedTransaction.cpp | 10 +++--- src/cpp/ripple/UniqueNodeList.cpp | 24 ++++++------- src/cpp/ripple/ValidationCollection.cpp | 2 +- src/cpp/ripple/Wallet.cpp | 8 ++--- 12 files changed, 45 insertions(+), 80 deletions(-) diff --git a/src/cpp/database/SqliteDatabase.cpp b/src/cpp/database/SqliteDatabase.cpp index cbefe8759..14dd0bbc5 100644 --- a/src/cpp/database/SqliteDatabase.cpp +++ b/src/cpp/database/SqliteDatabase.cpp @@ -8,14 +8,14 @@ using namespace std; SqliteDatabase::SqliteDatabase(const char* host) : Database(host,"","") { - mConnection=NULL; - mCurrentStmt=NULL; + mConnection = NULL; + mCurrentStmt = NULL; } void SqliteDatabase::connect() { int rc = sqlite3_open(mHost.c_str(), &mConnection); - if( rc ) + if (rc) { cout << "Can't open database: " << mHost << " " << rc << endl; sqlite3_close(mConnection); @@ -32,8 +32,10 @@ void SqliteDatabase::disconnect() bool SqliteDatabase::executeSQL(const char* sql, bool fail_ok) { sqlite3_finalize(mCurrentStmt); + int rc = sqlite3_prepare_v2(mConnection, sql, -1, &mCurrentStmt, NULL); - if (rc != SQLITE_OK ) + + if (SQLITE_OK != rc) { if (!fail_ok) { @@ -57,6 +59,7 @@ bool SqliteDatabase::executeSQL(const char* sql, bool fail_ok) else { mMoreRows = false; + if (!fail_ok) { #ifdef DEBUG @@ -106,16 +109,18 @@ void SqliteDatabase::endIterRows() // will return false if there are no more rows bool SqliteDatabase::getNextRow() { - if(!mMoreRows) return(false); + if (!mMoreRows) return(false); int rc=sqlite3_step(mCurrentStmt); - if(rc==SQLITE_ROW) + if (rc==SQLITE_ROW) { return(true); - }else if(rc==SQLITE_DONE) + } + else if (rc==SQLITE_DONE) { return(false); - }else + } + else { cout << "SQL Rerror:" << rc << endl; return(false); @@ -174,28 +179,4 @@ uint64 SqliteDatabase::getBigInt(int colIndex) return(sqlite3_column_int64(mCurrentStmt, colIndex)); } - -/* http://www.sqlite.org/lang_expr.html -BLOB literals are string literals containing hexadecimal data and preceded by a single "x" or "X" character. For example: -X'53514C697465' -*/ -void SqliteDatabase::escape(const unsigned char* start, int size, std::string& retStr) -{ - static const char toHex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'A', 'B', 'C', 'D', 'E', 'F' }; - - retStr.resize(3 + (size * 2)); - - int pos = 0; - retStr[pos++] = 'X'; - retStr[pos++] = '\''; - - for (int n = 0; n < size; ++n) - { - retStr[pos++] = toHex[start[n] >> 4]; - retStr[pos++] = toHex[start[n] & 0x0f]; - } - retStr[pos] = '\''; -} - // vim:ts=4 diff --git a/src/cpp/database/SqliteDatabase.h b/src/cpp/database/SqliteDatabase.h index 8ba9d796b..a3e7d6257 100644 --- a/src/cpp/database/SqliteDatabase.h +++ b/src/cpp/database/SqliteDatabase.h @@ -38,8 +38,6 @@ public: int getBinary(int colIndex,unsigned char* buf,int maxSize); std::vector getBinary(int colIndex); uint64 getBigInt(int colIndex); - - void escape(const unsigned char* start,int size,std::string& retStr); }; // vim:ts=4 diff --git a/src/cpp/database/database.cpp b/src/cpp/database/database.cpp index 725af6a2f..7958814e5 100644 --- a/src/cpp/database/database.cpp +++ b/src/cpp/database/database.cpp @@ -185,12 +185,4 @@ char* Database::getSingleDBValueStr(const char* sql,std::string& retStr) } #endif -std::string Database::escape(const std::string strValue) -{ - std::string strReturn; - - escape(reinterpret_cast(strValue.c_str()), strValue.size(), strReturn); - - return strReturn; -} // vim:ts=4 diff --git a/src/cpp/database/database.h b/src/cpp/database/database.h index 36ce4285c..38c946560 100644 --- a/src/cpp/database/database.h +++ b/src/cpp/database/database.h @@ -37,9 +37,6 @@ public: std::string& getPass(){ return(mDBPass); } - virtual void escape(const unsigned char* start,int size,std::string& retStr)=0; - std::string escape(const std::string strValue); - // returns true if the query went ok virtual bool executeSQL(const char* sql, bool fail_okay=false)=0; diff --git a/src/cpp/ripple/ConnectionPool.cpp b/src/cpp/ripple/ConnectionPool.cpp index 1c71b28b9..2d4920338 100644 --- a/src/cpp/ripple/ConnectionPool.cpp +++ b/src/cpp/ripple/ConnectionPool.cpp @@ -532,7 +532,7 @@ bool ConnectionPool::peerScanSet(const std::string& strIp, int iPort) db->executeSQL(str(boost::format("UPDATE PeerIps SET ScanNext=%d,ScanInterval=%d WHERE IpPort=%s;") % iToSeconds(tpNext) % iInterval - % db->escape(strIpPort))); + % sqlEscape(strIpPort))); bScanDirty = true; } @@ -632,8 +632,8 @@ void ConnectionPool::peerVerified(Peer::ref peer) ScopedLock sl(theApp->getWalletDB()->getDBLock()); Database *db=theApp->getWalletDB()->getDB(); - db->executeSQL(str(boost::format("UPDATE PeerIps SET ScanNext=NULL,ScanInterval=0 WHERE IpPort=%s;") - % db->escape(strIpPort))); + db->executeSQL(boost::str(boost::format("UPDATE PeerIps SET ScanNext=NULL,ScanInterval=0 WHERE IpPort=%s;") + % sqlEscape(strIpPort))); // XXX Check error. } @@ -726,10 +726,10 @@ void ConnectionPool::scanRefresh() ScopedLock sl(theApp->getWalletDB()->getDBLock()); Database *db=theApp->getWalletDB()->getDB(); - db->executeSQL(str(boost::format("UPDATE PeerIps SET ScanNext=%d,ScanInterval=%d WHERE IpPort=%s;") + db->executeSQL(boost::str(boost::format("UPDATE PeerIps SET ScanNext=%d,ScanInterval=%d WHERE IpPort=%s;") % iToSeconds(tpNext) % iInterval - % db->escape(strIpPort))); + % sqlEscape(strIpPort))); // XXX Check error. } diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index e7432ec72..0bd2c8492 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -95,6 +95,7 @@ void HashedObjectStore::bulkWrite() if (!SQL_EXISTS(db, boost::str(fExists % it->getHash().GetHex()))) { char type; + switch(it->getType()) { case hotLEDGER: type = 'L'; break; @@ -103,9 +104,7 @@ void HashedObjectStore::bulkWrite() case hotTRANSACTION_NODE: type = 'N'; break; default: type = 'U'; } - std::string rawData; - db->escape(&(it->getData().front()), it->getData().size(), rawData); - db->executeSQL(boost::str(fAdd % it->getHash().GetHex() % type % it->getIndex() % rawData )); + db->executeSQL(boost::str(fAdd % it->getHash().GetHex() % type % it->getIndex() % sqlEscape(it->getData()))); } } diff --git a/src/cpp/ripple/HashedObject.h b/src/cpp/ripple/HashedObject.h index 69c5e55f7..5dd6e641a 100644 --- a/src/cpp/ripple/HashedObject.h +++ b/src/cpp/ripple/HashedObject.h @@ -28,7 +28,7 @@ class HashedObject : private IS_INSTANCE(HashedObject) public: typedef boost::shared_ptr pointer; - HashedObjectType mType; + HashedObjectType mType; uint256 mHash; uint32 mLedgerIndex; std::vector mData; @@ -69,3 +69,4 @@ public: }; #endif +// vim:ts=4 diff --git a/src/cpp/ripple/PubKeyCache.cpp b/src/cpp/ripple/PubKeyCache.cpp index d3ae59c57..8b545d51f 100644 --- a/src/cpp/ripple/PubKeyCache.cpp +++ b/src/cpp/ripple/PubKeyCache.cpp @@ -49,17 +49,16 @@ CKey::pointer PubKeyCache::store(const RippleAddress& id, const CKey::pointer& k } std::vector pk = key->GetPubKey(); - std::string encodedPK; - theApp->getTxnDB()->getDB()->escape(&(pk.front()), pk.size(), encodedPK); std::string sql = "INSERT INTO PubKeys (ID,PubKey) VALUES ('"; sql += id.humanAccountID(); sql += "',"; - sql += encodedPK; + sql += sqlEscape(pk); sql.append(");"); ScopedLock dbl(theApp->getTxnDB()->getDBLock()); theApp->getTxnDB()->getDB()->executeSQL(sql, true); + return key; } diff --git a/src/cpp/ripple/SerializedTransaction.cpp b/src/cpp/ripple/SerializedTransaction.cpp index 115f8343e..8d05b85a8 100644 --- a/src/cpp/ripple/SerializedTransaction.cpp +++ b/src/cpp/ripple/SerializedTransaction.cpp @@ -235,9 +235,8 @@ std::string SerializedTransaction::getMetaSQL(uint32 inLedger, const std::string std::string SerializedTransaction::getSQL(Serializer rawTxn, uint32 inLedger, char status) const { static boost::format bfTrans("('%s', '%s', '%s', '%d', '%d', '%c', %s)"); - std::string rTxn; - theApp->getTxnDB()->getDB()->escape( - reinterpret_cast(rawTxn.getDataPtr()), rawTxn.getLength(), rTxn); + std::string rTxn = sqlEscape(rawTxn.peekData()); + return str(bfTrans % getTransactionID().GetHex() % getTransactionType() % getSourceAccount().humanAccountID() % getSequence() % inLedger % status % rTxn); @@ -247,9 +246,8 @@ std::string SerializedTransaction::getMetaSQL(Serializer rawTxn, uint32 inLedger const std::string& escapedMetaData) const { static boost::format bfTrans("('%s', '%s', '%s', '%d', '%d', '%c', %s, %s)"); - std::string rTxn; - theApp->getTxnDB()->getDB()->escape( - reinterpret_cast(rawTxn.getDataPtr()), rawTxn.getLength(), rTxn); + std::string rTxn = sqlEscape(rawTxn.peekData()); + return str(bfTrans % getTransactionID().GetHex() % getTransactionType() % getSourceAccount().humanAccountID() % getSequence() % inLedger % status % rTxn % escapedMetaData); diff --git a/src/cpp/ripple/UniqueNodeList.cpp b/src/cpp/ripple/UniqueNodeList.cpp index 83bdd4692..7acdf14df 100644 --- a/src/cpp/ripple/UniqueNodeList.cpp +++ b/src/cpp/ripple/UniqueNodeList.cpp @@ -306,8 +306,8 @@ void UniqueNodeList::scoreCompute() ScopedLock sl(theApp->getWalletDB()->getDBLock()); - SQL_FOREACH(db, str(boost::format("SELECT Referral FROM ValidatorReferrals WHERE Validator=%s ORDER BY Entry;") - % db->escape(strValidator))) + SQL_FOREACH(db, boost::str(boost::format("SELECT Referral FROM ValidatorReferrals WHERE Validator=%s ORDER BY Entry;") + % sqlEscape(strValidator))) { std::string strReferral = db->getStrBinary("Referral"); int iReferral; @@ -399,7 +399,7 @@ void UniqueNodeList::scoreCompute() for (int iNode=vsnNodes.size(); iNode--;) { - vstrPublicKeys[iNode] = db->escape(vsnNodes[iNode].strValidator); + vstrPublicKeys[iNode] = sqlEscape(vsnNodes[iNode].strValidator); } SQL_FOREACH(db, str(boost::format("SELECT PublicKey,Seen FROM TrustedNodes WHERE PublicKey IN (%s);") @@ -478,7 +478,7 @@ void UniqueNodeList::scoreCompute() int iEntry = 0; SQL_FOREACH(db, str(boost::format("SELECT IP,Port FROM IpReferrals WHERE Validator=%s ORDER BY Entry;") - % db->escape(strValidator))) + % sqlEscape(strValidator))) { score iPoints = iBase * (iEntries - iEntry) / iEntries; int iPort; @@ -510,7 +510,7 @@ void UniqueNodeList::scoreCompute() score iPoints = ipScore.second; vstrValues.push_back(str(boost::format("(%s,%d,'%c')") - % db->escape(strIpPort) + % sqlEscape(strIpPort) % iPoints % vsValidator)); } @@ -649,7 +649,7 @@ void UniqueNodeList::processIps(const std::string& strSite, const RippleAddress& if (bValid) { vstrValues[iValues] = str(boost::format("(%s,%d,%s,%d)") - % strEscNodePublic % iValues % db->escape(strIP) % iPort); + % strEscNodePublic % iValues % sqlEscape(strIP) % iPort); iValues++; } else @@ -1153,8 +1153,8 @@ bool UniqueNodeList::getSeedDomains(const std::string& strDomain, seedDomain& ds bool bResult; Database* db=theApp->getWalletDB()->getDB(); - std::string strSql = str(boost::format("SELECT * FROM SeedDomains WHERE Domain=%s;") - % db->escape(strDomain)); + std::string strSql = boost::str(boost::format("SELECT * FROM SeedDomains WHERE Domain=%s;") + % sqlEscape(strDomain)); ScopedLock sl(theApp->getWalletDB()->getDBLock()); @@ -1215,15 +1215,15 @@ void UniqueNodeList::setSeedDomains(const seedDomain& sdSource, bool bNext) // cLog(lsTRACE) << str(boost::format("setSeedDomains: iNext=%s tpNext=%s") % iNext % sdSource.tpNext); - std::string strSql = str(boost::format("REPLACE INTO SeedDomains (Domain,PublicKey,Source,Next,Scan,Fetch,Sha256,Comment) VALUES (%s, %s, %s, %d, %d, %d, '%s', %s);") - % db->escape(sdSource.strDomain) - % (sdSource.naPublicKey.isValid() ? db->escape(sdSource.naPublicKey.humanNodePublic()) : "NULL") + std::string strSql = boost::str(boost::format("REPLACE INTO SeedDomains (Domain,PublicKey,Source,Next,Scan,Fetch,Sha256,Comment) VALUES (%s, %s, %s, %d, %d, %d, '%s', %s);") + % sqlEscape(sdSource.strDomain) + % (sdSource.naPublicKey.isValid() ? sqlEscape(sdSource.naPublicKey.humanNodePublic()) : "NULL") % sqlEscape(std::string(1, static_cast(sdSource.vsSource))) % iNext % iScan % iFetch % sdSource.iSha256.GetHex() - % db->escape(sdSource.strComment) + % sqlEscape(sdSource.strComment) ); ScopedLock sl(theApp->getWalletDB()->getDBLock()); diff --git a/src/cpp/ripple/ValidationCollection.cpp b/src/cpp/ripple/ValidationCollection.cpp index f5e452a87..c74b13bb8 100644 --- a/src/cpp/ripple/ValidationCollection.cpp +++ b/src/cpp/ripple/ValidationCollection.cpp @@ -312,7 +312,7 @@ void ValidationCollection::doWrite() BOOST_FOREACH(const SerializedValidation::pointer& it, vector) db->executeSQL(boost::str(insVal % it->getLedgerHash().GetHex() % it->getSignerPublic().humanNodePublic() % it->getFlags() % it->getSignTime() - % db->escape(strCopy(it->getSignature())))); + % sqlEscape(it->getSignature()))); db->executeSQL("END TRANSACTION;"); } sl.lock(); diff --git a/src/cpp/ripple/Wallet.cpp b/src/cpp/ripple/Wallet.cpp index 8843e693c..3d23adede 100644 --- a/src/cpp/ripple/Wallet.cpp +++ b/src/cpp/ripple/Wallet.cpp @@ -121,7 +121,7 @@ bool Wallet::dataDelete(const std::string& strKey) ScopedLock sl(theApp->getRpcDB()->getDBLock()); return db->executeSQL(str(boost::format("DELETE FROM RPCData WHERE Key=%s;") - % db->escape(strKey))); + % sqlEscape(strKey))); } bool Wallet::dataFetch(const std::string& strKey, std::string& strValue) @@ -133,7 +133,7 @@ bool Wallet::dataFetch(const std::string& strKey, std::string& strValue) bool bSuccess = false; if (db->executeSQL(str(boost::format("SELECT Value FROM RPCData WHERE Key=%s;") - % db->escape(strKey))) && db->startIterRows()) + % sqlEscape(strKey))) && db->startIterRows()) { std::vector vucData = db->getBinary("Value"); strValue.assign(vucData.begin(), vucData.end()); @@ -155,8 +155,8 @@ bool Wallet::dataStore(const std::string& strKey, const std::string& strValue) bool bSuccess = false; return (db->executeSQL(str(boost::format("REPLACE INTO RPCData (Key, Value) VALUES (%s,%s);") - % db->escape(strKey) - % db->escape(strValue) + % sqlEscape(strKey) + % sqlEscape(strValue) ))); return bSuccess; From 85c7ac0acfae38118e8d4e39c44743cb42025b29 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 02:09:33 -0800 Subject: [PATCH 227/525] Remove WinDatabase. --- src/cpp/database/win/dbutility.h | 82 --------- src/cpp/database/win/windatabase.cpp | 246 --------------------------- src/cpp/database/win/windatabase.h | 61 ------- 3 files changed, 389 deletions(-) delete mode 100644 src/cpp/database/win/dbutility.h delete mode 100644 src/cpp/database/win/windatabase.cpp delete mode 100644 src/cpp/database/win/windatabase.h diff --git a/src/cpp/database/win/dbutility.h b/src/cpp/database/win/dbutility.h deleted file mode 100644 index 5df5c1ec0..000000000 --- a/src/cpp/database/win/dbutility.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef __TMYODBC_UTILITY_H__ -#define __TMYODBC_UTILITY_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - - -/* STANDARD C HEADERS */ -#include -#include -#include - -/* ODBC HEADERS */ -#include - -#define MAX_NAME_LEN 95 -#define MAX_COLUMNS 255 -#define MAX_ROW_DATA_LEN 255 - - -/* PROTOTYPE */ -void myerror(SQLRETURN rc,SQLSMALLINT htype, SQLHANDLE handle); - -/* UTILITY MACROS */ -#define myenv(henv,r) \ - if ( ((r) != SQL_SUCCESS) ) \ - myerror(r, 1,henv); \ - assert( ((r) == SQL_SUCCESS) || ((r) == SQL_SUCCESS_WITH_INFO) ) - -#define myenv_err(henv,r,rc) \ - if ( rc == SQL_ERROR || rc == SQL_SUCCESS_WITH_INFO ) \ - myerror(rc, 1, henv); \ - assert( r ) - -#define mycon(hdbc,r) \ - if ( ((r) != SQL_SUCCESS) ) \ - myerror(r, 2, hdbc); \ - assert( ((r) == SQL_SUCCESS) || ((r) == SQL_SUCCESS_WITH_INFO) ) - -#define mycon_err(hdbc,r,rc) \ - if ( rc == SQL_ERROR || rc == SQL_SUCCESS_WITH_INFO ) \ - myerror(rc, 2, hdbc); \ - assert( r ) - -#define mystmt(hstmt,r) \ - if ( ((r) != SQL_SUCCESS) ) \ - myerror(r, 3, hstmt); \ - assert( ((r) == SQL_SUCCESS) || ((r) == SQL_SUCCESS_WITH_INFO) ) - -#define mystmt_err(hstmt,r,rc) \ - if ( rc == SQL_ERROR || rc == SQL_SUCCESS_WITH_INFO ) \ - myerror(rc, 3, hstmt); \ - assert( r ) - -/******************************************************** -* MyODBC 3.51 error handler * -*********************************************************/ -void myerror(SQLRETURN rc, SQLSMALLINT htype, SQLHANDLE handle) -{ - SQLRETURN lrc; - - if( rc == SQL_ERROR || rc == SQL_SUCCESS_WITH_INFO ) - { - SQLCHAR szSqlState[6],szErrorMsg[SQL_MAX_MESSAGE_LENGTH]; - SQLINTEGER pfNativeError; - SQLSMALLINT pcbErrorMsg; - - lrc = SQLGetDiagRec(htype, handle,1, - (SQLCHAR *)&szSqlState, - (SQLINTEGER *)&pfNativeError, - (SQLCHAR *)&szErrorMsg, - SQL_MAX_MESSAGE_LENGTH-1, - (SQLSMALLINT *)&pcbErrorMsg); - if(lrc == SQL_SUCCESS || lrc == SQL_SUCCESS_WITH_INFO) - printf("\n [%s][%d:%s]\n",szSqlState,pfNativeError,szErrorMsg); - } -} - - -#endif /* __TMYODBC_UTILITY_H__ */ - diff --git a/src/cpp/database/win/windatabase.cpp b/src/cpp/database/win/windatabase.cpp deleted file mode 100644 index 64215fb8a..000000000 --- a/src/cpp/database/win/windatabase.cpp +++ /dev/null @@ -1,246 +0,0 @@ -#include "windatabase.h" -#include "dbutility.h" - -using namespace std; - -Database* Database::newMysqlDatabase(const char* host,const char* user,const char* pass) -{ - return(new WinDatabase(host,user,pass)); -} - -WinDatabase::WinDatabase(const char* host,const char* user,const char* pass) : Database(host,user,pass) -{ - -} - -WinDatabase::~WinDatabase() -{ - disconnect(); -} - - -void WinDatabase::connect() -{ - SQLRETURN rc; - - rc = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv); - myenv(henv, rc); - - rc = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0); - myenv(henv, rc); - - rc = SQLAllocHandle(SQL_HANDLE_DBC,henv, &hdbc); - myenv(henv, rc); - - rc = SQLConnect(hdbc, (unsigned char*)(char*) mHost.c_str(), SQL_NTS, (unsigned char*)(char*) mUser.c_str(), SQL_NTS, (unsigned char*)(char*) mDBPass.c_str(), SQL_NTS); - mycon(hdbc, rc); - - rc = SQLSetConnectAttr(hdbc,SQL_ATTR_AUTOCOMMIT,(SQLPOINTER)SQL_AUTOCOMMIT_ON,0); - mycon(hdbc,rc); - - rc = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt); - mycon(hdbc,rc); - - //rc = SQLGetInfo(hdbc,SQL_DBMS_NAME,&server_name,40,NULL); - //mycon(hdbc, rc); - - //theUI->statusMsg("Connection Established to DB"); -} - -void WinDatabase::disconnect() -{ - SQLRETURN rc; - - rc = SQLFreeStmt(hstmt, SQL_DROP); - mystmt(hstmt,rc); - - rc = SQLDisconnect(hdbc); - mycon(hdbc, rc); - - rc = SQLFreeHandle(SQL_HANDLE_DBC, hdbc); - mycon(hdbc, rc); - - rc = SQLFreeHandle(SQL_HANDLE_ENV, henv); - myenv(henv, rc); -} - -int WinDatabase::getNumRowsAffected() -{ -// theUI->statusMsg("getNumRowsAffected()"); - SQLINTEGER ret; - SQLRowCount(hstmt,&ret); - return(ret); -} - -// returns true if the query went ok -bool WinDatabase::executeSQL(const char* sql, bool fail_okay) -{ - SQLRETURN rc = SQLExecDirect(hstmt,(unsigned char*) sql,SQL_NTS); - if(rc==SQL_ERROR) - { - //theUI->errorMsg("Trying to recover from DB error"); - rc = SQLExecDirect(hstmt,(unsigned char*) sql,SQL_NTS); - if(rc==SQL_ERROR) - { - SQLCHAR SqlState[6], /*SQLStmt[100],*/ Msg[SQL_MAX_MESSAGE_LENGTH]; - SQLINTEGER NativeError; - SQLSMALLINT i, MsgLen; - SQLRETURN /*rc1,*/ rc2; - - i = 1; - while ((rc2 = SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, i, SqlState, &NativeError, Msg, sizeof(Msg), &MsgLen)) != SQL_NO_DATA) - { - //theUI->errorMsg("DB ERROR: %s,%d,%s",SqlState,NativeError,Msg); - i++; - } - - return(false); - } - } - - mystmt(hstmt,rc); - - // commit the transaction - rc = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT); - mycon(hdbc,rc); - - return(true); - -} - -bool WinDatabase::startIterRows() -{ - SQLUINTEGER pcColDef; - SQLCHAR szColName[MAX_NAME_LEN]; - SQLSMALLINT pfSqlType, pcbScale, pfNullable; - SQLSMALLINT numCol; - - /* get total number of columns from the resultset */ - SQLRETURN rc = SQLNumResultCols(hstmt,&numCol); - mystmt(hstmt,rc); - mNumCol=(int)numCol; - - if(mNumCol) - { - mColNameTable.resize(mNumCol); - - // fill out the column name table - for(int n = 1; n <= mNumCol; n++) - { - rc = SQLDescribeCol(hstmt,n,szColName, MAX_NAME_LEN, NULL, &pfSqlType,&pcColDef,&pcbScale,&pfNullable); - mystmt(hstmt,rc); - - mColNameTable[n-1]= (char*)szColName; - } - return(true); - } - return(false); -} - -// call this after you executeSQL -// will return false if there are no more rows -bool WinDatabase::getNextRow() -{ - SQLRETURN rc = SQLFetch(hstmt); - return((rc==SQL_SUCCESS) || (rc==SQL_SUCCESS_WITH_INFO)); -} - - - -char* WinDatabase::getStr(int colIndex,string& retStr) -{ - colIndex++; - retStr=""; - char buf[1000]; -// SQLINTEGER len; - buf[0]=0; - - while(SQLGetData(hstmt, colIndex, SQL_C_CHAR, &buf, 1000,NULL)!= SQL_NO_DATA) - { - retStr += buf; -// theUI->statusMsg("Win: %s",buf); - } - - //SQLRETURN rc = SQLGetData(hstmt,colIndex,SQL_C_CHAR,&buf,30000,&len); - //mystmt(hstmt,rc); - //*retStr=buf; - - //theUI->statusMsg("Win: %s",buf); - - return((char*)retStr.c_str()); -} - -int32 WinDatabase::getInt(int colIndex) -{ - colIndex++; - int ret=0; - SQLRETURN rc = SQLGetData(hstmt,colIndex,SQL_INTEGER,&ret,sizeof(int),NULL); - mystmt(hstmt,rc); - return(ret); -} - -float WinDatabase::getFloat(int colIndex) -{ - colIndex++; - float ret=0; - SQLRETURN rc = SQLGetData(hstmt,colIndex,SQL_C_FLOAT,&ret,sizeof(float),NULL); - mystmt(hstmt,rc); - - return(ret); -} - -bool WinDatabase::getBool(int colIndex) -{ - colIndex++; - char buf[1]; - buf[0]=0; - SQLRETURN rc = SQLGetData(hstmt,colIndex,SQL_C_CHAR,&buf,1,NULL); - mystmt(hstmt,rc); - - return(buf[0] != 0); -} - - -void WinDatabase::endIterRows() -{ - // free the statement row bind resources - SQLRETURN rc = SQLFreeStmt(hstmt, SQL_UNBIND); - mystmt(hstmt,rc); - - // free the statement cursor - rc = SQLFreeStmt(hstmt, SQL_CLOSE); - mystmt(hstmt,rc); -} - -// TODO -void WinDatabase::escape(const unsigned char* start,int size,std::string& retStr) -{ - retStr=(char*)start; -} - -// TODO -int WinDatabase::getLastInsertID() -{ - return(0); -} - -uint64 WinDatabase::getBigInt(int colIndex) -{ - colIndex++; - uint64 ret=0; - SQLRETURN rc = SQLGetData(hstmt,colIndex,SQL_INTEGER,&ret,sizeof(uint64),NULL); - mystmt(hstmt,rc); - return(ret); -} -// TODO: -int WinDatabase::getBinary(int colIndex,unsigned char* buf,int maxSize) -{ - return(0); -} - -std::vector WinDatabase::getBinary(int colIndex) -{ - // TODO: - std::vector vucResult; - return vucResult; -} \ No newline at end of file diff --git a/src/cpp/database/win/windatabase.h b/src/cpp/database/win/windatabase.h deleted file mode 100644 index 5ce079870..000000000 --- a/src/cpp/database/win/windatabase.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef __WINDATABASE__ -#define __WINDATABASE__ - -#include "../database.h" - - -#ifdef WIN32 -#define _WINSOCKAPI_ // prevent inclusion of winsock.h in windows.h -#include -#include "sql.h" -#endif - - -/* - this maintains the connection to the database -*/ -class WinDatabase : public Database -{ - SQLHENV henv; - SQLHDBC hdbc; - SQLHSTMT hstmt; - -public: - WinDatabase(const char* host,const char* user,const char* pass); - virtual ~WinDatabase(); - - void connect(); - void disconnect(); - - //char* getPass(){ return((char*)mDBPass.c_str()); } - - // returns true if the query went ok - bool executeSQL(const char* sql, bool fail_okay=false); - - int getNumRowsAffected(); - int getLastInsertID(); - - // returns false if there are no results - bool startIterRows(); - void endIterRows(); - - // call this after you executeSQL - // will return false if there are no more rows - bool getNextRow(); - - // get Data from the current row - char* getStr(int colIndex,std::string& retStr); - int32 getInt(int colIndex); - float getFloat(int colIndex); - bool getBool(int colIndex); - uint64 getBigInt(int colIndex); - int getBinary(int colIndex,unsigned char* buf,int maxSize); - std::vector getBinary(int colIndex); - bool getNull(int colIndex){ return(true); } - - void escape(const unsigned char* start,int size,std::string& retStr); -}; - - -#endif - From c728edb1f87686579c8c077a23e3369a88f38f33 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 02:10:29 -0800 Subject: [PATCH 228/525] Remove MySqlDatabase. --- src/cpp/database/linux/mysqldatabase.cpp | 136 ----------------------- src/cpp/database/linux/mysqldatabase.h | 47 -------- 2 files changed, 183 deletions(-) delete mode 100644 src/cpp/database/linux/mysqldatabase.cpp delete mode 100644 src/cpp/database/linux/mysqldatabase.h diff --git a/src/cpp/database/linux/mysqldatabase.cpp b/src/cpp/database/linux/mysqldatabase.cpp deleted file mode 100644 index 4d35b7ccd..000000000 --- a/src/cpp/database/linux/mysqldatabase.cpp +++ /dev/null @@ -1,136 +0,0 @@ -#include "mysqldatabase.h" -#include "reportingmechanism.h" -#include "string/i4string.h" -#include - - -Database* Database::newDatabase(const char* host,const char* user,const char* pass) -{ - return(new MySqlDatabase(host,user,pass)); -} - -MySqlDatabase::MySqlDatabase(const char* host,const char* user,const char* pass) : Database(host,user,pass) -{ - -} - -MySqlDatabase::~MySqlDatabase() -{ -} - -void MySqlDatabase::connect() -{ - mysql_init(&mMysql); - mysql_options(&mMysql,MYSQL_READ_DEFAULT_GROUP,"i4min"); - if(!mysql_real_connect(&mMysql,mHost,mUser,mDBPass,NULL,0,NULL,0)) - { - theUI->statusMsg("Failed to connect to database: Error: %s\n", mysql_error(&mMysql)); - }else theUI->statusMsg("Connection Established to DB"); -} - -void MySqlDatabase::disconnect() -{ - mysql_close(&mMysql); -} - -int MySqlDatabase::getNumRowsAffected() -{ - return( mysql_affected_rows(&mMysql)); -} - -// returns true if the query went ok -bool MySqlDatabase::executeSQL(const char* sql) -{ - int ret=mysql_query(&mMysql, sql); - if(ret) - { - connect(); - int ret=mysql_query(&mMysql, sql); - if(ret) - { - theUI->statusMsg("ERROR with executeSQL: %d %s",ret,sql); - return(false); - } - } - return(true); -} - -bool MySqlDatabase::startIterRows() -{ - mResult=mysql_store_result(&mMysql); - // get total number of columns from the resultset - mNumCol = mysql_num_fields(mResult); - if(mNumCol) - { - delete[](mColNameTable); - mColNameTable=new i4_str[mNumCol]; - - // fill out the column name table - for(int n = 0; n < mNumCol; n++) - { - MYSQL_FIELD* field=mysql_fetch_field(mResult); - mColNameTable[n]= field->name; - } - return(true); - } - return(false); -} - -// call this after you executeSQL -// will return false if there are no more rows -bool MySqlDatabase::getNextRow() -{ - mCurRow=mysql_fetch_row(mResult); - - return(mCurRow!=NULL); -} - -char* MySqlDatabase::getStr(int colIndex,i4_str* retStr) -{ - if(mCurRow[colIndex]) - { - (*retStr)=mCurRow[colIndex]; - }else (*retStr)=""; - - return(*retStr); -} - -w32 MySqlDatabase::getInt(int colIndex) -{ - - if(mCurRow[colIndex]) - { - w32 ret=atoll(mCurRow[colIndex]); - //theUI->statusMsg("getInt: %s,%c,%u",mCurRow[colIndex],mCurRow[colIndex][0],ret); - return(ret); - } - return(0); -} - -float MySqlDatabase::getFloat(int colIndex) -{ - if(mCurRow[colIndex]) - { - float ret=atof(mCurRow[colIndex]); - return(ret); - } - return(0.0); -} - -bool MySqlDatabase::getBool(int colIndex) -{ - if(mCurRow[colIndex]) - { - int ret=atoi(mCurRow[colIndex]); - return(ret); - } - return(false); -} - - -void MySqlDatabase::endIterRows() -{ - mysql_free_result(mResult); -} - - diff --git a/src/cpp/database/linux/mysqldatabase.h b/src/cpp/database/linux/mysqldatabase.h deleted file mode 100644 index 1fb9cae10..000000000 --- a/src/cpp/database/linux/mysqldatabase.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef __MYSQLDATABASE__ -#define __MYSQLDATABASE__ - -#include "../database.h" -#include "string/i4string.h" -#include "mysql/mysql.h" - -/* -this maintains the connection to the database -*/ -class MySqlDatabase : public Database -{ - MYSQL mMysql; - MYSQL_RES* mResult; - MYSQL_ROW mCurRow; - -public: - MySqlDatabase(const char* host,const char* user,const char* pass); - ~MySqlDatabase(); - - void connect(); - void disconnect(); - - // returns true if the query went ok - bool executeSQL(const char* sql); - - int getNumRowsAffected(); - - // returns false if there are no results - bool startIterRows(); - void endIterRows(); - - // call this after you executeSQL - // will return false if there are no more rows - bool getNextRow(); - - // get Data from the current row - - char* getStr(int colIndex,i4_str* retStr); - w32 getInt(int colIndex); - float getFloat(int colIndex); - bool getBool(int colIndex); -}; - - -#endif - From 511479070063738cc7fdbe94003283c21500120e Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 02:15:46 -0800 Subject: [PATCH 229/525] Make unneeded code a compilation option. --- src/cpp/ripple/Config.h | 2 ++ src/cpp/ripple/RPCHandler.cpp | 10 ++++++++++ src/cpp/ripple/RPCHandler.h | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index 849d18852..4d0edf0f9 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -9,6 +9,8 @@ #include #include +#define ENABLE_INSECURE 0 // 1, to enable unnecessary features. + #define SYSTEM_NAME "ripple" #define SYSTEM_CURRENCY_CODE "XRP" #define SYSTEM_CURRENCY_PRECISION 6 diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index cc64c1280..b73b1c88c 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -304,6 +304,7 @@ Json::Value RPCHandler::doConnect(Json::Value jvRequest) return "connecting"; } +#if ENABLE_INSECURE // { // key: // } @@ -327,7 +328,9 @@ Json::Value RPCHandler::doDataDelete(Json::Value jvRequest) return ret; } +#endif +#if ENABLE_INSECURE // { // key: // } @@ -347,7 +350,9 @@ Json::Value RPCHandler::doDataFetch(Json::Value jvRequest) return ret; } +#endif +#if ENABLE_INSECURE // { // key: // value: @@ -375,6 +380,7 @@ Json::Value RPCHandler::doDataStore(Json::Value jvRequest) return ret; } +#endif #if 0 // XXX Needs to be revised for new paradigm @@ -1569,6 +1575,7 @@ Json::Value RPCHandler::doWalletSeed(Json::Value jvRequest) } } +#if ENABLE_INSECURE // TODO: for now this simply checks if this is the admin account // TODO: need to prevent them hammering this over and over // TODO: maybe a better way is only allow admin from local host @@ -1592,6 +1599,7 @@ Json::Value RPCHandler::doLogin(Json::Value jvRequest) return "nope"; } } +#endif // { // min_count: // optional, defaults to 10 @@ -2456,11 +2464,13 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { "wallet_propose", &RPCHandler::doWalletPropose, false, optNone }, { "wallet_seed", &RPCHandler::doWalletSeed, false, optNone }, +#if ENABLE_INSECURE // XXX Unnecessary commands which should be removed. { "login", &RPCHandler::doLogin, true, optNone }, { "data_delete", &RPCHandler::doDataDelete, true, optNone }, { "data_fetch", &RPCHandler::doDataFetch, true, optNone }, { "data_store", &RPCHandler::doDataStore, true, optNone }, +#endif // Evented methods { "subscribe", &RPCHandler::doSubscribe, false, optNone }, diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index a5650a214..bfd99ba1a 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -40,9 +40,11 @@ class RPCHandler Json::Value doAccountOffers(Json::Value params); Json::Value doAccountTransactions(Json::Value params); Json::Value doConnect(Json::Value params); +#if ENABLE_INSECURE Json::Value doDataDelete(Json::Value params); Json::Value doDataFetch(Json::Value params); Json::Value doDataStore(Json::Value params); +#endif Json::Value doGetCounts(Json::Value params); Json::Value doLedger(Json::Value params); Json::Value doLogLevel(Json::Value params); @@ -79,7 +81,9 @@ class RPCHandler Json::Value doWalletUnlock(Json::Value params); Json::Value doWalletVerify(Json::Value params); +#if ENABLE_INSECURE Json::Value doLogin(Json::Value params); +#endif Json::Value doLedgerAccept(Json::Value params); Json::Value doLedgerClosed(Json::Value params); From a40fbdb8329ef885a102f46343db3de14878b94d Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 11:29:52 -0800 Subject: [PATCH 230/525] Update DEFAULT_PEER_SCAN_INTERVAL_MIN for production use. --- src/cpp/ripple/Config.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index 4d0edf0f9..c97f5495d 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -33,10 +33,9 @@ const int SYSTEM_WEBSOCKET_PUBLIC_PORT = 6563; // XXX Going away. // Allow anonymous DH. #define DEFAULT_PEER_SSL_CIPHER_LIST "ALL:!LOW:!EXP:!MD5:@STRENGTH" -// Normal, recommend 1 hour. -// #define DEFAULT_PEER_SCAN_INTERVAL_MIN (60*60) -// Testing, recommend 1 minute. -#define DEFAULT_PEER_SCAN_INTERVAL_MIN (60) +// Normal, recommend 1 hour: 60*60 +// Testing, recommend 1 minute: 60 +#define DEFAULT_PEER_SCAN_INTERVAL_MIN (60*60) // Seconds // Maximum number of peers to try to connect to as client at once. #define DEFAULT_PEER_START_MAX 5 From 4961fde6d784af4aa78e5ce9152b20d3ef23c763 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 11:32:24 -0800 Subject: [PATCH 231/525] Mark more code as unneeded. --- src/cpp/ripple/CallRPC.cpp | 10 ++++++++++ src/cpp/ripple/CallRPC.h | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 4b5b46816..2affdb290 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -126,6 +126,7 @@ Json::Value RPCParser::parseConnect(const Json::Value& jvParams) return jvRequest; } +#if ENABLE_INSECURE // data_delete Json::Value RPCParser::parseDataDelete(const Json::Value& jvParams) { @@ -135,7 +136,9 @@ Json::Value RPCParser::parseDataDelete(const Json::Value& jvParams) return jvRequest; } +#endif +#if ENABLE_INSECURE // data_fetch Json::Value RPCParser::parseDataFetch(const Json::Value& jvParams) { @@ -145,7 +148,9 @@ Json::Value RPCParser::parseDataFetch(const Json::Value& jvParams) return jvRequest; } +#endif +#if ENABLE_INSECURE // data_store Json::Value RPCParser::parseDataStore(const Json::Value& jvParams) { @@ -156,6 +161,7 @@ Json::Value RPCParser::parseDataStore(const Json::Value& jvParams) return jvRequest; } +#endif // Return an error for attemping to subscribe/unsubscribe via RPC. Json::Value RPCParser::parseEvented(const Json::Value& jvParams) @@ -203,6 +209,7 @@ Json::Value RPCParser::parseLedger(const Json::Value& jvParams) return jvRequest; } +#if ENABLE_INSECURE // login Json::Value RPCParser::parseLogin(const Json::Value& jvParams) { @@ -213,6 +220,7 @@ Json::Value RPCParser::parseLogin(const Json::Value& jvParams) return jvRequest; } +#endif // log_level: Get log levels // log_level : Set master log level to the specified severity @@ -459,11 +467,13 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) { "wallet_propose", &RPCParser::parseWalletPropose, 0, 1 }, { "wallet_seed", &RPCParser::parseWalletSeed, 0, 1 }, +#if ENABLE_INSECURE // XXX Unnecessary commands which should be removed. { "login", &RPCParser::parseLogin, 2, 2 }, { "data_delete", &RPCParser::parseDataDelete, 1, 1 }, { "data_fetch", &RPCParser::parseDataFetch, 1, 1 }, { "data_store", &RPCParser::parseDataStore, 2, 2 }, +#endif // Evented methods { "subscribe", &RPCParser::parseEvented, -1, -1 }, diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index 18f25eedb..99c34ddf7 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -15,13 +15,17 @@ protected: Json::Value parseAccountTransactions(const Json::Value& jvParams); Json::Value parseAsIs(const Json::Value& jvParams); Json::Value parseConnect(const Json::Value& jvParams); +#if ENABLE_INSECURE Json::Value parseDataDelete(const Json::Value& jvParams); Json::Value parseDataFetch(const Json::Value& jvParams); Json::Value parseDataStore(const Json::Value& jvParams); +#endif Json::Value parseEvented(const Json::Value& jvParams); Json::Value parseGetCounts(const Json::Value& jvParams); Json::Value parseLedger(const Json::Value& jvParams); +#if ENABLE_INSECURE Json::Value parseLogin(const Json::Value& jvParams); +#endif Json::Value parseLogLevel(const Json::Value& jvParams); Json::Value parseOwnerInfo(const Json::Value& jvParams); Json::Value parseRandom(const Json::Value& jvParams); From 642b782900a67fdede49f3e5e245b48a0ce9b622 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 11:35:45 -0800 Subject: [PATCH 232/525] Fix comment. --- src/cpp/ripple/RPCHandler.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index b73b1c88c..8c36b7e81 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1841,7 +1841,6 @@ Json::Value RPCHandler::doTransactionEntry(Json::Value jvRequest) return jvResult; } -// XXX ledger_index needs to be allowed as a string (32-bits is to small). Json::Value RPCHandler::lookupLedger(Json::Value jvRequest, Ledger::pointer& lpLedger) { Json::Value jvResult; From 781fef32e35914be82c6dfab54dbf3fe875e1894 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 15:57:06 -0800 Subject: [PATCH 233/525] UT: Enable some path tests. --- test/path-test.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/test/path-test.js b/test/path-test.js index 481c04c14..70e4ebec3 100644 --- a/test/path-test.js +++ b/test/path-test.js @@ -12,7 +12,7 @@ require("../src/js/remote.js").config = require("./config.js"); buster.testRunner.timeout = 5000; -buster.testCase("// Basic Path finding", { +buster.testCase("Basic Path finding", { // 'setUp' : testutils.build_setup({ verbose: true, no_server: true }), // 'setUp' : testutils.build_setup({ verbose: true }), 'setUp' : testutils.build_setup(), @@ -221,7 +221,7 @@ buster.testCase("// Basic Path finding", { }, }); -buster.testCase("// Extended Path finding", { +buster.testCase("Extended Path finding", { // 'setUp' : testutils.build_setup({ verbose: true, no_server: true }), // 'setUp' : testutils.build_setup({ verbose: true }), 'setUp' : testutils.build_setup(), @@ -435,13 +435,13 @@ buster.testCase("// Extended Path finding", { // Test alternative paths with qualities. }); -buster.testCase("// More Path finding", { +buster.testCase("More Path finding", { // 'setUp' : testutils.build_setup({ verbose: true, no_server: true }), // 'setUp' : testutils.build_setup({ verbose: true }), 'setUp' : testutils.build_setup(), 'tearDown' : testutils.build_teardown(), - "alternative paths - limit returned paths to best quality" : + "// alternative paths - limit returned paths to best quality" : // alice +- bitstamp -+ bob // |- carol(fee) -| // To be excluded. // |- dan(issue) -| @@ -453,7 +453,7 @@ buster.testCase("// More Path finding", { function (callback) { self.what = "Create accounts."; - testutils.create_accounts(self.remote, "root", "10000", ["alice", "bob", "carol", "dan", "mtgox", "bitstamp"], callback); + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "carol", "dan", "mtgox", "bitstamp"], callback); }, function (callback) { self.what = "Set transfer rate."; @@ -489,6 +489,7 @@ buster.testCase("// More Path finding", { }, callback); }, +// XXX What should this check? function (callback) { self.what = "Find path from alice to bob"; @@ -520,7 +521,7 @@ buster.testCase("// More Path finding", { function (callback) { self.what = "Create accounts."; - testutils.create_accounts(self.remote, "root", "10000", ["alice", "bob", "mtgox", "bitstamp"], callback); + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "mtgox", "bitstamp"], callback); }, function (callback) { self.what = "Set transfer rate."; @@ -592,7 +593,7 @@ buster.testCase("// More Path finding", { function (callback) { self.what = "Create accounts."; - testutils.create_accounts(self.remote, "root", "10000", ["alice", "bob", "mtgox", "bitstamp"], callback); + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "mtgox", "bitstamp"], callback); }, function (callback) { self.what = "Set transfer rate."; From cf77fd88f967c02face4035691f83cd20d19e454 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 6 Jan 2013 17:32:10 -0800 Subject: [PATCH 234/525] Mark a FIXME. --- src/cpp/ripple/LedgerMaster.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index c8eafcb4c..9c3ab337a 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -357,6 +357,9 @@ void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) { // check if we need to publish any held ledgers boost::recursive_mutex::scoped_lock ml(mLock); + // FIXME: This code needs to try much more aggressively to fill holes + // before publishing them. + if (seq <= mLastValidateSeq) return; From 63fd3818fb9af76f5921d4ea6fce4f1a21497c08 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 6 Jan 2013 17:32:25 -0800 Subject: [PATCH 235/525] Rather than counting PeerSet's, count LedgerAcquire's and TransactionAcquire's. --- src/cpp/ripple/LedgerAcquire.cpp | 2 +- src/cpp/ripple/LedgerAcquire.h | 7 ++++--- src/cpp/ripple/LedgerConsensus.cpp | 1 + src/cpp/ripple/LedgerConsensus.h | 4 +++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 4d3ab2625..4243fe2fb 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -11,7 +11,7 @@ #include "HashPrefixes.h" SETUP_LOG(); -DECLARE_INSTANCE(PeerSet); +DECLARE_INSTANCE(LedgerAcquire); #define LA_DEBUG #define LEDGER_ACQUIRE_TIMEOUT 750 diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 569ec02af..c27e88d38 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -18,9 +18,9 @@ #include "InstanceCounter.h" #include "ripple.pb.h" -DEFINE_INSTANCE(PeerSet); +DEFINE_INSTANCE(LedgerAcquire); -class PeerSet : private IS_INSTANCE(PeerSet) +class PeerSet { protected: uint256 mHash; @@ -67,7 +67,8 @@ private: static void TimerEntry(boost::weak_ptr, const boost::system::error_code& result); }; -class LedgerAcquire : public PeerSet, public boost::enable_shared_from_this +class LedgerAcquire : + private IS_INSTANCE(LedgerAcquire), public PeerSet, public boost::enable_shared_from_this { // A ledger we are trying to acquire public: typedef boost::shared_ptr pointer; diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index f0579b3b6..2c48a0f63 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -25,6 +25,7 @@ typedef std::map::value_type u256_lct_pair; SETUP_LOG(); DECLARE_INSTANCE(LedgerConsensus); +DECLARE_INSTANCE(TransactionAcquire); TransactionAcquire::TransactionAcquire(const uint256& hash) : PeerSet(hash, TX_ACQUIRE_TIMEOUT), mHaveRoot(false) { diff --git a/src/cpp/ripple/LedgerConsensus.h b/src/cpp/ripple/LedgerConsensus.h index 7890d2094..a80cba3a0 100644 --- a/src/cpp/ripple/LedgerConsensus.h +++ b/src/cpp/ripple/LedgerConsensus.h @@ -21,8 +21,10 @@ #include "LoadMonitor.h" DEFINE_INSTANCE(LedgerConsensus); +DEFINE_INSTANCE(TransactionAcquire); -class TransactionAcquire : public PeerSet, public boost::enable_shared_from_this +class TransactionAcquire : + private IS_INSTANCE(TransactionAcquire), public PeerSet, public boost::enable_shared_from_this { // A transaction set we are trying to acquire public: typedef boost::shared_ptr pointer; From aad57519ae630eb59d9f861afe8d31779082e381 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 17:50:09 -0800 Subject: [PATCH 236/525] Improve pathfinding, don't explore obviously dry paths. --- src/cpp/ripple/Pathfinder.cpp | 46 +++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/cpp/ripple/Pathfinder.cpp b/src/cpp/ripple/Pathfinder.cpp index acce67ae6..a1d37d192 100644 --- a/src/cpp/ripple/Pathfinder.cpp +++ b/src/cpp/ripple/Pathfinder.cpp @@ -268,7 +268,7 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax } else if (!speEnd.mCurrencyID) { - // Last element is for XRP continue with qualifying books. + // Last element is for XRP, continue with qualifying books. BOOST_FOREACH(OrderBook::ref book, mOrderBook.getXRPInBooks()) { // XXX Don't allow looping through same order books. @@ -298,19 +298,42 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax } else { - // Last element is for non-XRP continue by adding ripple lines and order books. + // Last element is for non-XRP, continue by adding ripple lines and order books. // Create new paths for each outbound account not already in the path. AccountItems rippleLines(speEnd.mAccountID, mLedger, AccountItem::pointer(new RippleState())); BOOST_FOREACH(AccountItem::ref item, rippleLines.getItems()) { - RippleState* line=(RippleState*)item.get(); + RippleState* rspEntry = (RippleState*) item.get(); - if (!spPath.hasSeen(line->getAccountIDPeer().getAccountID())) + if (spPath.hasSeen(rspEntry->getAccountIDPeer().getAccountID())) { + // Peer is in path already. Ignore it to avoid a loop. + cLog(lsDEBUG) << + boost::str(boost::format("findPaths: SEEN: %s/%s --> %s/%s") + % RippleAddress::createHumanAccountID(speEnd.mAccountID) + % STAmount::createHumanCurrency(speEnd.mCurrencyID) + % RippleAddress::createHumanAccountID(rspEntry->getAccountIDPeer().getAccountID()) + % STAmount::createHumanCurrency(speEnd.mCurrencyID)); + } + else if (!rspEntry->getBalance().isPositive() // Have IOUs to send. + && (!rspEntry->getLimitPeer() // Peer does not extend credit. + || *rspEntry->getBalance().negate() >= rspEntry->getLimitPeer())) // No credit left. + { + // Path has no credit left. Ignore it. + cLog(lsDEBUG) << + boost::str(boost::format("findPaths: No credit: %s/%s --> %s/%s") + % RippleAddress::createHumanAccountID(speEnd.mAccountID) + % STAmount::createHumanCurrency(speEnd.mCurrencyID) + % RippleAddress::createHumanAccountID(rspEntry->getAccountIDPeer().getAccountID()) + % STAmount::createHumanCurrency(speEnd.mCurrencyID)); + } + else + { + // Can transmit IOUs. STPath new_path(spPath); - STPathElement new_ele(line->getAccountIDPeer().getAccountID(), + STPathElement new_ele(rspEntry->getAccountIDPeer().getAccountID(), speEnd.mCurrencyID, uint160()); @@ -318,7 +341,7 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax boost::str(boost::format("findPaths: %s/%s --> %s/%s") % RippleAddress::createHumanAccountID(speEnd.mAccountID) % STAmount::createHumanCurrency(speEnd.mCurrencyID) - % RippleAddress::createHumanAccountID(line->getAccountIDPeer().getAccountID()) + % RippleAddress::createHumanAccountID(rspEntry->getAccountIDPeer().getAccountID()) % STAmount::createHumanCurrency(speEnd.mCurrencyID)); new_path.mPath.push_back(new_ele); @@ -326,15 +349,6 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax bContinued = true; } - else - { - cLog(lsDEBUG) << - boost::str(boost::format("findPaths: SEEN: %s/%s --> %s/%s") - % RippleAddress::createHumanAccountID(speEnd.mAccountID) - % STAmount::createHumanCurrency(speEnd.mCurrencyID) - % RippleAddress::createHumanAccountID(line->getAccountIDPeer().getAccountID()) - % STAmount::createHumanCurrency(speEnd.mCurrencyID)); - } } // Every book that wants the source currency. @@ -448,6 +462,8 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax cLog(lsDEBUG) << boost::str(boost::format("findPaths: no ledger")); } + cLog(lsDEBUG) << boost::str(boost::format("findPaths< bFound=%d") % bFound); + return bFound; } From ec85d58bdf9077cc1d9220b0448dacfd1f9477d2 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 17:50:39 -0800 Subject: [PATCH 237/525] UT: Add UT for issue #5. --- test/path-test.js | 110 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/test/path-test.js b/test/path-test.js index 70e4ebec3..f2faae6a2 100644 --- a/test/path-test.js +++ b/test/path-test.js @@ -660,4 +660,114 @@ buster.testCase("More Path finding", { // Test alternative paths with qualities. }); + +buster.testCase("Path negatives", { + // 'setUp' : testutils.build_setup({ verbose: true, no_server: true }), + // 'setUp' : testutils.build_setup({ verbose: true }), + 'setUp' : testutils.build_setup(), + 'tearDown' : testutils.build_teardown(), + + "=>Issue #5" : + // alice +- bitstamp -+ bob + // |- carol(fee) -| // To be excluded. + // |- dan(issue) -| + // |- mtgox -| + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "carol", "dan"], callback); + }, + function (callback) { + self.what = "Set credit limits."; + + testutils.credit_limits(self.remote, + { + // 2. acct 4 trusted all the other accts for 100 usd + "dan" : [ "100/USD/alice", "100/USD/bob", "100/USD/carol" ], + // 3. acct 2 acted as a nexus for acct 1 and 3, was trusted by 1 and 3 for 100 usd + "alice" : [ "100/USD/bob" ], + "carol" : [ "100/USD/bob" ], + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + // 4. acct 2 sent acct 3 a 75 iou + "bob" : "25/USD/carol", + }, + callback); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "bob" : [ "-25/USD/carol" ], + "carol" : "25/USD/bob", + }, + callback); + }, +// function (callback) { +// self.what = "Display ledger"; +// +// self.remote.request_ledger('current', true) +// .on('success', function (m) { +// console.log("Ledger: %s", JSON.stringify(m, undefined, 2)); +// +// callback(); +// }) +// .request(); +// }, + function (callback) { + self.what = "Find path from alice to bob"; + + // 5. acct 1 sent a 25 usd iou to acct 2 + self.remote.request_ripple_path_find("alice", "bob", "25/USD/bob", + [ { 'currency' : "USD" } ]) + .on('success', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + // 0 alternatives. + buster.assert.equals(0, m.alternatives.length) + + callback(); + }) + .request(); + }, + function (callback) { + self.what = "alice fails to send to bob."; + + self.remote.transaction() + .payment('alice', 'bob', "25/USD/alice") + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tecPATH_DRY'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances final."; + + testutils.verify_balances(self.remote, + { + "alice" : [ "0/USD/bob", "0/USD/dan"], + "bob" : [ "0/USD/alice", "-25/USD/carol", "0/USD/dan" ], + "carol" : [ "25/USD/bob", "0/USD/dan" ], + "dan" : [ "0/USD/alice", "0/USD/bob", "0/USD/carol" ], + }, + callback); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + } +}); // vim:sw=2:sts=2:ts=8:et From 69a0d5ac164723e6acebd8d5d487c6c498740ccf Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 18:20:58 -0800 Subject: [PATCH 238/525] UT: Remove focus from latest test. --- test/path-test.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/test/path-test.js b/test/path-test.js index f2faae6a2..4b290b2e5 100644 --- a/test/path-test.js +++ b/test/path-test.js @@ -667,11 +667,7 @@ buster.testCase("Path negatives", { 'setUp' : testutils.build_setup(), 'tearDown' : testutils.build_teardown(), - "=>Issue #5" : - // alice +- bitstamp -+ bob - // |- carol(fee) -| // To be excluded. - // |- dan(issue) -| - // |- mtgox -| + "Issue #5" : function (done) { var self = this; From 22a8f576e2b60e006c0858f6e347b5bb61db4129 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 6 Jan 2013 21:21:11 -0800 Subject: [PATCH 239/525] UT: Fix Issue #5 test to use 75/USD not 25/USD. --- test/path-test.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/path-test.js b/test/path-test.js index 4b290b2e5..692a3940c 100644 --- a/test/path-test.js +++ b/test/path-test.js @@ -696,7 +696,7 @@ buster.testCase("Path negatives", { testutils.payments(self.remote, { // 4. acct 2 sent acct 3 a 75 iou - "bob" : "25/USD/carol", + "bob" : "75/USD/carol", }, callback); }, @@ -705,8 +705,8 @@ buster.testCase("Path negatives", { testutils.verify_balances(self.remote, { - "bob" : [ "-25/USD/carol" ], - "carol" : "25/USD/bob", + "bob" : [ "-75/USD/carol" ], + "carol" : "75/USD/bob", }, callback); }, @@ -754,8 +754,8 @@ buster.testCase("Path negatives", { testutils.verify_balances(self.remote, { "alice" : [ "0/USD/bob", "0/USD/dan"], - "bob" : [ "0/USD/alice", "-25/USD/carol", "0/USD/dan" ], - "carol" : [ "25/USD/bob", "0/USD/dan" ], + "bob" : [ "0/USD/alice", "-75/USD/carol", "0/USD/dan" ], + "carol" : [ "75/USD/bob", "0/USD/dan" ], "dan" : [ "0/USD/alice", "0/USD/bob", "0/USD/carol" ], }, callback); From f493ea6478ad73a2c12ec553b72f7a1194b9ea07 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 01:33:14 -0800 Subject: [PATCH 240/525] Be more aggressive about avoiding publishing ledger holes. Make the logic simpler and more sensible. --- src/cpp/ripple/LedgerMaster.cpp | 101 ++++++++++++++++-------- src/cpp/ripple/LedgerMaster.h | 8 +- src/cpp/ripple/ValidationCollection.cpp | 2 +- 3 files changed, 76 insertions(+), 35 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 9c3ab337a..8e2712c1b 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -10,7 +10,7 @@ SETUP_LOG(); #define MIN_VALIDATION_RATIO 150 // 150/256ths of validations of previous ledger -#define MAX_LEDGER_GAP 100 // Don't catch up more than 100 ledgers +#define MAX_LEDGER_GAP 100 // Don't catch up more than 100 ledgers (cannot exceed 256) uint32 LedgerMaster::getCurrentLedgerIndex() { @@ -58,7 +58,7 @@ void LedgerMaster::pushLedger(Ledger::ref newLCL, Ledger::ref newOL, bool fromCo mCurrentLedger = newOL; mEngine.setLedger(newOL); } - checkPublish(newLCL->getHash(), newLCL->getLedgerSeq()); + checkAccept(newLCL->getHash(), newLCL->getLedgerSeq()); } void LedgerMaster::switchLedgers(Ledger::ref lastClosed, Ledger::ref current) @@ -75,7 +75,7 @@ void LedgerMaster::switchLedgers(Ledger::ref lastClosed, Ledger::ref current) assert(!mCurrentLedger->isClosed()); mEngine.setLedger(mCurrentLedger); - checkPublish(lastClosed->getHash(), lastClosed->getLedgerSeq()); + checkAccept(lastClosed->getHash(), lastClosed->getLedgerSeq()); } void LedgerMaster::storeLedger(Ledger::ref ledger) @@ -346,21 +346,18 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) } } -void LedgerMaster::checkPublish(const uint256& hash) +void LedgerMaster::checkAccept(const uint256& hash) { Ledger::pointer ledger = mLedgerHistory.getLedgerByHash(hash); if (ledger) - checkPublish(hash, ledger->getLedgerSeq()); + checkAccept(hash, ledger->getLedgerSeq()); } -void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) -{ // check if we need to publish any held ledgers +void LedgerMaster::checkAccept(const uint256& hash, uint32 seq) +{ // Can we advance the last fully accepted ledger? If so, can we publish? boost::recursive_mutex::scoped_lock ml(mLock); - // FIXME: This code needs to try much more aggressively to fill holes - // before publishing them. - - if (seq <= mLastValidateSeq) + if (mValidLedger && (seq <= mValidLedger->getLedgerSeq())) return; int minVal = mMinValidations; @@ -379,32 +376,73 @@ void LedgerMaster::checkPublish(const uint256& hash, uint32 seq) else if (theApp->getOPs().isNeedNetworkLedger()) minVal = 1; - cLog(lsTRACE) << "Sweeping for ledgers to publish: minval=" << minVal; + if (theApp->getValidations().getTrustedValidationCount(hash) < minVal) // nothing we can do + return; - // See if this ledger have at least the minimum number of validations - Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(seq); - if (ledger && (theApp->getValidations().getTrustedValidationCount(ledger->getHash()) >= minVal)) - { // this ledger (and any priors) can be published - theApp->getOPs().clearNeedNetworkLedger(); - if (ledger->getLedgerSeq() > (mLastValidateSeq + MAX_LEDGER_GAP)) - mLastValidateSeq = ledger->getLedgerSeq() - MAX_LEDGER_GAP; + mLastValidateHash = hash; + mLastValidateSeq = seq; - cLog(lsTRACE) << "Ledger " << ledger->getLedgerSeq() << " can be published"; - for (uint32 pubSeq = mLastValidateSeq + 1; pubSeq <= seq; ++pubSeq) + Ledger::pointer ledger = mLedgerHistory.getLedgerByHash(hash); + if (!ledger) + return; + mValidLedger = ledger; + + tryPublish(); +} + +void LedgerMaster::tryPublish() +{ + boost::recursive_mutex::scoped_lock ml(mLock); + assert(mValidLedger); + + if (!mPubLedger) + { + mPubLedger = mValidLedger; + mPubLedgers.push_back(mValidLedger); + } + else if (mValidLedger->getLedgerSeq() > (mPubLedger->getLedgerSeq() + MAX_LEDGER_GAP)) + { + mPubLedger = mValidLedger; + mPubLedgers.push_back(mValidLedger); + } + else if (mValidLedger->getLedgerSeq() > mPubLedger->getLedgerSeq()) + { + for (uint32 seq = mPubLedger->getLedgerSeq() + 1; seq <= mValidLedger->getLedgerSeq(); ++seq) { - uint256 pubHash = ledger->getLedgerHash(pubSeq); - if (pubHash.isZero()) // CHECKME: Should we double-check validations in this case? - pubHash = mLedgerHistory.getLedgerHash(pubSeq); - if (pubHash.isNonZero()) + cLog(lsDEBUG) << "Trying to publish ledger " << seq; + + Ledger::pointer ledger; + uint256 hash; + + if (seq == mValidLedger->getLedgerSeq()) { - Ledger::pointer ledger = mLedgerHistory.getLedgerByHash(pubHash); - if (ledger) + ledger = mValidLedger; + hash = ledger->getHash(); + } + else + { + hash = mValidLedger->getLedgerHash(seq); + assert(hash.isNonZero()); + ledger = mLedgerHistory.getLedgerByHash(hash); + } + + if (ledger) + { + mPubLedger = ledger; + mPubLedgers.push_back(ledger); + } + else + { + LedgerAcquire::pointer acq = theApp->getMasterLedgerAcquire().findCreate(hash); + if (!acq->isDone()) + break; + else if (acq->isComplete() && !acq->isFailed()) { - mPubLedgers.push_back(ledger); - mValidLedger = ledger; - mLastValidateSeq = ledger->getLedgerSeq(); - mLastValidateHash = ledger->getHash(); + mPubLedger = acq->getLedger(); + mPubLedgers.push_back(mPubLedger); } + else + cLog(lsWARNING) << "Failed to acquire a published ledger"; } } } @@ -436,6 +474,7 @@ void LedgerMaster::pubThread() BOOST_FOREACH(Ledger::ref l, ledgers) { + cLog(lsDEBUG) << "Publishing ledger " << l->getLedgerSeq(); setFullLedger(l); // OPTIMIZEME: This is actually more work than we need to do theApp->getOPs().pubLedger(l); BOOST_FOREACH(callback& c, mOnValidate) diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index dd37c299f..4785ecac1 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -27,7 +27,8 @@ protected: Ledger::pointer mCurrentLedger; // The ledger we are currently processiong Ledger::pointer mFinalizedLedger; // The ledger that most recently closed - Ledger::pointer mValidLedger; // The ledger we most recently fully accepted + Ledger::pointer mValidLedger; // The highest-sequence ledger we have fully accepted + Ledger::pointer mPubLedger; // The last ledger we have published LedgerHistory mLedgerHistory; @@ -120,8 +121,9 @@ public: void addValidateCallback(callback& c) { mOnValidate.push_back(c); } - void checkPublish(const uint256& hash); - void checkPublish(const uint256& hash, uint32 seq); + void checkAccept(const uint256& hash); + void checkAccept(const uint256& hash, uint32 seq); + void tryPublish(); }; #endif diff --git a/src/cpp/ripple/ValidationCollection.cpp b/src/cpp/ripple/ValidationCollection.cpp index c74b13bb8..8101d5f51 100644 --- a/src/cpp/ripple/ValidationCollection.cpp +++ b/src/cpp/ripple/ValidationCollection.cpp @@ -76,7 +76,7 @@ bool ValidationCollection::addValidation(const SerializedValidation::pointer& va cLog(lsINFO) << "Val for " << hash << " from " << signer.humanNodePublic() << " added " << (val->isTrusted() ? "trusted/" : "UNtrusted/") << (isCurrent ? "current" : "stale"); if (val->isTrusted()) - theApp->getLedgerMaster().checkPublish(hash); + theApp->getLedgerMaster().checkAccept(hash); return isCurrent; } From e9fad1a4312773de0316e525977f371b19351056 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 08:47:53 -0800 Subject: [PATCH 241/525] Make the target size more useful. Add visitor functions. --- src/cpp/ripple/TaggedCache.h | 57 +++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 5d24ce68e..60ee849fe 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -31,6 +31,8 @@ public: typedef boost::weak_ptr weak_data_ptr; typedef boost::shared_ptr data_ptr; + typedef bool (*visitor_func)(const c_Key&, c_Data&); + protected: typedef std::pair cache_entry; @@ -43,7 +45,7 @@ protected: mutable boost::recursive_mutex mLock; std::string mName; // Used for logging - int mTargetSize; // Desired number of cache entries + int mTargetSize; // Desired number of cache entries (0 = ignore) int mTargetAge; // Desired maximum cache age cache_type mCache; // Hold strong reference to recent objects @@ -64,6 +66,8 @@ public: void setTargetSize(int size); void setTargetAge(int age); void sweep(); + void visitAll(visitor_func); // Visits all tracked objects, removes selected objects + void visitCached(visitor_func); // Visits all cached objects, uncaches selected objects bool touch(const key_type& key); bool del(const key_type& key, bool valid); @@ -108,16 +112,19 @@ template void TaggedCache::sweep // Pass 1, remove old objects from cache int cacheRemovals = 0; - cache_iterator cit = mCache.begin(); - while (cit != mCache.end()) + if ((mTargetSize == 0) || (mCache.size() > mTargetSize)) { - if (cit->second.first < target) + cache_iterator cit = mCache.begin(); + while (cit != mCache.end()) { - ++cacheRemovals; - mCache.erase(cit++); + if (cit->second.first < target) + { + ++cacheRemovals; + mCache.erase(cit++); + } + else + ++cit; } - else - ++cit; } // Pass 2, remove dead objects from map @@ -139,6 +146,40 @@ template void TaggedCache::sweep ", map = " << mMap.size() << "-" << mapRemovals; } +template void TaggedCache::visitAll(visitor_func func) +{ // Visits all tracked objects, removes selected objects + boost::recursive_mutex::scoped_lock sl(mLock); + + map_iterator mit = mMap.begin(); + while (mit != mMap.end()) + { + data_ptr cachedData = mit->second.lock(); + if (!cachedData) + mMap.erase(mit++); // dead reference found + else if (func(mit->first, mit->second)) + { + mCache.erase(mit->first); + mMap.erase(mit++); + } + else + ++mit; + } +} + +template void TaggedCache::visitCached(visitor_func func) +{ // Visits all cached objects, uncaches selected objects + boost::recursive_mutex::scoped_lock sl(mLock); + + cache_iterator cit = mCache.begin(); + while (cit != mCache.end()) + { + if (func(cit->first, cit->second.second)) + mCache.erase(cit++); + else + ++cit; + } +} + template bool TaggedCache::touch(const key_type& key) { // If present, make current in cache boost::recursive_mutex::scoped_lock sl(mLock); From 6624e31d5aded236947f01c2c34894141b2210ed Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 08:57:20 -0800 Subject: [PATCH 242/525] Clean up old acquires. --- src/cpp/ripple/Application.cpp | 1 + src/cpp/ripple/LedgerAcquire.cpp | 14 ++++++++++++++ src/cpp/ripple/LedgerAcquire.h | 2 ++ 3 files changed, 17 insertions(+) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 2577b55e9..4fce41e78 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -275,6 +275,7 @@ void Application::sweep() mLedgerMaster.sweep(); mTempNodeCache.sweep(); mValidations.sweep(); + getMasterLedgerAcquire().sweep(); mSweepTimer.expires_from_now(boost::posix_time::seconds(60)); mSweepTimer.async_wait(boost::bind(&Application::sweep, this)); } diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 4243fe2fb..719d2e074 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -724,4 +724,18 @@ bool LedgerAcquireMaster::isFailure(const uint256& hash) return mRecentFailures.find(hash) != mRecentFailures.end(); } +void LedgerAcquireMaster::sweep() +{ + boost::mutex::scoped_lock sl(mLock); + + std::map::iterator it = mLedgers.begin(); + while (it != mLedgers.end()) + { + if (it->second->isDone()) + mLedgers.erase(it++); + else + ++it; + } +} + // vim:ts=4 diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index c27e88d38..bda77279e 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -133,6 +133,8 @@ public: void logFailure(const uint256&); bool isFailure(const uint256&); + + void sweep(); }; #endif From 2b479a66c1bc792c3dd16791be48f33a5b7a9787 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 08:57:41 -0800 Subject: [PATCH 243/525] Don't immediately retry a failed acquire. --- src/cpp/ripple/LedgerMaster.cpp | 14 +++++++++----- src/cpp/ripple/LedgerMaster.h | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 8e2712c1b..7876978c5 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -150,17 +150,20 @@ void LedgerMaster::asyncAccept(Ledger::pointer ledger) resumeAcquiring(); } -void LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq) -{ +bool LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq) +{ // return: false = already gave up recently Ledger::pointer ledger = Ledger::loadByIndex(ledgerSeq); if (ledger && (ledger->getHash() == ledgerHash)) { cLog(lsDEBUG) << "Ledger found is database, doing async accept"; mTooFast = true; theApp->getJobQueue().addJob(jtPUBLEDGER, boost::bind(&LedgerMaster::asyncAccept, this, ledger)); - return; + return true; } + if (theApp->getMasterLedgerAcquire().isFailure(ledgerHash)) + return false; + mMissingLedger = theApp->getMasterLedgerAcquire().findCreate(ledgerHash); if (mMissingLedger->isComplete()) { @@ -168,16 +171,17 @@ void LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledger if (lgr && (lgr->getLedgerSeq() == ledgerSeq)) missingAcquireComplete(mMissingLedger); mMissingLedger.reset(); - return; + return true; } else if (mMissingLedger->isDone()) { mMissingLedger.reset(); - return; + return false; } mMissingSeq = ledgerSeq; if (mMissingLedger->setAccept()) mMissingLedger->addOnComplete(boost::bind(&LedgerMaster::missingAcquireComplete, this, _1)); + return true; } void LedgerMaster::missingAcquireComplete(LedgerAcquire::pointer acq) diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 4785ecac1..162b06c8a 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -51,7 +51,7 @@ protected: bool isValidTransaction(const Transaction::pointer& trans); bool isTransactionOnFutureList(const Transaction::pointer& trans); - void acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq); + bool acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq); void asyncAccept(Ledger::pointer); void missingAcquireComplete(LedgerAcquire::pointer); void pubThread(); From ef2f653473ad0191bcd08be462531910fdd72f2d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 09:01:31 -0800 Subject: [PATCH 244/525] Set the accept flag for acquires triggered by the publish logic. --- src/cpp/ripple/LedgerMaster.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 7876978c5..c00dd4fab 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -439,7 +439,10 @@ void LedgerMaster::tryPublish() { LedgerAcquire::pointer acq = theApp->getMasterLedgerAcquire().findCreate(hash); if (!acq->isDone()) + { + acq->setAccept(); break; + } else if (acq->isComplete() && !acq->isFailed()) { mPubLedger = acq->getLedger(); From c4a3f57d9c621cd13cf08c331d98c4d0c6d2cc5f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 10:22:26 -0800 Subject: [PATCH 245/525] Respond to server pings with pongs. (Pings are currently not sent.) --- src/cpp/ripple/Peer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index d3fbd0e9c..d68d98030 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1157,6 +1157,11 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) void Peer::recvPing(ripple::TMPing& packet) { + if (packet.type() == ripple::TMPing::PING) + { + packet.set_type(ripple::TMPing::PONG); + sendPacket(boost::make_shared(packet, ripple::mtPING)); + } } void Peer::recvErrorMessage(ripple::TMErrorMsg& packet) From ba7902618510a937a3cce9f43ca06ff5ca6ebcb7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 14:34:11 -0800 Subject: [PATCH 246/525] Handle pongs. Ready timer for ping timing. --- src/cpp/ripple/Peer.cpp | 21 +++++++++++++-------- src/cpp/ripple/Peer.h | 3 ++- src/cpp/ripple/ripple.proto | 4 ++-- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index d68d98030..8727f9ae9 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -27,9 +27,10 @@ DECLARE_INSTANCE(Peer); Peer::Peer(boost::asio::io_service& io_service, boost::asio::ssl::context& ctx, uint64 peerID) : mHelloed(false), mDetaching(false), + mActive(true), mPeerId(peerID), mSocketSsl(io_service, ctx), - mVerifyTimer(io_service) + mActivityTimer(io_service) { cLog(lsDEBUG) << "CREATING PEER: " << ADDRESS(this); } @@ -91,7 +92,7 @@ void Peer::detach(const char *rsn) mSendQ.clear(); - (void) mVerifyTimer.cancel(); + (void) mActivityTimer.cancel(); mSocketSsl.async_shutdown(boost::bind(&Peer::handleShutdown, shared_from_this(), boost::asio::placeholders::error)); if (mNodePublic.isValid()) @@ -168,8 +169,8 @@ void Peer::connect(const std::string& strIp, int iPort) } else { - mVerifyTimer.expires_from_now(boost::posix_time::seconds(NODE_VERIFY_SECONDS), err); - mVerifyTimer.async_wait(boost::bind(&Peer::handleVerifyTimer, shared_from_this(), + mActivityTimer.expires_from_now(boost::posix_time::seconds(NODE_VERIFY_SECONDS), err); + mActivityTimer.async_wait(boost::bind(&Peer::handleVerifyTimer, shared_from_this(), boost::asio::placeholders::error)); if (err) @@ -611,8 +612,8 @@ void Peer::recvHello(ripple::TMHello& packet) { bool bDetach = true; - // Cancel verification timeout. - (void) mVerifyTimer.cancel(); + // Cancel verification timeout. - FIXME Start ping/pong timer + (void) mActivityTimer.cancel(); uint32 ourTime = theApp->getOPs().getNetworkTimeNC(); uint32 minTime = ourTime - 20; @@ -1157,11 +1158,15 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) void Peer::recvPing(ripple::TMPing& packet) { - if (packet.type() == ripple::TMPing::PING) + if (packet.type() == ripple::TMPing::ptPING) { - packet.set_type(ripple::TMPing::PONG); + packet.set_type(ripple::TMPing::ptPONG); sendPacket(boost::make_shared(packet, ripple::mtPING)); } + else if (packet.type() == ripple::TMPing::ptPONG) + { + mActive = true; + } } void Peer::recvErrorMessage(ripple::TMErrorMsg& packet) diff --git a/src/cpp/ripple/Peer.h b/src/cpp/ripple/Peer.h index 79a20649f..89bfb3e87 100644 --- a/src/cpp/ripple/Peer.h +++ b/src/cpp/ripple/Peer.h @@ -36,6 +36,7 @@ private: bool mClientConnect; // In process of connecting as client. bool mHelloed; // True, if hello accepted. bool mDetaching; // True, if detaching. + bool mActive; RippleAddress mNodePublic; // Node public key of peer. ipPort mIpPort; ipPort mIpPortConnect; @@ -50,7 +51,7 @@ private: boost::asio::ssl::stream mSocketSsl; - boost::asio::deadline_timer mVerifyTimer; + boost::asio::deadline_timer mActivityTimer; void handleStart(const boost::system::error_code& ecResult); void handleVerifyTimer(const boost::system::error_code& ecResult); diff --git a/src/cpp/ripple/ripple.proto b/src/cpp/ripple/ripple.proto index e0d6c3257..0cb6c45ba 100644 --- a/src/cpp/ripple/ripple.proto +++ b/src/cpp/ripple/ripple.proto @@ -292,8 +292,8 @@ message TMLedgerData { message TMPing { enum pingType { - PING = 0; // we want a reply - PONG = 1; // this is a reply + ptPING = 0; // we want a reply + ptPONG = 1; // this is a reply } required pingType type = 1; optional uint32 seq = 2; // detect stale replies, ensure other side is reading From ecc04b21f379a8aac661a1b177226fb3d8117e02 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 14:42:46 -0800 Subject: [PATCH 247/525] Be smarter about when we clean up ledger acquires. --- src/cpp/ripple/LedgerAcquire.cpp | 13 ++++++++++++- src/cpp/ripple/LedgerAcquire.h | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 719d2e074..2d008260a 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -20,6 +20,7 @@ DECLARE_INSTANCE(LedgerAcquire); PeerSet::PeerSet(const uint256& hash, int interval) : mHash(hash), mTimerInterval(interval), mTimeouts(0), mComplete(false), mFailed(false), mProgress(true), mTimer(theApp->getIOService()) { + mLastAction = time(NULL); assert((mTimerInterval > 10) && (mTimerInterval < 30000)); } @@ -170,6 +171,7 @@ void LedgerAcquire::done() if (mSignaled) return; mSignaled = true; + touch(); #ifdef LA_DEBUG cLog(lsTRACE) << "Done acquiring ledger " << mHash; #endif @@ -559,7 +561,10 @@ LedgerAcquire::pointer LedgerAcquireMaster::findCreate(const uint256& hash) boost::mutex::scoped_lock sl(mLock); LedgerAcquire::pointer& ptr = mLedgers[hash]; if (ptr) + { + ptr->touch(); return ptr; + } ptr = boost::make_shared(hash); ptr->addPeers(); ptr->setTimer(); // Cannot call in constructor @@ -572,7 +577,10 @@ LedgerAcquire::pointer LedgerAcquireMaster::find(const uint256& hash) boost::mutex::scoped_lock sl(mLock); std::map::iterator it = mLedgers.find(hash); if (it != mLedgers.end()) + { + it->second->touch(); return it->second; + } return LedgerAcquire::pointer(); } @@ -726,12 +734,15 @@ bool LedgerAcquireMaster::isFailure(const uint256& hash) void LedgerAcquireMaster::sweep() { + time_t now = time(NULL); boost::mutex::scoped_lock sl(mLock); std::map::iterator it = mLedgers.begin(); while (it != mLedgers.end()) { - if (it->second->isDone()) + if (it->second->getLastAction() > now) + it->second->touch(); + else if ((it->second->getLastAction() + 500) < now) mLedgers.erase(it++); else ++it; diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index bda77279e..2ef1384d7 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -26,6 +26,7 @@ protected: uint256 mHash; int mTimerInterval, mTimeouts; bool mComplete, mFailed, mProgress; + time_t mLastAction; boost::recursive_mutex mLock; boost::asio::deadline_timer mTimer; @@ -45,6 +46,8 @@ public: void progress() { mProgress = true; } bool isProgress() { return mProgress; } + void touch() { mLastAction = time(NULL); } + time_t getLastAction() { return mLastAction; } void peerHas(Peer::ref); void badPeer(Peer::ref); From c2a4cc8321d22f80d5e56a0d2db83297993dd2b3 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 14:44:18 -0800 Subject: [PATCH 248/525] Get rid of transaction acquire entries ASAP. --- src/cpp/ripple/LedgerConsensus.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 2c48a0f63..27c6b1daf 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -45,6 +45,7 @@ void TransactionAcquire::done() mMap->setImmutable(); theApp->getOPs().mapComplete(mHash, mMap); } + theApp->getMasterLedgerAcquire().dropLedger(mHash); } void TransactionAcquire::onTimer(bool progress) From 69f42e6f02b50c40474016cc600ed409c62eabfb Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 22:47:16 -0800 Subject: [PATCH 249/525] Fix a bug that causes excessive GetObjByHash queries. --- src/cpp/ripple/LedgerAcquire.cpp | 5 ++++- src/cpp/ripple/Peer.cpp | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 2d008260a..9f11893af 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -225,6 +225,9 @@ void LedgerAcquire::trigger(Peer::ref peer) cLog(lsTRACE) << "base=" << mHaveBase << " tx=" << mHaveTransactions << " as=" << mHaveState; } + if (!mHaveBase) + tryLocal(); + ripple::TMGetLedger tmGL; tmGL.set_ledgerhash(mHash.begin(), mHash.size()); if (getTimeouts() != 0) @@ -244,6 +247,7 @@ void LedgerAcquire::trigger(Peer::ref peer) bool typeSet = false; BOOST_FOREACH(neededHash_t& p, need) { + theApp->getOPs().addWantedHash(p.second); if (!typeSet) { tmBH.set_type(p.first); @@ -251,7 +255,6 @@ void LedgerAcquire::trigger(Peer::ref peer) } if (p.first == tmBH.type()) { - theApp->getOPs().addWantedHash(p.second); ripple::TMIndexedObject *io = tmBH.add_objects(); io->set_hash(p.second.begin(), p.second.size()); } diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 8727f9ae9..ed231fe4f 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1117,7 +1117,8 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) } } } - cLog(lsDEBUG) << "GetObjByHash query: had " << reply.objects_size() << " of " << packet.objects_size(); + cLog(lsDEBUG) << "GetObjByHash query: had " << reply.objects_size() << " of " << packet.objects_size() + << " for " << getIP(); sendPacket(boost::make_shared(packet, ripple::mtGET_OBJECTS)); } else @@ -1151,6 +1152,8 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) else theApp->getHashedObjectStore().store(type, seq, data, hash); } + else + cLog(lsWARNING) << "Received unwanted hash from peer " << getIP(); } } } From 7a2f098ac4de9a1d9b39f6b858d81fb38d689aac Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 23:47:21 -0800 Subject: [PATCH 250/525] Reduce some chatty logging. --- src/cpp/ripple/Ledger.cpp | 2 +- src/cpp/ripple/LedgerConsensus.cpp | 16 ++++++++-------- src/cpp/ripple/LedgerMaster.cpp | 2 +- src/cpp/ripple/Peer.cpp | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 803f24004..c95c13a6a 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -506,7 +506,7 @@ Ledger::pointer Ledger::getSQL(const std::string& sql) db->endIterRows(); } - Log(lsTRACE) << "Constructing ledger " << ledgerSeq << " from SQL"; +// Log(lsTRACE) << "Constructing ledger " << ledgerSeq << " from SQL"; Ledger::pointer ret = boost::make_shared(prevHash, transHash, accountHash, totCoins, closingTime, prevClosingTime, closeFlags, closeResolution, ledgerSeq); if (ret->getHash() != ledgerHash) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 27c6b1daf..3280b6e5b 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -569,7 +569,7 @@ void LedgerConsensus::statusChange(ripple::NodeEvent event, Ledger& ledger) s.set_ledgerhash(hash.begin(), hash.size()); PackedMessage::pointer packet = boost::make_shared(s, ripple::mtSTATUS_CHANGE); theApp->getConnectionPool().relayMessage(NULL, packet); - cLog(lsINFO) << "send status change to peer"; + cLog(lsTRACE) << "send status change to peer"; } int LedgerConsensus::startup() @@ -974,7 +974,7 @@ bool LedgerConsensus::peerPosition(const LedgerProposal::pointer& newPosition) } - cLog(lsINFO) << "Processing peer proposal " << newPosition->getProposeSeq() << "/" << newPosition->getCurrentHash(); + cLog(lsTRACE) << "Processing peer proposal " << newPosition->getProposeSeq() << "/" << newPosition->getCurrentHash(); currentPosition = newPosition; SHAMap::pointer set = getTransactionTree(newPosition->getCurrentHash(), true); @@ -1216,9 +1216,9 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) // write out dirty nodes (temporarily done here) Most come before setAccepted int fc; while ((fc = SHAMap::flushDirty(*acctNodes, 256, hotACCOUNT_NODE, newLCL->getLedgerSeq())) > 0) - { cLog(lsINFO) << "Flushed " << fc << " dirty state nodes"; } + { cLog(lsTRACE) << "Flushed " << fc << " dirty state nodes"; } while ((fc = SHAMap::flushDirty(*txnNodes, 256, hotTRANSACTION_NODE, newLCL->getLedgerSeq())) > 0) - { cLog(lsINFO) << "Flushed " << fc << " dirty transaction nodes"; } + { cLog(lsTRACE) << "Flushed " << fc << " dirty transaction nodes"; } bool closeTimeCorrect = true; if (closeTime == 0) @@ -1227,11 +1227,11 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) closeTime = mPreviousLedger->getCloseTimeNC() + 1; } - cLog(lsINFO) << "Report: Prop=" << (mProposing ? "yes" : "no") << " val=" << (mValidating ? "yes" : "no") << + cLog(lsDEBUG) << "Report: Prop=" << (mProposing ? "yes" : "no") << " val=" << (mValidating ? "yes" : "no") << " corLCL=" << (mHaveCorrectLCL ? "yes" : "no") << " fail="<< (mConsensusFail ? "yes" : "no"); - cLog(lsINFO) << "Report: Prev = " << mPrevLedgerHash << ":" << mPreviousLedger->getLedgerSeq(); - cLog(lsINFO) << "Report: TxSt = " << set->getHash() << ", close " << closeTime << (closeTimeCorrect ? "" : "X"); - cLog(lsINFO) << "Report: NewL = " << newLCL->getHash() << ":" << newLCL->getLedgerSeq(); + cLog(lsDEBUG) << "Report: Prev = " << mPrevLedgerHash << ":" << mPreviousLedger->getLedgerSeq(); + cLog(lsDEBUG) << "Report: TxSt = " << set->getHash() << ", close " << closeTime << (closeTimeCorrect ? "" : "X"); + cLog(lsDEBUG) << "Report: NewL = " << newLCL->getHash() << ":" << newLCL->getLedgerSeq(); newLCL->setAccepted(closeTime, mCloseResolution, closeTimeCorrect); newLCL->updateHash(); diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index c00dd4fab..f1bb857f8 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -155,7 +155,7 @@ bool LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledger Ledger::pointer ledger = Ledger::loadByIndex(ledgerSeq); if (ledger && (ledger->getHash() == ledgerHash)) { - cLog(lsDEBUG) << "Ledger found is database, doing async accept"; + cLog(lsDEBUG) << "Ledger hash found in database"; mTooFast = true; theApp->getJobQueue().addJob(jtPUBLEDGER, boost::bind(&LedgerMaster::asyncAccept, this, ledger)); return true; diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index ed231fe4f..a73383a43 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1117,7 +1117,7 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) } } } - cLog(lsDEBUG) << "GetObjByHash query: had " << reply.objects_size() << " of " << packet.objects_size() + cLog(lsTRACE) << "GetObjByHash query: had " << reply.objects_size() << " of " << packet.objects_size() << " for " << getIP(); sendPacket(boost::make_shared(packet, ripple::mtGET_OBJECTS)); } @@ -1485,7 +1485,7 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) if(map->getNodeFat(mn, nodeIDs, rawNodes, fatRoot, fatLeaves)) { assert(nodeIDs.size() == rawNodes.size()); - cLog(lsDEBUG) << "getNodeFat got " << rawNodes.size() << " nodes"; + cLog(lsTRACE) << "getNodeFat got " << rawNodes.size() << " nodes"; std::vector::iterator nodeIDIterator; std::list< std::vector >::iterator rawNodeIterator; for(nodeIDIterator = nodeIDs.begin(), rawNodeIterator = rawNodes.begin(); From cc2588aba276eef3e4a8ec0e5a8c06cd97433338 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 23:47:39 -0800 Subject: [PATCH 251/525] Make it possible to start from a specific chosen ledger. --- src/cpp/ripple/Application.cpp | 36 ++++++++++++++++++++++------------ src/cpp/ripple/Application.h | 2 +- src/cpp/ripple/Config.h | 1 + src/cpp/ripple/main.cpp | 11 ++++++++++- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 4fce41e78..60255b55d 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -129,7 +129,7 @@ void Application::run() { cLog(lsINFO) << "Loading Old Ledger"; - loadOldLedger(); + loadOldLedger(theConfig.START_LEDGER); } else if (theConfig.START_UP == Config::NETWORK) { // This should probably become the default once we have a stable network @@ -317,44 +317,54 @@ void Application::startNewLedger() } } -void Application::loadOldLedger() +void Application::loadOldLedger(const std::string& l) { try { - Ledger::pointer lastLedger = Ledger::getLastFullLedger(); + Ledger::pointer loadLedger; + if (l.empty() || (l == "latest")) + loadLedger = Ledger::getLastFullLedger(); + if (l.length() == 64) + { + uint256 hash; + hash.SetHex(l); + loadLedger = Ledger::loadByHash(hash); + } + else + loadLedger = Ledger::loadByIndex(boost::lexical_cast(l)); - if (!lastLedger) + if (!loadLedger) { cLog(lsFATAL) << "No Ledger found?" << std::endl; exit(-1); } - lastLedger->setClosed(); + loadLedger->setClosed(); - cLog(lsINFO) << "Loading ledger " << lastLedger->getHash() << " seq:" << lastLedger->getLedgerSeq(); + cLog(lsINFO) << "Loading ledger " << loadLedger->getHash() << " seq:" << loadLedger->getLedgerSeq(); - if (lastLedger->getAccountHash().isZero()) + if (loadLedger->getAccountHash().isZero()) { cLog(lsFATAL) << "Ledger is empty."; assert(false); exit(-1); } - if (!lastLedger->walkLedger()) + if (!loadLedger->walkLedger()) { cLog(lsFATAL) << "Ledger is missing nodes."; exit(-1); } - if (!lastLedger->assertSane()) + if (!loadLedger->assertSane()) { cLog(lsFATAL) << "Ledger is not sane."; exit(-1); } - mLedgerMaster.setLedgerRangePresent(0, lastLedger->getLedgerSeq()); + mLedgerMaster.setLedgerRangePresent(loadLedger->getLedgerSeq(), loadLedger->getLedgerSeq()); - Ledger::pointer openLedger = boost::make_shared(false, boost::ref(*lastLedger)); - mLedgerMaster.switchLedgers(lastLedger, openLedger); - mNetOps.setLastCloseTime(lastLedger->getCloseTimeNC()); + Ledger::pointer openLedger = boost::make_shared(false, boost::ref(*loadLedger)); + mLedgerMaster.switchLedgers(loadLedger, openLedger); + mNetOps.setLastCloseTime(loadLedger->getCloseTimeNC()); } catch (SHAMapMissingNode& mn) { diff --git a/src/cpp/ripple/Application.h b/src/cpp/ripple/Application.h index 31772c30a..ca1561379 100644 --- a/src/cpp/ripple/Application.h +++ b/src/cpp/ripple/Application.h @@ -84,7 +84,7 @@ class Application boost::recursive_mutex mPeerMapLock; void startNewLedger(); - void loadOldLedger(); + void loadOldLedger(const std::string&); public: Application(); diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index c97f5495d..04544dd2a 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -65,6 +65,7 @@ public: enum StartUpType { FRESH, NORMAL, LOAD, NETWORK }; StartUpType START_UP; + std::string START_LEDGER; // Database std::string DATABASE_PATH; diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index 6f11ae808..0373dccad 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -102,6 +102,7 @@ int main(int argc, char* argv[]) ("quiet,q", "Reduce diagnotics.") ("verbose,v", "Verbose logging.") ("load", "Load the current ledger from the local DB.") + ("ledger", po::value(), "Load the specified ledger and start from .") ("start", "Start from a fresh Ledger.") ("net", "Get the initial ledger from the network.") ; @@ -171,7 +172,15 @@ int main(int argc, char* argv[]) } if (vm.count("start")) theConfig.START_UP = Config::FRESH; - else if (vm.count("load")) theConfig.START_UP = Config::LOAD; + if (vm.count("ledger")) + { + theConfig.START_LEDGER = vm["ledger"].as(); + theConfig.START_UP = Config::LOAD; + } + else if (vm.count("load")) + { + theConfig.START_UP = Config::LOAD; + } else if (vm.count("net")) theConfig.START_UP = Config::NETWORK; if (iResult) From fc1dc50afce8ccd94d8a1c015364ba33b02310bb Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 7 Jan 2013 23:57:06 -0800 Subject: [PATCH 252/525] Ledger load fixes. Quick and dirty check for filesystme space. --- src/cpp/ripple/Application.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 60255b55d..8ec614bc6 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -127,7 +127,7 @@ void Application::run() } else if (theConfig.START_UP == Config::LOAD) { - cLog(lsINFO) << "Loading Old Ledger"; + cLog(lsINFO) << "Loading specified Ledger"; loadOldLedger(theConfig.START_LEDGER); } @@ -270,6 +270,14 @@ void Application::run() void Application::sweep() { + + boost::filesystem::space_info space = boost::filesystem::space(theConfig.DATA_DIR); + if (space.available < (128 * 1024 * 1024)) + { + cLog(lsFATAL) << "Remaining free disk space is less than 128MB"; + theApp->stop(); + } + mMasterTransaction.sweep(); mHashedObjectStore.sweep(); mLedgerMaster.sweep(); @@ -324,13 +332,13 @@ void Application::loadOldLedger(const std::string& l) Ledger::pointer loadLedger; if (l.empty() || (l == "latest")) loadLedger = Ledger::getLastFullLedger(); - if (l.length() == 64) - { + else if (l.length() == 64) + { // by hash uint256 hash; hash.SetHex(l); loadLedger = Ledger::loadByHash(hash); } - else + else // assume by sequence loadLedger = Ledger::loadByIndex(boost::lexical_cast(l)); if (!loadLedger) @@ -368,7 +376,12 @@ void Application::loadOldLedger(const std::string& l) } catch (SHAMapMissingNode& mn) { - cLog(lsFATAL) << "Cannot load ledger. " << mn; + cLog(lsFATAL) << "Data is missing for selected ledger"; + exit(-1); + } + catch (boost::bad_lexical_cast& blc) + { + cLog(lsFATAL) << "Ledger specified '" << l << "' is not valid"; exit(-1); } } From e34dafa8398dffa04dd370b836777eed1c3c0685 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 00:32:54 -0800 Subject: [PATCH 253/525] Log some additional info. --- src/cpp/ripple/Peer.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index a73383a43..f3098af32 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1301,6 +1301,8 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) if (packet.has_requestcookie()) reply.set_requestcookie(packet.requestcookie()); + std::string logMe; + if (packet.itype() == ripple::liTS_CANDIDATE) { // Request is for a transaction candidate set cLog(lsINFO) << "Received request for TX candidate set data " << getIP(); @@ -1360,6 +1362,7 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) return; } memcpy(ledgerhash.begin(), packet.ledgerhash().data(), 32); + logMe += "LedgerHash:"; logMe += ledgerhash.GetHex(); ledger = theApp->getLedgerMaster().getLedgerByHash(ledgerhash); tLog(!ledger, lsINFO) << "Don't have ledger " << ledgerhash; @@ -1457,9 +1460,15 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) } if (packet.itype() == ripple::liTX_NODE) + { map = ledger->peekTransactionMap(); + logMe += " TX:"; logMe += map->getHash().GetHex(); + } else if (packet.itype() == ripple::liAS_NODE) + { map = ledger->peekAccountStateMap(); + logMe += " AS:"; logMe += map->getHash().GetHex(); + } } if ((!map) || (packet.nodeids_size() == 0)) @@ -1469,6 +1478,7 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) return; } + cLog(lsINFO) << "Request: " << logMe; for(int i = 0; i < packet.nodeids().size(); ++i) { SHAMapNode mn(packet.nodeids(i).data(), packet.nodeids(i).size()); From 69ac1394856a1bc05c3fc6e6dd738efbbfab76eb Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 00:36:13 -0800 Subject: [PATCH 254/525] Reduce log spew. --- src/cpp/ripple/LedgerMaster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index f1bb857f8..0a4e48b92 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -237,7 +237,7 @@ void LedgerMaster::resumeAcquiring() } if (shouldAcquire(mCurrentLedger->getLedgerSeq(), theConfig.LEDGER_HISTORY, prevMissing)) { - cLog(lsINFO) << "Resuming at " << prevMissing; + cLog(lsTRACE) << "Resuming at " << prevMissing; assert(!mCompleteLedgers.hasValue(prevMissing)); Ledger::pointer nextLedger = getLedgerBySeq(prevMissing + 1); if (nextLedger) From 2a657a33c99555a6a8b638361759a7874b8cb9d9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 00:41:07 -0800 Subject: [PATCH 255/525] Make sure we leave need network ledger mode. --- src/cpp/ripple/LedgerMaster.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 0a4e48b92..76c8795d9 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -456,6 +456,7 @@ void LedgerMaster::tryPublish() if (!mPubLedgers.empty() && !mPubThread) { + theApp->getOPs().clearNeedNetworkLedger(); mPubThread = true; theApp->getJobQueue().addJob(jtPUBLEDGER, boost::bind(&LedgerMaster::pubThread, this)); } From 2626368b26f6a1ccc9f0749119a4e534ca86a4d9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 01:00:48 -0800 Subject: [PATCH 256/525] Remove chatty log. --- src/cpp/ripple/Peer.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index f3098af32..e6bd8ad60 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1350,7 +1350,7 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) } else { // Figure out what ledger they want - cLog(lsINFO) << "Received request for ledger data " << getIP(); + cLog(lsTRACE) << "Received request for ledger data " << getIP(); Ledger::pointer ledger; if (packet.has_ledgerhash()) { @@ -1415,8 +1415,6 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) { if (ledger) Log(lsWARNING) << "Ledger has wrong sequence"; - else - Log(lsWARNING) << "Can't find the ledger they want"; } return; } From 79c3f777aa0d3760343fc8aac2c08acce9d26075 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 01:14:55 -0800 Subject: [PATCH 257/525] Memory fixes. --- src/cpp/ripple/Ledger.cpp | 2 +- src/cpp/ripple/LedgerAcquire.cpp | 2 +- src/cpp/ripple/LedgerHistory.cpp | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index c95c13a6a..2927ce015 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -521,7 +521,7 @@ Ledger::pointer Ledger::getSQL(const std::string& sql) assert(false); return Ledger::pointer(); } - Log(lsDEBUG) << "Loaded ledger: " << ledgerHash; + Log(lsTRACE) << "Loaded ledger: " << ledgerHash; return ret; } diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 9f11893af..ddee47a4c 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -745,7 +745,7 @@ void LedgerAcquireMaster::sweep() { if (it->second->getLastAction() > now) it->second->touch(); - else if ((it->second->getLastAction() + 500) < now) + else if ((it->second->getLastAction() + 60) < now) mLedgers.erase(it++); else ++it; diff --git a/src/cpp/ripple/LedgerHistory.cpp b/src/cpp/ripple/LedgerHistory.cpp index 5bea8e977..159c90168 100644 --- a/src/cpp/ripple/LedgerHistory.cpp +++ b/src/cpp/ripple/LedgerHistory.cpp @@ -10,11 +10,11 @@ #include "Application.h" #ifndef CACHED_LEDGER_NUM -#define CACHED_LEDGER_NUM 128 +#define CACHED_LEDGER_NUM 64 #endif #ifndef CACHED_LEDGER_AGE -#define CACHED_LEDGER_AGE 900 +#define CACHED_LEDGER_AGE 60 #endif // FIXME: Need to clean up ledgers by index at some point @@ -84,6 +84,7 @@ Ledger::pointer LedgerHistory::getLedgerByHash(const uint256& hash) if (!ret) return ret; assert(ret->getHash() == hash); + mLedgersByHash.canonicalize(ret->getHash(), ret); return ret; } From 5eeef9d3fddc1223bf11988e14c777cbe37d78d7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 01:33:40 -0800 Subject: [PATCH 258/525] Accelerated aging for special occasions. --- src/cpp/ripple/TaggedCache.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 60ee849fe..6ef2ca580 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -107,13 +107,26 @@ template void TaggedCache::sweep { boost::recursive_mutex::scoped_lock sl(mLock); - mLastSweep = time(NULL); + time_t mLastSweep = time(NULL); time_t target = mLastSweep - mTargetAge; // Pass 1, remove old objects from cache int cacheRemovals = 0; if ((mTargetSize == 0) || (mCache.size() > mTargetSize)) { + if (mTargetSize != 0) + { + target = mLastSweep - (mTargetAge * mCache.size() / mTargetSize); + if (target > (mLastSweep - 2)) + target = mLastSweep - 2; + + Log(lsINFO, TaggedCachePartition) << mName << " is growing fast " << + mCache.size() << " of " << mTargetSize << + " aging at " << (mLastSweep - target) << " of " << mTargetAge; + } + else + target = mLastSweep - mTargetAge; + cache_iterator cit = mCache.begin(); while (cit != mCache.end()) { From 96eac78174f31e172083193cfa0c00661615ecce Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 01:47:09 -0800 Subject: [PATCH 259/525] To be a recent failure, a failure must be recent. --- src/cpp/ripple/LedgerAcquire.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index ddee47a4c..462ab33ba 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -731,8 +731,25 @@ void LedgerAcquireMaster::logFailure(const uint256& hash) bool LedgerAcquireMaster::isFailure(const uint256& hash) { + time_t now = time(NULL); boost::mutex::scoped_lock sl(mLock); - return mRecentFailures.find(hash) != mRecentFailures.end(); + + std::map::iterator it = mRecentFailures.find(hash); + if (it == mRecentFailures.end()) + return false; + + if (it->second > now) + { + it->second = now; + return true; + } + + if ((it->second + 180) < now) + { + mRecentFailures.erase(it); + return false; + } + return true; } void LedgerAcquireMaster::sweep() From 0229a894451857872f8b77124074f06ae1f8fde2 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 01:53:47 -0800 Subject: [PATCH 260/525] Get the logic right. --- src/cpp/ripple/TaggedCache.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 6ef2ca580..89135fda7 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -116,7 +116,7 @@ template void TaggedCache::sweep { if (mTargetSize != 0) { - target = mLastSweep - (mTargetAge * mCache.size() / mTargetSize); + target = mLastSweep - (mTargetAge * mTargeSize / mCache.size()); if (target > (mLastSweep - 2)) target = mLastSweep - 2; From 59c91d0413be150f18e39f61f233fcbf94b4abea Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 01:54:29 -0800 Subject: [PATCH 261/525] Typo. --- src/cpp/ripple/TaggedCache.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 89135fda7..344425c4b 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -116,7 +116,7 @@ template void TaggedCache::sweep { if (mTargetSize != 0) { - target = mLastSweep - (mTargetAge * mTargeSize / mCache.size()); + target = mLastSweep - (mTargetAge * mTargetSize / mCache.size()); if (target > (mLastSweep - 2)) target = mLastSweep - 2; From c0a64f672c8de87a70c12bed79383891e195fc6f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 02:00:54 -0800 Subject: [PATCH 262/525] Demote a non-serious log that sounds like an error. --- src/cpp/ripple/SHAMapSync.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 4ac682fe8..4873d04b7 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -268,7 +268,7 @@ SMAddNode SHAMap::addKnownNode(const SHAMapNode& node, const std::vector Date: Tue, 8 Jan 2013 02:02:51 -0800 Subject: [PATCH 263/525] Log message less imortant. --- src/cpp/ripple/Peer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index e6bd8ad60..733f4f26b 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1476,7 +1476,7 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) return; } - cLog(lsINFO) << "Request: " << logMe; + cLog(lsDEBUG) << "Request: " << logMe; for(int i = 0; i < packet.nodeids().size(); ++i) { SHAMapNode mn(packet.nodeids(i).data(), packet.nodeids(i).size()); From 120e758f0120732c26448ec46b9bf60560ef88e8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 02:03:29 -0800 Subject: [PATCH 264/525] More reasonable. --- src/cpp/ripple/LedgerHistory.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerHistory.cpp b/src/cpp/ripple/LedgerHistory.cpp index 159c90168..34a0d05d8 100644 --- a/src/cpp/ripple/LedgerHistory.cpp +++ b/src/cpp/ripple/LedgerHistory.cpp @@ -10,11 +10,11 @@ #include "Application.h" #ifndef CACHED_LEDGER_NUM -#define CACHED_LEDGER_NUM 64 +#define CACHED_LEDGER_NUM 96 #endif #ifndef CACHED_LEDGER_AGE -#define CACHED_LEDGER_AGE 60 +#define CACHED_LEDGER_AGE 120 #endif // FIXME: Need to clean up ledgers by index at some point From 8e5ce2dd4cabd439786ba4b003e6b3d8a6dc3eab Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 14:10:49 -0800 Subject: [PATCH 265/525] More debug. --- src/cpp/ripple/Ledger.cpp | 7 +++++++ src/cpp/ripple/LedgerMaster.cpp | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 2927ce015..507922666 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -955,7 +955,10 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) // easy cases if (ledgerIndex > mLedgerSeq) + { + cLog(lsWARNING) << "Can't get seq " << ledgerIndex << " from " << mLedgerSeq << " future"; return uint256(); + } if (ledgerIndex == mLedgerSeq) return getHash(); @@ -978,7 +981,10 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) } if ((ledgerIndex & 0xff) != 0) + { + cLog(lsWARNING) << "Can't get seq " << ledgerIndex << " from " << mLedgerSeq << " past"; return uint256(); + } // in skiplist SLE::pointer hashIndex = getSLE(getLedgerHashIndex(ledgerIndex)); @@ -994,6 +1000,7 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) return vec.at(vec.size() - sDiff - 1); } + cLog(lsWARNING) << "Can't get seq " << ledgerIndex << " from " << mLedgerSeq << " error"; return uint256(); } diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 76c8795d9..71602afaa 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -426,7 +426,12 @@ void LedgerMaster::tryPublish() else { hash = mValidLedger->getLedgerHash(seq); - assert(hash.isNonZero()); + if (hash.isZero()) + { + cLog(lsFATAL) << "Ledger: " << mValidLedger->getLedgerSeq() << " does not have hash for " << + seq; + assert(false); + } ledger = mLedgerHistory.getLedgerByHash(hash); } From fbac342e2e42428f211e115a4737017e6996ec45 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 14:12:45 -0800 Subject: [PATCH 266/525] One more. --- src/cpp/ripple/Ledger.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 507922666..5c735b182 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -978,6 +978,7 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) if (vec.size() >= diff) return vec.at(vec.size() - diff); } + cLog(lsWARNING) << "Ledger " << ledgerIndex << ":" << getHash() << " missing skiplist"; } if ((ledgerIndex & 0xff) != 0) From 607e2039e2cfab99ecca8b8c53406e53a2523025 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 14:50:03 -0800 Subject: [PATCH 267/525] Add negative caching for HashedObject class. This massively reduces contention for the database lock under high network ledger fetch load. --- src/cpp/ripple/HashedObject.cpp | 13 +++- src/cpp/ripple/HashedObject.h | 6 +- src/cpp/ripple/KeyCache.h | 109 ++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 src/cpp/ripple/KeyCache.h diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index 0bd2c8492..288639f63 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -33,6 +33,7 @@ bool HashedObjectStore::store(HashedObjectType type, uint32 index, } assert(hash == Serializer::getSHA512Half(data)); + mNegativeCache.del(hash); HashedObject::pointer object = boost::make_shared(type, index, data, hash); if (!mCache.canonicalize(hash, object)) { @@ -115,6 +116,7 @@ void HashedObjectStore::bulkWrite() HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) { + HashedObject::pointer obj; { obj = mCache.fetch(hash); @@ -125,6 +127,9 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) } } + if (mNegativeCache.isPresent(hash)) + return HashedObject::pointer(); + if (!theApp || !theApp->getHashNodeDB()) return HashedObject::pointer(); std::string sql = "SELECT * FROM CommittedObjects WHERE Hash='"; @@ -139,12 +144,17 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) if (!db->executeSQL(sql) || !db->startIterRows()) { // cLog(lsTRACE) << "HOS: " << hash << " fetch: not in db"; + mNegativeCache.add(hash); return HashedObject::pointer(); } std::string type; db->getStr("ObjType", type); - if (type.size() == 0) return HashedObject::pointer(); + if (type.size() == 0) + { + mNegativeCache.add(hash); + return HashedObject::pointer(); + } uint32 index = db->getBigInt("LedgerIndex"); @@ -164,6 +174,7 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) case 'N': htype = hotTRANSACTION_NODE; break; default: cLog(lsERROR) << "Invalid hashed object"; + mNegativeCache.add(hash); return HashedObject::pointer(); } diff --git a/src/cpp/ripple/HashedObject.h b/src/cpp/ripple/HashedObject.h index 5dd6e641a..05883c2ca 100644 --- a/src/cpp/ripple/HashedObject.h +++ b/src/cpp/ripple/HashedObject.h @@ -10,6 +10,7 @@ #include "uint256.h" #include "ScopedLock.h" #include "TaggedCache.h" +#include "KeyCache.h" #include "InstanceCounter.h" DEFINE_INSTANCE(HashedObject); @@ -45,7 +46,8 @@ public: class HashedObjectStore { protected: - TaggedCache mCache; + TaggedCache mCache; + KeyCache mNegativeCache; boost::mutex mWriteMutex; boost::condition_variable mWriteCondition; @@ -65,7 +67,7 @@ public: void bulkWrite(); void waitWrite(); - void sweep() { mCache.sweep(); } + void sweep() { mCache.sweep(); mNegativeCache.sweep(); } }; #endif diff --git a/src/cpp/ripple/KeyCache.h b/src/cpp/ripple/KeyCache.h new file mode 100644 index 000000000..e5ec5262d --- /dev/null +++ b/src/cpp/ripple/KeyCache.h @@ -0,0 +1,109 @@ +#ifndef KEY_CACHE__H +#define KEY_CACHE__H + +#include +#include + +template class KeyCache +{ // Maintains a cache of keys with no associated data +public: + typedef c_Key key_type; + typedef boost::unordered_map map_type; + typedef typename map_type::iterator map_iterator; + +protected: + boost::mutex mNCLock; + map_type mCache; + int mTargetSize, mTargetAge; + + uint64_t mHits, mMisses; + +public: + + KeyCache(int size = 0, int age = 120) : mTargetSize(size), mTargetAge(age), mHits(0), mMisses(0) + { + assert((mTargetSize >= 0) && (mTargetAge > 2)); + } + + void getStats(int& size, uint64_t& hits, uint64_t& misses) + { + boost::mutex::scoped_lock sl(mNCLock); + + size = mCache.size(); + hits = mHits; + misses = mMisses; + } + + bool isPresent(const key_type& key) + { // Check if an entry is cached, refresh it if so + boost::mutex::scoped_lock sl(mNCLock); + + map_iterator it = mCache.find(key); + if (it == mCache.end()) + { + ++mMisses; + return false; + } + it->second = time(NULL); + ++mHits; + return true; + } + + bool del(const key_type& key) + { // Remove an entry from the cache, return false if not-present + boost::mutex::scoped_lock sl(mNCLock); + + map_iterator it = mCache.find(key); + if (it == mCache.end()) + return false; + + mCache.erase(it); + return true; + } + + bool add(const key_type& key) + { // Add an entry to the cache, return true if it is new + boost::mutex::scoped_lock sl(mNCLock); + + map_iterator it = mCache.find(key); + if (it != mCache.end()) + { + it->second = time(NULL); + return false; + } + mCache.insert(std::make_pair(key, time(NULL))); + return true; + } + + void sweep() + { // Remove stale entries from the cache + time_t now = time(NULL); + boost::mutex::scoped_lock sl(mNCLock); + + time_t target; + if ((mTargetSize == 0) || (mCache.size() <= mTargetSize)) + target = now - mTargetAge; + else + { + target = now - (mTargetAge * mTargetSize / mCache.size()); + if (target > (now - 2)) + target = now - 2; + } + + map_iterator it = mCache.begin(); + while (it != mCache.end()) + { + if (it->second > now) + { + it->second = now; + ++it; + } + else if (it->second < target) + it = mCache.erase(it); + else + ++it; + } + } +}; + +#endif From bbd32faf050a94e90a95d123fe0db771fe873ccc Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 14:50:45 -0800 Subject: [PATCH 268/525] Demote some older logs. --- src/cpp/ripple/LedgerConsensus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 3280b6e5b..fc5ee28cc 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -756,10 +756,10 @@ void LedgerConsensus::updateOurPositions() for (std::map::iterator it = closeTimes.begin(), end = closeTimes.end(); it != end; ++it) { - cLog(lsINFO) << "CCTime: " << it->first << " has " << it->second << ", " << thresh << " required"; + cLog(lsTRACE) << "CCTime: " << it->first << " has " << it->second << ", " << thresh << " required"; if (it->second >= thresh) { - cLog(lsINFO) << "Close time consensus reached: " << it->first; + cLog(lsDEBUG) << "Close time consensus reached: " << it->first; mHaveCloseTimeConsensus = true; closeTime = it->first; thresh = it->second; From 9c9530b50f681394e5ef7cb50d388fd6baece218 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 14:58:23 -0800 Subject: [PATCH 269/525] Add some comments. --- src/cpp/ripple/Ledger.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 5c735b182..f0dcae784 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -526,7 +526,7 @@ Ledger::pointer Ledger::getSQL(const std::string& sql) } Ledger::pointer Ledger::loadByIndex(uint32 ledgerIndex) -{ +{ // This is a low-level function with no caching std::string sql="SELECT * from Ledgers WHERE LedgerSeq='"; sql.append(boost::lexical_cast(ledgerIndex)); sql.append("';"); @@ -534,7 +534,7 @@ Ledger::pointer Ledger::loadByIndex(uint32 ledgerIndex) } Ledger::pointer Ledger::loadByHash(const uint256& ledgerHash) -{ +{ // This is a low-level function with no caching std::string sql="SELECT * from Ledgers WHERE LedgerHash='"; sql.append(ledgerHash.GetHex()); sql.append("';"); From 3712f0f2cbdf9c96a8bfb473fb8507e9bd9004ce Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 15:33:13 -0800 Subject: [PATCH 270/525] Remove a lot of unneeded hashing. --- src/cpp/ripple/SHAMap.cpp | 3 ++- src/cpp/ripple/SHAMap.h | 3 ++- src/cpp/ripple/SHAMapNodes.cpp | 13 +++++++++++-- src/cpp/ripple/SHAMapSync.cpp | 20 ++++++-------------- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/cpp/ripple/SHAMap.cpp b/src/cpp/ripple/SHAMap.cpp index d1b6f4b18..bd9158e52 100644 --- a/src/cpp/ripple/SHAMap.cpp +++ b/src/cpp/ripple/SHAMap.cpp @@ -714,7 +714,8 @@ SHAMapTreeNode::pointer SHAMap::fetchNodeExternal(const SHAMapNode& id, const ui try { - SHAMapTreeNode::pointer ret = boost::make_shared(id, obj->getData(), mSeq - 1, snfPREFIX); + SHAMapTreeNode::pointer ret = + boost::make_shared(id, obj->getData(), mSeq - 1, snfPREFIX, hash); if (id != *ret) { cLog(lsFATAL) << "id:" << id << ", got:" << *ret; diff --git a/src/cpp/ripple/SHAMap.h b/src/cpp/ripple/SHAMap.h index 2c1a444af..e641ed3a2 100644 --- a/src/cpp/ripple/SHAMap.h +++ b/src/cpp/ripple/SHAMap.h @@ -176,7 +176,8 @@ public: SHAMapTreeNode(const SHAMapNode& nodeID, SHAMapItem::ref item, TNType type, uint32 seq); // raw node functions - SHAMapTreeNode(const SHAMapNode& id, const std::vector& data, uint32 seq, SHANodeFormat format); + SHAMapTreeNode(const SHAMapNode& id, const std::vector& data, uint32 seq, + SHANodeFormat format, const uint256& hash); void addRaw(Serializer &, SHANodeFormat format); virtual bool isPopulated() const { return true; } diff --git a/src/cpp/ripple/SHAMapNodes.cpp b/src/cpp/ripple/SHAMapNodes.cpp index 5d6877805..724f70942 100644 --- a/src/cpp/ripple/SHAMapNodes.cpp +++ b/src/cpp/ripple/SHAMapNodes.cpp @@ -197,7 +197,7 @@ SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& node, SHAMapItem::ref item, TNT } SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& id, const std::vector& rawNode, uint32 seq, - SHANodeFormat format) : SHAMapNode(id), mSeq(seq), mType(tnERROR), mFullBelow(false) + SHANodeFormat format, const uint256& hash) : SHAMapNode(id), mSeq(seq), mType(tnERROR), mFullBelow(false) { if (format == snfWIRE) { @@ -326,7 +326,16 @@ SHAMapTreeNode::SHAMapTreeNode(const SHAMapNode& id, const std::vector& nodeIDs, std::vector nodeData; if (filter->haveNode(childID, childHash, nodeData)) { - d = boost::make_shared(childID, nodeData, mSeq, snfPREFIX); - if (childHash != d->getNodeHash()) - { - cLog(lsERROR) << "Wrong hash from cached object"; - d.reset(); - } - else - { - cLog(lsTRACE) << "Got sync node from cache: " << *d; - mTNByID[*d] = d; - } + d = boost::make_shared(childID, nodeData, mSeq, snfPREFIX, childHash); + cLog(lsTRACE) << "Got sync node from cache: " << *d; + mTNByID[*d] = d; } } } @@ -200,7 +192,7 @@ SMAddNode SHAMap::addRootNode(const std::vector& rootNode, SHANod return SMAddNode::okay(); } - SHAMapTreeNode::pointer node = boost::make_shared(SHAMapNode(), rootNode, 0, format); + SHAMapTreeNode::pointer node = boost::make_shared(SHAMapNode(), rootNode, 0, format, uint256()); if (!node) return SMAddNode::invalid(); @@ -240,7 +232,7 @@ SMAddNode SHAMap::addRootNode(const uint256& hash, const std::vector(SHAMapNode(), rootNode, 0, format); + SHAMapTreeNode::pointer node = boost::make_shared(SHAMapNode(), rootNode, 0, format, uint256()); if (!node || node->getNodeHash() != hash) return SMAddNode::invalid(); @@ -318,7 +310,7 @@ SMAddNode SHAMap::addKnownNode(const SHAMapNode& node, const std::vector(node, rawNode, mSeq, snfWIRE); + SHAMapTreeNode::pointer newNode = boost::make_shared(node, rawNode, mSeq, snfWIRE, uint256()); if (hash != newNode->getNodeHash()) // these aren't the droids we're looking for return SMAddNode::invalid(); From aeb7a2af5dc546d28c373b8f78aadef78823c2d2 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 16:16:20 -0800 Subject: [PATCH 271/525] Optimize for the more common case. --- src/cpp/ripple/TaggedCache.h | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 344425c4b..e294e0591 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -286,6 +286,14 @@ boost::shared_ptr TaggedCache::fetch(const key_type& key) { // fetch us a shared pointer to the stored data object boost::recursive_mutex::scoped_lock sl(mLock); + // Is it in the cache? + cache_iterator cit = mCache.find(key); + if (cit != mCache.end()) + { + cit->second.first = time(NULL); // Yes, refresh + return cit->second.second; + } + // Is it in the map? map_iterator mit = mMap.find(key); if (mit == mMap.end()) @@ -298,13 +306,8 @@ boost::shared_ptr TaggedCache::fetch(const key_type& key) return cachedData; } - // Valid in map, is it in the cache? - cache_iterator cit = mCache.find(key); - if (cit != mCache.end()) - cit->second.first = time(NULL); // Yes, refresh - else // No, add to cache - mCache.insert(cache_pair(key, cache_entry(time(NULL), cachedData))); - + // Put it back in the cache + mCache.insert(cache_pair(key, cache_entry(time(NULL), cachedData))); return cachedData; } From c43f6a54dceb26942f596f24a5c96c5189f620d4 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 16:16:35 -0800 Subject: [PATCH 272/525] Optimize uint's operator== and operator!= to not do byte-by-byte compares. --- src/cpp/ripple/uint256.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/uint256.h b/src/cpp/ripple/uint256.h index 89d718f7c..2937be12a 100644 --- a/src/cpp/ripple/uint256.h +++ b/src/cpp/ripple/uint256.h @@ -206,12 +206,12 @@ public: friend inline bool operator==(const base_uint& a, const base_uint& b) { - return !compare(a, b); + return memcmp(a.pn, b.pn, sizeof(a.pn)) == 0; } friend inline bool operator!=(const base_uint& a, const base_uint& b) { - return !!compare(a, b); + return memcmp(a.pn, b.pn, sizeof(a.pn)) != 0; } std::string GetHex() const From 2de1b9eef83017d27860331bcab1a396e58102e3 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 16:23:58 -0800 Subject: [PATCH 273/525] Don't issue bogus 'missing skiplist' messages. --- src/cpp/ripple/Ledger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index f0dcae784..496d01b5c 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -978,7 +978,7 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) if (vec.size() >= diff) return vec.at(vec.size() - diff); } - cLog(lsWARNING) << "Ledger " << ledgerIndex << ":" << getHash() << " missing skiplist"; + else cLog(lsWARNING) << "Ledger " << ledgerIndex << ":" << getHash() << " missing skiplist"; } if ((ledgerIndex & 0xff) != 0) From ee5950b19244f69ce3031af9c06da87376f2dc92 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 16:28:56 -0800 Subject: [PATCH 274/525] Better debug of missing hash issue. --- src/cpp/ripple/Ledger.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 496d01b5c..691ce64e8 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -977,6 +977,8 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) STVector256 vec = hashIndex->getFieldV256(sfHashes); if (vec.size() >= diff) return vec.at(vec.size() - diff); + cLog(lsWARNING) << "Ledger " << mLedgerSeq << " missing hash for " << ledgerIndex + << " (" << vec.size() << "," << diff << ")"; } else cLog(lsWARNING) << "Ledger " << ledgerIndex << ":" << getHash() << " missing skiplist"; } From 26c976f4acc0448e61da829eaa582b6be243246a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 16:57:18 -0800 Subject: [PATCH 275/525] Fix a race condition. --- src/cpp/ripple/SHAMap.cpp | 16 ++++++++-------- src/cpp/ripple/SHAMap.h | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/cpp/ripple/SHAMap.cpp b/src/cpp/ripple/SHAMap.cpp index bd9158e52..ad536e762 100644 --- a/src/cpp/ripple/SHAMap.cpp +++ b/src/cpp/ripple/SHAMap.cpp @@ -365,7 +365,7 @@ void SHAMap::eraseChildren(SHAMapTreeNode::pointer node) static const SHAMapItem::pointer no_item; -SHAMapItem::ref SHAMap::peekFirstItem() +SHAMapItem::pointer SHAMap::peekFirstItem() { boost::recursive_mutex::scoped_lock sl(mLock); SHAMapTreeNode *node = firstBelow(root.get()); @@ -374,7 +374,7 @@ SHAMapItem::ref SHAMap::peekFirstItem() return node->peekItem(); } -SHAMapItem::ref SHAMap::peekFirstItem(SHAMapTreeNode::TNType& type) +SHAMapItem::pointer SHAMap::peekFirstItem(SHAMapTreeNode::TNType& type) { boost::recursive_mutex::scoped_lock sl(mLock); SHAMapTreeNode *node = firstBelow(root.get()); @@ -384,7 +384,7 @@ SHAMapItem::ref SHAMap::peekFirstItem(SHAMapTreeNode::TNType& type) return node->peekItem(); } -SHAMapItem::ref SHAMap::peekLastItem() +SHAMapItem::pointer SHAMap::peekLastItem() { boost::recursive_mutex::scoped_lock sl(mLock); SHAMapTreeNode *node = lastBelow(root.get()); @@ -393,14 +393,14 @@ SHAMapItem::ref SHAMap::peekLastItem() return node->peekItem(); } -SHAMapItem::ref SHAMap::peekNextItem(const uint256& id) +SHAMapItem::pointer SHAMap::peekNextItem(const uint256& id) { SHAMapTreeNode::TNType type; return peekNextItem(id, type); } -SHAMapItem::ref SHAMap::peekNextItem(const uint256& id, SHAMapTreeNode::TNType& type) +SHAMapItem::pointer SHAMap::peekNextItem(const uint256& id, SHAMapTreeNode::TNType& type) { // Get a pointer to the next item in the tree after a given item - item must be in tree boost::recursive_mutex::scoped_lock sl(mLock); @@ -435,7 +435,7 @@ SHAMapItem::ref SHAMap::peekNextItem(const uint256& id, SHAMapTreeNode::TNType& return no_item; } -SHAMapItem::ref SHAMap::peekPrevItem(const uint256& id) +SHAMapItem::pointer SHAMap::peekPrevItem(const uint256& id) { // Get a pointer to the previous item in the tree after a given item - item must be in tree boost::recursive_mutex::scoped_lock sl(mLock); @@ -464,7 +464,7 @@ SHAMapItem::ref SHAMap::peekPrevItem(const uint256& id) return no_item; } -SHAMapItem::ref SHAMap::peekItem(const uint256& id) +SHAMapItem::pointer SHAMap::peekItem(const uint256& id) { boost::recursive_mutex::scoped_lock sl(mLock); SHAMapTreeNode* leaf = walkToPointer(id); @@ -473,7 +473,7 @@ SHAMapItem::ref SHAMap::peekItem(const uint256& id) return leaf->peekItem(); } -SHAMapItem::ref SHAMap::peekItem(const uint256& id, SHAMapTreeNode::TNType& type) +SHAMapItem::pointer SHAMap::peekItem(const uint256& id, SHAMapTreeNode::TNType& type) { boost::recursive_mutex::scoped_lock sl(mLock); SHAMapTreeNode* leaf = walkToPointer(id); diff --git a/src/cpp/ripple/SHAMap.h b/src/cpp/ripple/SHAMap.h index e641ed3a2..afd323fdd 100644 --- a/src/cpp/ripple/SHAMap.h +++ b/src/cpp/ripple/SHAMap.h @@ -397,16 +397,16 @@ public: bool addGiveItem(SHAMapItem::ref, bool isTransaction, bool hasMeta); // save a copy if you only need a temporary - SHAMapItem::ref peekItem(const uint256& id); - SHAMapItem::ref peekItem(const uint256& id, SHAMapTreeNode::TNType& type); + SHAMapItem::pointer peekItem(const uint256& id); + SHAMapItem::pointer peekItem(const uint256& id, SHAMapTreeNode::TNType& type); // traverse functions - SHAMapItem::ref peekFirstItem(); - SHAMapItem::ref peekFirstItem(SHAMapTreeNode::TNType& type); - SHAMapItem::ref peekLastItem(); - SHAMapItem::ref peekNextItem(const uint256&); - SHAMapItem::ref peekNextItem(const uint256&, SHAMapTreeNode::TNType& type); - SHAMapItem::ref peekPrevItem(const uint256&); + SHAMapItem::pointer peekFirstItem(); + SHAMapItem::pointer peekFirstItem(SHAMapTreeNode::TNType& type); + SHAMapItem::pointer peekLastItem(); + SHAMapItem::pointer peekNextItem(const uint256&); + SHAMapItem::pointer peekNextItem(const uint256&, SHAMapTreeNode::TNType& type); + SHAMapItem::pointer peekPrevItem(const uint256&); // comparison/sync functions void getMissingNodes(std::vector& nodeIDs, std::vector& hashes, int max, From 4a4046f4b68e608b59e0bd85cc6c5729626a0e05 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 17:05:10 -0800 Subject: [PATCH 276/525] Some temporary logging to help find/fix a bug. --- src/cpp/ripple/Ledger.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 691ce64e8..76c9d5b3e 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -961,10 +961,16 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) } if (ledgerIndex == mLedgerSeq) + { + cLog(lsWARNING) << ledgerIndex << " found in header"; return getHash(); + } if (ledgerIndex == (mLedgerSeq - 1)) + { + cLog(lsWARNING) << ledgerIndex << " found in parenthash"; return mParentHash; + } // within 256 int diff = mLedgerSeq - ledgerIndex; @@ -976,11 +982,14 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) assert(hashIndex->getFieldU32(sfLastLedgerSequence) == (mLedgerSeq - 1)); STVector256 vec = hashIndex->getFieldV256(sfHashes); if (vec.size() >= diff) + { + cLog(lsWARNING) << ledgerIndex << " found in normal list"; return vec.at(vec.size() - diff); + } cLog(lsWARNING) << "Ledger " << mLedgerSeq << " missing hash for " << ledgerIndex << " (" << vec.size() << "," << diff << ")"; } - else cLog(lsWARNING) << "Ledger " << ledgerIndex << ":" << getHash() << " missing skiplist"; + else cLog(lsWARNING) << "Ledger " << mLedgerSeq << ":" << getHash() << " missing normal list"; } if ((ledgerIndex & 0xff) != 0) @@ -1000,7 +1009,10 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) STVector256 vec = hashIndex->getFieldV256(sfHashes); if (vec.size() > sDiff) + { + cLog(lsWARNING) << ledgerIndex << " found in skip list"; return vec.at(vec.size() - sDiff - 1); + } } cLog(lsWARNING) << "Can't get seq " << ledgerIndex << " from " << mLedgerSeq << " error"; From ef775727d4a820fe7f5ad8fd2e24427731a60a72 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 8 Jan 2013 17:21:31 -0800 Subject: [PATCH 277/525] Reduce some loging. --- src/cpp/ripple/Peer.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 733f4f26b..4c66f6e85 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1368,7 +1368,6 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) tLog(!ledger, lsINFO) << "Don't have ledger " << ledgerhash; if (!ledger && (packet.has_querytype() && !packet.has_requestcookie())) { - cLog(lsINFO) << "Trying to route ledger request"; std::vector peerList = theApp->getConnectionPool().getPeerVector(); std::vector usablePeers; BOOST_FOREACH(Peer::ref peer, peerList) @@ -1378,7 +1377,7 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) } if (usablePeers.empty()) { - cLog(lsINFO) << "Unable to route ledger request"; + cLog(lsDEBUG) << "Unable to route ledger request"; return; } Peer::ref selectedPeer = usablePeers[rand() % usablePeers.size()]; From 8e801158b389e5e9f03738caafbe1d387347a5f1 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 8 Jan 2013 18:04:00 -0800 Subject: [PATCH 278/525] Improve error reporting for account not found. --- src/cpp/ripple/Ledger.cpp | 10 +++++++--- src/cpp/ripple/RPCErr.cpp | 3 ++- src/cpp/ripple/RPCErr.h | 1 + src/cpp/ripple/RPCHandler.cpp | 8 +++++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 76c9d5b3e..dbeb9ab28 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -186,18 +186,22 @@ AccountState::pointer Ledger::getAccountState(const RippleAddress& accountID) #ifdef DEBUG // std::cerr << "Ledger:getAccountState(" << accountID.humanAccountID() << ")" << std::endl; #endif + SHAMapItem::pointer item = mAccountStateMap->peekItem(Ledger::getAccountRootIndex(accountID)); if (!item) { -#ifdef DEBUG -// std::cerr << " notfound" << std::endl; -#endif + cLog(lsDEBUG) << boost::str(boost::format("Ledger:getAccountState: not found: %s: %s") + % accountID.humanAccountID() + % Ledger::getAccountRootIndex(accountID).GetHex()); + return AccountState::pointer(); } + SerializedLedgerEntry::pointer sle = boost::make_shared(item->peekSerializer(), item->getTag()); if (sle->getType() != ltACCOUNT_ROOT) return AccountState::pointer(); + return boost::make_shared(sle,accountID); } diff --git a/src/cpp/ripple/RPCErr.cpp b/src/cpp/ripple/RPCErr.cpp index cbc699a4a..61414aec3 100644 --- a/src/cpp/ripple/RPCErr.cpp +++ b/src/cpp/ripple/RPCErr.cpp @@ -55,7 +55,8 @@ Json::Value rpcError(int iError, Json::Value jvResult) { rpcPUBLIC_MALFORMED, "publicMalformed", "Public key is malformed." }, { rpcQUALITY_MALFORMED, "qualityMalformed", "Quality malformed." }, { rpcSRC_ACT_MALFORMED, "srcActMalformed", "Source account is malformed." }, - { rpcSRC_ACT_MISSING, "srcActMissing", "Source account does not exist." }, + { rpcSRC_ACT_MISSING, "srcActMissing", "Source account not provided." }, + { rpcSRC_ACT_NOT_FOUND, "srcActNotFound", "Source amount not found." }, { rpcSRC_AMT_MALFORMED, "srcAmtMalformed", "Source amount/currency/issuer is malformed." }, { rpcSRC_UNCLAIMED, "srcUnclaimed", "Source account is not claimed." }, { rpcTXN_NOT_FOUND, "txnNotFound", "Transaction not found." }, diff --git a/src/cpp/ripple/RPCErr.h b/src/cpp/ripple/RPCErr.h index 0059b35a4..02dcda008 100644 --- a/src/cpp/ripple/RPCErr.h +++ b/src/cpp/ripple/RPCErr.h @@ -60,6 +60,7 @@ enum { rpcPUBLIC_MALFORMED, rpcSRC_ACT_MALFORMED, rpcSRC_ACT_MISSING, + rpcSRC_ACT_NOT_FOUND, rpcSRC_AMT_MALFORMED, // Internal error (should never happen) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 8c36b7e81..d92163868 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -932,7 +932,13 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) } AccountState::pointer asSrc = mNetOps->getAccountState(mNetOps->getCurrentLedger(), raSrcAddressID); - if (!asSrc) return rpcError(rpcSRC_ACT_MALFORMED); + if (!asSrc) + { + cLog(lsDEBUG) << boost::str(boost::format("doSubmit: Failed to find source account in current ledger: %s") + % raSrcAddressID.humanAccountID()); + + return rpcError(rpcSRC_ACT_NOT_FOUND); + } if ("Payment" == txJSON["TransactionType"].asString()) { From e0a49f875a64b3ad151594b8ef8f7021f18a71c4 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 8 Jan 2013 18:59:59 -0800 Subject: [PATCH 279/525] Fix more RPC error reporting. --- src/cpp/ripple/RPCHandler.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index d92163868..dd2c98a56 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -88,7 +88,7 @@ Json::Value RPCHandler::authorize(Ledger::ref lrLedger, asSrc = mNetOps->getAccountState(lrLedger, naSrcAccountID); if (!asSrc) { - return rpcError(rpcSRC_ACT_MISSING); + return rpcError(rpcSRC_ACT_NOT_FOUND); } RippleAddress naMasterGenerator; @@ -1036,7 +1036,7 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) if (!sleAccountRoot) { // XXX Ignore transactions for accounts not created. - return rpcError(rpcSRC_ACT_MISSING); + return rpcError(rpcSRC_ACT_NOT_FOUND); } bool bHaveAuthKey = false; @@ -1065,7 +1065,7 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) if (!bFound) { - return rpcError(rpcSRC_ACT_MISSING); + return rpcError(rpcSRC_ACT_NOT_FOUND); } // Use the generator to determine the associated public and private keys. @@ -1083,7 +1083,7 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) // std::cerr << "sfAuthorizedKey: " << strHex(asSrc->getAuthorizedKey().getAccountID()) << std::endl; // std::cerr << "naAccountPublic: " << strHex(naAccountPublic.getAccountID()) << std::endl; - return rpcError(rpcSRC_ACT_MISSING); + return rpcError(rpcSRC_ACT_NOT_FOUND); } std::auto_ptr sopTrans; From c74a1b89e3ce69c2c94a9accdf9347d04e1edc6d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 03:08:00 -0800 Subject: [PATCH 280/525] By careful how many GetObjectByHash requests we send. --- src/cpp/ripple/LedgerAcquire.cpp | 21 +++++++++++++++------ src/cpp/ripple/LedgerAcquire.h | 2 +- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 462ab33ba..01cf1bfba 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -74,8 +74,8 @@ void PeerSet::TimerEntry(boost::weak_ptr wptr, const boost::system::err ptr->invokeOnTimer(); } -LedgerAcquire::LedgerAcquire(const uint256& hash) : PeerSet(hash, LEDGER_ACQUIRE_TIMEOUT), - mHaveBase(false), mHaveState(false), mHaveTransactions(false), mAborted(false), mSignaled(false), mAccept(false) +LedgerAcquire::LedgerAcquire(const uint256& hash) : PeerSet(hash, LEDGER_ACQUIRE_TIMEOUT), mHaveBase(false), + mHaveState(false), mHaveTransactions(false), mAborted(false), mSignaled(false), mAccept(false), mByHash(true) { #ifdef LA_DEBUG cLog(lsTRACE) << "Acquiring ledger " << mHash; @@ -138,6 +138,8 @@ void LedgerAcquire::onTimer(bool progress) else trigger(Peer::pointer()); } + else + mByHash = true; } void LedgerAcquire::addPeers() @@ -234,7 +236,7 @@ void LedgerAcquire::trigger(Peer::ref peer) { tmGL.set_querytype(ripple::qtINDIRECT); - if (!isProgress()) + if (!isProgress() && mByHash) { std::vector need = getNeededHashes(); if (!need.empty()) @@ -260,9 +262,6 @@ void LedgerAcquire::trigger(Peer::ref peer) } } PackedMessage::pointer packet = boost::make_shared(tmBH, ripple::mtGET_OBJECTS); - if (peer) - peer->sendPacket(packet); - else { boost::recursive_mutex::scoped_lock sl(mLock); for (boost::unordered_map::iterator it = mPeers.begin(), end = mPeers.end(); @@ -270,10 +269,20 @@ void LedgerAcquire::trigger(Peer::ref peer) { Peer::pointer iPeer = theApp->getConnectionPool().getPeerById(it->first); if (iPeer) + { + mByHash = false; iPeer->sendPacket(packet); + } } } } + else + { + cLog(lsINFO) << "getNeededHashes says acquire is complete"; + mHaveBase = true; + mHaveTransactions = true; + mHaveState = true; + } } } diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 2ef1384d7..b5c338612 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -78,7 +78,7 @@ public: protected: Ledger::pointer mLedger; - bool mHaveBase, mHaveState, mHaveTransactions, mAborted, mSignaled, mAccept; + bool mHaveBase, mHaveState, mHaveTransactions, mAborted, mSignaled, mAccept, mByHash; std::vector< boost::function > mOnComplete; From 0778a3ebae5f7b38b5e62912716a2f724646d553 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 03:16:59 -0800 Subject: [PATCH 281/525] Don't blow up if asked to acquire a hash that's not a ledger. --- src/cpp/ripple/LedgerAcquire.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 01cf1bfba..9941fc067 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -90,7 +90,11 @@ bool LedgerAcquire::tryLocal() return false; mLedger = boost::make_shared(strCopy(node->getData()), true); - assert(mLedger->getHash() == mHash); + if (mLedger->getHash() != mHash) + { // We know for a fact the ledger can never be acquired + mFailed = true; + return true; + } mHaveBase = true; if (!mLedger->getTransHash()) @@ -236,7 +240,7 @@ void LedgerAcquire::trigger(Peer::ref peer) { tmGL.set_querytype(ripple::qtINDIRECT); - if (!isProgress() && mByHash) + if (!isProgress() && !mFailed && mByHash) { std::vector need = getNeededHashes(); if (!need.empty()) @@ -287,7 +291,7 @@ void LedgerAcquire::trigger(Peer::ref peer) } - if (!mHaveBase) + if (!mHaveBase && !mFailed) { tmGL.set_itype(ripple::liBASE); cLog(lsTRACE) << "Sending base request to " << (peer ? "selected peer" : "all peers"); @@ -299,7 +303,7 @@ void LedgerAcquire::trigger(Peer::ref peer) if (mLedger) tmGL.set_ledgerseq(mLedger->getLedgerSeq()); - if (mHaveBase && !mHaveTransactions) + if (mHaveBase && !mHaveTransactions && !mFailed) { assert(mLedger); if (mLedger->peekTransactionMap()->getHash().isZero()) @@ -340,7 +344,7 @@ void LedgerAcquire::trigger(Peer::ref peer) } } - if (mHaveBase && !mHaveState) + if (mHaveBase && !mHaveState && !mFailed) { assert(mLedger); if (mLedger->peekAccountStateMap()->getHash().isZero()) From b5e78bda342886f6dcb77481e529cb48763f47aa Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 03:28:20 -0800 Subject: [PATCH 282/525] Fix GetObjByHash replies. --- src/cpp/ripple/Peer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 4c66f6e85..7290b89ad 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1089,7 +1089,7 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) { // this is a query ripple::TMGetObjectByHash reply; - reply.clear_query(); + reply.set_query(false); if (packet.has_seq()) reply.set_seq(packet.seq()); reply.set_type(packet.type()); @@ -1117,7 +1117,7 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) } } } - cLog(lsTRACE) << "GetObjByHash query: had " << reply.objects_size() << " of " << packet.objects_size() + cLog(lsTRACE) << "GetObjByHash had " << reply.objects_size() << " of " << packet.objects_size() << " for " << getIP(); sendPacket(boost::make_shared(packet, ripple::mtGET_OBJECTS)); } From e714a16b9551f508bd1f9b24ef25007b4c4d3f3e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 07:14:07 -0800 Subject: [PATCH 283/525] Optimizations. --- src/cpp/ripple/SHAMapSync.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 65bd73408..d564eebb9 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -32,12 +32,12 @@ void SHAMap::getMissingNodes(std::vector& nodeIDs, std::vector stack; - stack.push(root); + std::stack stack; + stack.push(root.get()); while (!stack.empty()) { - SHAMapTreeNode::pointer node = stack.top(); + SHAMapTreeNode* node = stack.top(); stack.pop(); int base = rand() % 256; @@ -49,10 +49,10 @@ void SHAMap::getMissingNodes(std::vector& nodeIDs, std::vectorgetChildNodeID(branch); const uint256& childHash = node->getChildHash(branch); - SHAMapTreeNode::pointer d; + SHAMapTreeNode* d; try { - d = getNode(childID, childHash, false); + d = getNodePointer(childID, childHash); } catch (SHAMapMissingNode&) { // node is not in the map @@ -61,9 +61,11 @@ void SHAMap::getMissingNodes(std::vector& nodeIDs, std::vector nodeData; if (filter->haveNode(childID, childHash, nodeData)) { - d = boost::make_shared(childID, nodeData, mSeq, snfPREFIX, childHash); + SHAMapTreeNode::pointer ptr = + boost::make_shared(childID, nodeData, mSeq, snfPREFIX, childHash); cLog(lsTRACE) << "Got sync node from cache: " << *d; - mTNByID[*d] = d; + mTNByID[*ptr] = ptr; + d = ptr.get(); } } } From 9a2e2d78c627085baede12ae50072015f84904b8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 09:21:48 -0800 Subject: [PATCH 284/525] Extra debug --- src/cpp/ripple/LedgerMaster.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 71602afaa..80e59b655 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -383,6 +383,8 @@ void LedgerMaster::checkAccept(const uint256& hash, uint32 seq) if (theApp->getValidations().getTrustedValidationCount(hash) < minVal) // nothing we can do return; + cLog(lsINFO) << "Advancing accepted ledger to " << seq << " with >= " << minVal << " validations"; + mLastValidateHash = hash; mLastValidateSeq = seq; From 4f1619eb5e3aadcc4375fd51f6d021dc99cae6b0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 09:21:58 -0800 Subject: [PATCH 285/525] Extra debug. --- src/cpp/ripple/LedgerAcquire.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 9941fc067..f18675a37 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -92,6 +92,7 @@ bool LedgerAcquire::tryLocal() mLedger = boost::make_shared(strCopy(node->getData()), true); if (mLedger->getHash() != mHash) { // We know for a fact the ledger can never be acquired + cLog(lsWARNING) << mHash << " cannot be a ledger"; mFailed = true; return true; } @@ -130,6 +131,7 @@ void LedgerAcquire::onTimer(bool progress) { if (getTimeouts() > 6) { + cLog(lsWARNING) << "Six timeouts for ledger " << mHash; setFailed(); done(); return; @@ -137,6 +139,7 @@ void LedgerAcquire::onTimer(bool progress) if (!progress) { + cLog(lsDEBUG) << "No progress for ledger " << mHash; if (!getPeerCount()) addPeers(); else @@ -232,7 +235,11 @@ void LedgerAcquire::trigger(Peer::ref peer) } if (!mHaveBase) + { tryLocal(); + if (mFailed) + cLog(lsWARNING) << " failed local for " << mHash; + } ripple::TMGetLedger tmGL; tmGL.set_ledgerhash(mHash.begin(), mHash.size()); @@ -288,7 +295,6 @@ void LedgerAcquire::trigger(Peer::ref peer) mHaveState = true; } } - } if (!mHaveBase && !mFailed) From eadaaaa0fda9c427a49cbca8cd402ed7920c040b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 09:22:25 -0800 Subject: [PATCH 286/525] Clean up debug. --- src/cpp/ripple/LedgerConsensus.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index fc5ee28cc..ce2446585 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1190,7 +1190,7 @@ uint32 LedgerConsensus::roundCloseTime(uint32 closeTime) void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) { - if (set->getHash().isNonZero()) + if (set->getHash().isNonZero()) // put our set where others can get it later theApp->getOPs().takePosition(mPreviousLedger->getLedgerSeq(), set); boost::recursive_mutex::scoped_lock masterLock(theApp->getMasterLock()); @@ -1198,7 +1198,10 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) uint32 closeTime = roundCloseTime(mOurPosition->getCloseTime()); - cLog(lsDEBUG) << "Computing new LCL based on network consensus"; + cLog(lsDEBUG) << "Report: Prop=" << (mProposing ? "yes" : "no") << " val=" << (mValidating ? "yes" : "no") << + " corLCL=" << (mHaveCorrectLCL ? "yes" : "no") << " fail="<< (mConsensusFail ? "yes" : "no"); + cLog(lsDEBUG) << "Report: Prev = " << mPrevLedgerHash << ":" << mPreviousLedger->getLedgerSeq(); + cLog(lsDEBUG) << "Report: TxSt = " << set->getHash() << ", close " << closeTime << (closeTimeCorrect ? "" : "X"); CanonicalTXSet failedTransactions(set->getHash()); @@ -1227,10 +1230,6 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) closeTime = mPreviousLedger->getCloseTimeNC() + 1; } - cLog(lsDEBUG) << "Report: Prop=" << (mProposing ? "yes" : "no") << " val=" << (mValidating ? "yes" : "no") << - " corLCL=" << (mHaveCorrectLCL ? "yes" : "no") << " fail="<< (mConsensusFail ? "yes" : "no"); - cLog(lsDEBUG) << "Report: Prev = " << mPrevLedgerHash << ":" << mPreviousLedger->getLedgerSeq(); - cLog(lsDEBUG) << "Report: TxSt = " << set->getHash() << ", close " << closeTime << (closeTimeCorrect ? "" : "X"); cLog(lsDEBUG) << "Report: NewL = " << newLCL->getHash() << ":" << newLCL->getLedgerSeq(); newLCL->setAccepted(closeTime, mCloseResolution, closeTimeCorrect); From e502badd2b58401dca5204d37c992c177b8a92bf Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Wed, 9 Jan 2013 18:29:12 +0100 Subject: [PATCH 287/525] Add test case for #7. --- test/offer-test.js | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/test/offer-test.js b/test/offer-test.js index 2c20dafb1..2d59657b1 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -72,6 +72,53 @@ buster.testCase("Offer tests", { }); }, + "offer create then crossing offer, no trust lines" : + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.remote.transaction() + .offer_create("root", "500/BTC/root", "100/USD/root") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .on('final', function (m) { + // console.log("FINAL: offer_create: %s", JSON.stringify(m)); + + buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult); + + callback(); + }) + .submit(); + }, + function (callback) { + self.remote.transaction() + .offer_create("root", "100/USD/root", "500/BTC/root") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .on('final', function (m) { + // console.log("FINAL: offer_create: %s", JSON.stringify(m)); + + buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult); + + callback(); + }) + .submit(); + } + ], function (error) { + // console.log("result: error=%s", error); + buster.refute(error); + + if (error) done(); + }); + }, + "offer_create then ledger_accept then offer_cancel then ledger_accept." : function (done) { var self = this; From fcabad79ae846de72ab05ec9dbc9404f5325fa63 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 09:29:15 -0800 Subject: [PATCH 288/525] Fix the breakage. --- src/cpp/ripple/Ledger.cpp | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index dbeb9ab28..c12e1d92d 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -538,28 +538,11 @@ Ledger::pointer Ledger::loadByIndex(uint32 ledgerIndex) } Ledger::pointer Ledger::loadByHash(const uint256& ledgerHash) -{ // This is a low-level function with no caching +{ // This is a low-level function with no caching and only gets accepted ledgers std::string sql="SELECT * from Ledgers WHERE LedgerHash='"; sql.append(ledgerHash.GetHex()); sql.append("';"); - Ledger::pointer ret = getSQL(sql); - if (ret) - return ret; - HashedObject::pointer node = theApp->getHashedObjectStore().retrieve(ledgerHash); - if (!node) - return Ledger::pointer(); - try - { - Ledger::pointer ledger = boost::make_shared(strCopy(node->getData()), true); - if (ledger->getHash() == ledgerHash) - return ledger; - } - catch (...) - { - cLog(lsDEBUG) << "Exception trying to load ledger by hash: " << ledgerHash; - return Ledger::pointer(); - } - return Ledger::pointer(); + return getSQL(sql); } Ledger::pointer Ledger::getLastFullLedger() From 1acdad8601131c9293306fdb1fe91c278ec97ce1 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 09:38:41 -0800 Subject: [PATCH 289/525] Make it compile. --- src/cpp/ripple/LedgerConsensus.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index ce2446585..778412a56 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1197,6 +1197,12 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) assert(set->getHash() == mOurPosition->getCurrentHash()); uint32 closeTime = roundCloseTime(mOurPosition->getCloseTime()); + bool closeTimeCorrect = true; + if (closeTime == 0) + { // we agreed to disagree + closeTimeCorrect = false; + closeTime = mPreviousLedger->getCloseTimeNC() + 1; + } cLog(lsDEBUG) << "Report: Prop=" << (mProposing ? "yes" : "no") << " val=" << (mValidating ? "yes" : "no") << " corLCL=" << (mHaveCorrectLCL ? "yes" : "no") << " fail="<< (mConsensusFail ? "yes" : "no"); @@ -1215,7 +1221,6 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) boost::shared_ptr acctNodes = newLCL->peekAccountStateMap()->disarmDirty(); boost::shared_ptr txnNodes = newLCL->peekTransactionMap()->disarmDirty(); - // write out dirty nodes (temporarily done here) Most come before setAccepted int fc; while ((fc = SHAMap::flushDirty(*acctNodes, 256, hotACCOUNT_NODE, newLCL->getLedgerSeq())) > 0) @@ -1223,13 +1228,6 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) while ((fc = SHAMap::flushDirty(*txnNodes, 256, hotTRANSACTION_NODE, newLCL->getLedgerSeq())) > 0) { cLog(lsTRACE) << "Flushed " << fc << " dirty transaction nodes"; } - bool closeTimeCorrect = true; - if (closeTime == 0) - { // we agreed to disagree - closeTimeCorrect = false; - closeTime = mPreviousLedger->getCloseTimeNC() + 1; - } - cLog(lsDEBUG) << "Report: NewL = " << newLCL->getHash() << ":" << newLCL->getLedgerSeq(); newLCL->setAccepted(closeTime, mCloseResolution, closeTimeCorrect); From d2d84d2af730c737bad45b14e11a105ad7d90071 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 09:53:39 -0800 Subject: [PATCH 290/525] More conservative check. --- src/cpp/ripple/LedgerMaster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 80e59b655..ab0e7a923 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -196,7 +196,7 @@ void LedgerMaster::missingAcquireComplete(LedgerAcquire::pointer acq) mMissingLedger.reset(); mMissingSeq = 0; - if (!acq->isFailed()) + if (acq->isComplete()) { setFullLedger(acq->getLedger()); acq->getLedger()->pendSave(false); From 714b3fb0d09b0b3c25f6dc4f680a189ecbd8170d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 10:14:18 -0800 Subject: [PATCH 291/525] Small fixes. --- src/cpp/ripple/HashedObject.cpp | 4 +++- src/cpp/ripple/LedgerAcquire.cpp | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index 288639f63..49a451050 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -33,7 +33,6 @@ bool HashedObjectStore::store(HashedObjectType type, uint32 index, } assert(hash == Serializer::getSHA512Half(data)); - mNegativeCache.del(hash); HashedObject::pointer object = boost::make_shared(type, index, data, hash); if (!mCache.canonicalize(hash, object)) { @@ -48,6 +47,7 @@ bool HashedObjectStore::store(HashedObjectType type, uint32 index, } // else // cLog(lsTRACE) << "HOS: already had " << hash; + mNegativeCache.del(hash); return true; } @@ -152,6 +152,7 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) db->getStr("ObjType", type); if (type.size() == 0) { + assert(false); mNegativeCache.add(hash); return HashedObject::pointer(); } @@ -173,6 +174,7 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) case 'A': htype = hotACCOUNT_NODE; break; case 'N': htype = hotTRANSACTION_NODE; break; default: + assert(false); cLog(lsERROR) << "Invalid hashed object"; mNegativeCache.add(hash); return HashedObject::pointer(); diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index f18675a37..f046b9ef6 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -193,13 +193,13 @@ void LedgerAcquire::done() mOnComplete.clear(); mLock.unlock(); - if (isComplete() && mLedger) + if (isComplete() && !isFailed() && mLedger) { if (mAccept) mLedger->setAccepted(); theApp->getLedgerMaster().storeLedger(mLedger); } - else if (isFailed()) + else theApp->getMasterLedgerAcquire().logFailure(mHash); for (unsigned int i = 0; i < triggers.size(); ++i) From 07634b51683b75fef8406c83ea253207a1769755 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 10:29:34 -0800 Subject: [PATCH 292/525] This is probably what was causing all the trouble. --- src/cpp/ripple/SHAMapSync.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index d564eebb9..7124403ac 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -49,7 +49,7 @@ void SHAMap::getMissingNodes(std::vector& nodeIDs, std::vectorgetChildNodeID(branch); const uint256& childHash = node->getChildHash(branch); - SHAMapTreeNode* d; + SHAMapTreeNode* d = NULL; try { d = getNodePointer(childID, childHash); From 6cf1b3dbc17067b37e4db9c4b1cec3303b66ebe2 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 10:31:14 -0800 Subject: [PATCH 293/525] Tiny cleanup. --- src/cpp/ripple/LedgerAcquire.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index f046b9ef6..5fce7a9ee 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -238,7 +238,9 @@ void LedgerAcquire::trigger(Peer::ref peer) { tryLocal(); if (mFailed) + { cLog(lsWARNING) << " failed local for " << mHash; + } } ripple::TMGetLedger tmGL; From d8b79aa0ee2e0c44a50fc71557f3f4dac7e8b9b7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 10:42:23 -0800 Subject: [PATCH 294/525] Fix bad log type. --- src/cpp/ripple/Ledger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index c12e1d92d..15d03084b 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -525,7 +525,7 @@ Ledger::pointer Ledger::getSQL(const std::string& sql) assert(false); return Ledger::pointer(); } - Log(lsTRACE) << "Loaded ledger: " << ledgerHash; + cLog(lsTRACE) << "Loaded ledger: " << ledgerHash; return ret; } From 38af3468813a3f54b806c4d0d865744adfe0ba70 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 10:49:08 -0800 Subject: [PATCH 295/525] Fix some calls that bypass the cache. --- src/cpp/ripple/LedgerMaster.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index ab0e7a923..e3932c3a0 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -142,7 +142,7 @@ void LedgerMaster::asyncAccept(Ledger::pointer ledger) if ((ledger->getLedgerSeq() == 0) || mCompleteLedgers.hasValue(ledger->getLedgerSeq() - 1)) break; } - Ledger::pointer prevLedger = Ledger::loadByIndex(ledger->getLedgerSeq() - 1); + Ledger::pointer prevLedger = mLedgerHistory.getLedgerBySeq(ledger->getLedgerSeq() - 1); if (!prevLedger || (prevLedger->getHash() != ledger->getParentHash())) break; ledger = prevLedger; @@ -152,7 +152,7 @@ void LedgerMaster::asyncAccept(Ledger::pointer ledger) bool LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq) { // return: false = already gave up recently - Ledger::pointer ledger = Ledger::loadByIndex(ledgerSeq); + Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(ledgerSeq); if (ledger && (ledger->getHash() == ledgerHash)) { cLog(lsDEBUG) << "Ledger hash found in database"; From d9ab92e88edce196f41e72d71273d6b4e9487b56 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 11:06:07 -0800 Subject: [PATCH 296/525] Cleanup. --- src/cpp/ripple/SHAMapSync.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 7124403ac..7b16fbeee 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -115,10 +115,9 @@ std::vector SHAMap::getNeededHashes(int max) { SHAMapNode childID = node->getChildNodeID(branch); const uint256& childHash = node->getChildHash(branch); - SHAMapTreeNode* d; try { - d = getNodePointer(childID, childHash); + SHAMapTreeNode* d = getNodePointer(childID, childHash); assert(d); if (d->isInner() && !d->isFullBelow()) stack.push(d); From 7ed37066cfb8ea4704c733066b407ca3b04278c9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 15:55:18 -0800 Subject: [PATCH 297/525] Add some features to the KeyCache code so we can use it for ledger acquire failure tracking too. --- src/cpp/ripple/HashedObject.cpp | 3 +- src/cpp/ripple/KeyCache.h | 54 ++++++++++++++++++++---------- src/cpp/ripple/LedgerAcquire.cpp | 56 +++----------------------------- src/cpp/ripple/LedgerAcquire.h | 13 +++++--- 4 files changed, 53 insertions(+), 73 deletions(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index 49a451050..cfa9dcdac 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -12,7 +12,8 @@ SETUP_LOG(); DECLARE_INSTANCE(HashedObject); HashedObjectStore::HashedObjectStore(int cacheSize, int cacheAge) : - mCache("HashedObjectStore", cacheSize, cacheAge), mWriteGeneration(0), mWritePending(false) + mCache("HashedObjectStore", cacheSize, cacheAge), mNegativeCache("HashedObjectNegativeCache", 0, 120), + mWriteGeneration(0), mWritePending(false) { mWriteSet.reserve(128); } diff --git a/src/cpp/ripple/KeyCache.h b/src/cpp/ripple/KeyCache.h index e5ec5262d..e4a1d8727 100644 --- a/src/cpp/ripple/KeyCache.h +++ b/src/cpp/ripple/KeyCache.h @@ -1,6 +1,8 @@ #ifndef KEY_CACHE__H #define KEY_CACHE__H +#include + #include #include @@ -12,40 +14,58 @@ public: typedef typename map_type::iterator map_iterator; protected: - boost::mutex mNCLock; - map_type mCache; - int mTargetSize, mTargetAge; + const std::string mName; + boost::mutex mNCLock; + map_type mCache; + int mTargetSize, mTargetAge; - uint64_t mHits, mMisses; - public: - KeyCache(int size = 0, int age = 120) : mTargetSize(size), mTargetAge(age), mHits(0), mMisses(0) + KeyCache(const std::string& name, int size = 0, int age = 120) : mName(name), mTargetSize(size), mTargetAge(age) { assert((mTargetSize >= 0) && (mTargetAge > 2)); } - void getStats(int& size, uint64_t& hits, uint64_t& misses) + void getSize() { boost::mutex::scoped_lock sl(mNCLock); - - size = mCache.size(); - hits = mHits; - misses = mMisses; + return mCache.size(); } - bool isPresent(const key_type& key) + void getTargetSize() + { + boost::mutex::scoped_lock sl(mNCLock); + return mTargetSize; + } + + void getTargetAge() + { + boost::mutex::scoped_lock sl(mNCLock); + return mTargetAge; + } + + void setTargets(int size, int age) + { + boost::mutex::scoped_lock sl(mNCLock); + mTargetSize = size; + mTargetAge = age; + assert((mTargetSize >= 0) && (mTargetAge > 2)); + } + + const std::string& getName() + { + return mName; + } + + bool isPresent(const key_type& key, bool refresh = true) { // Check if an entry is cached, refresh it if so boost::mutex::scoped_lock sl(mNCLock); map_iterator it = mCache.find(key); if (it == mCache.end()) - { - ++mMisses; return false; - } - it->second = time(NULL); - ++mHits; + if (refresh) + it->second = time(NULL); return true; } diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 5fce7a9ee..e3ad9a92d 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -74,8 +74,9 @@ void PeerSet::TimerEntry(boost::weak_ptr wptr, const boost::system::err ptr->invokeOnTimer(); } -LedgerAcquire::LedgerAcquire(const uint256& hash) : PeerSet(hash, LEDGER_ACQUIRE_TIMEOUT), mHaveBase(false), - mHaveState(false), mHaveTransactions(false), mAborted(false), mSignaled(false), mAccept(false), mByHash(true) +LedgerAcquire::LedgerAcquire(const uint256& hash) : PeerSet(hash, LEDGER_ACQUIRE_TIMEOUT), + mHaveBase(false), mHaveState(false), mHaveTransactions(false), mAborted(false), mSignaled(false), mAccept(false), + mByHash(true) { #ifdef LA_DEBUG cLog(lsTRACE) << "Acquiring ledger " << mHash; @@ -724,57 +725,10 @@ SMAddNode LedgerAcquireMaster::gotLedgerData(ripple::TMLedgerData& packet, Peer: return SMAddNode::invalid(); } -void LedgerAcquireMaster::logFailure(const uint256& hash) -{ - time_t now = time(NULL); - boost::mutex::scoped_lock sl(mLock); - - std::map::iterator it = mRecentFailures.begin(); - while (it != mRecentFailures.end()) - { - if (it->first == hash) - { - it->second = now; - return; - } - if (it->second > now) - { // time jump or discontinuity - it->second = now; - ++it; - } - else if ((it->second + 180) < now) - mRecentFailures.erase(it++); - else - ++it; - } - mRecentFailures[hash] = now; -} - -bool LedgerAcquireMaster::isFailure(const uint256& hash) -{ - time_t now = time(NULL); - boost::mutex::scoped_lock sl(mLock); - - std::map::iterator it = mRecentFailures.find(hash); - if (it == mRecentFailures.end()) - return false; - - if (it->second > now) - { - it->second = now; - return true; - } - - if ((it->second + 180) < now) - { - mRecentFailures.erase(it); - return false; - } - return true; -} - void LedgerAcquireMaster::sweep() { + mRecentFailures.sweep(); + time_t now = time(NULL); boost::mutex::scoped_lock sl(mLock); diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index b5c338612..9c63a5d6b 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -18,6 +18,11 @@ #include "InstanceCounter.h" #include "ripple.pb.h" +// How long before we try again to acquire the same ledger +#ifndef LEDGER_REACQUIRE_INTERVAL +#define LEDGER_REACQUIRE_INTERVAL 180 +#endif + DEFINE_INSTANCE(LedgerAcquire); class PeerSet @@ -123,10 +128,10 @@ class LedgerAcquireMaster protected: boost::mutex mLock; std::map mLedgers; - std::map mRecentFailures; + KeyCache mRecentFailures; public: - LedgerAcquireMaster() { ; } + LedgerAcquireMaster() : mRecentFailures("LedgerAcquireRecentFailures", 0, LEDGER_REACQUIRE_INTERVAL) { ; } LedgerAcquire::pointer findCreate(const uint256& hash); LedgerAcquire::pointer find(const uint256& hash); @@ -134,8 +139,8 @@ public: void dropLedger(const uint256& ledgerHash); SMAddNode gotLedgerData(ripple::TMLedgerData& packet, Peer::ref); - void logFailure(const uint256&); - bool isFailure(const uint256&); + void logFailure(const uint256& h) { mRecentFailures.add(h); } + bool isFailure(const uint256& h) { return mRecentFailures.isPresent(h, false); } void sweep(); }; From cf284897bbd168e3c6061d4fdbece6031b974477 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 15:55:41 -0800 Subject: [PATCH 298/525] Fix a case where we might try too quickly to re-acquire a ledger. --- src/cpp/ripple/LedgerMaster.cpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index e3932c3a0..ffa0ed45d 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -444,19 +444,26 @@ void LedgerMaster::tryPublish() } else { - LedgerAcquire::pointer acq = theApp->getMasterLedgerAcquire().findCreate(hash); - if (!acq->isDone()) + if (theApp->getMasterLedgerAcquire().isFailure(hash)) { - acq->setAccept(); - break; - } - else if (acq->isComplete() && !acq->isFailed()) - { - mPubLedger = acq->getLedger(); - mPubLedgers.push_back(mPubLedger); + cLog(lsFATAL) << "Unable to acquire a recent validated ledger"; } else - cLog(lsWARNING) << "Failed to acquire a published ledger"; + { + LedgerAcquire::pointer acq = theApp->getMasterLedgerAcquire().findCreate(hash); + if (!acq->isDone()) + { + acq->setAccept(); + break; + } + else if (acq->isComplete() && !acq->isFailed()) + { + mPubLedger = acq->getLedger(); + mPubLedgers.push_back(mPubLedger); + } + else + cLog(lsWARNING) << "Failed to acquire a published ledger"; + } } } } From 9b6ee7fc8894ab46c53aa24dac01be3d7532ccfc Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 9 Jan 2013 16:21:57 -0800 Subject: [PATCH 299/525] JS Add support for SourceTag and Destination tag. --- src/js/remote.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/js/remote.js b/src/js/remote.js index e64a26671..af5046cbb 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -1381,6 +1381,15 @@ Transaction.prototype.build_path = function (build) { return this; } +// tag should be undefined or a 32 bit integer. +// YYY Add range checking for tag. +Transaction.prototype.destination_tag = function (tag) { + if (undefined !== tag) + this.tx_json.DestinationTag = tag; + + return this; +} + Transaction._path_rewrite = function (path) { var path_new = []; @@ -1432,6 +1441,15 @@ Transaction.prototype.send_max = function (send_max) { return this; } +// tag should be undefined or a 32 bit integer. +// YYY Add range checking for tag. +Transaction.prototype.source_tag = function (tag) { + if (undefined !== tag) + this.tx_json.SourceTag = tag; + + return this; +} + // --> rate: In billionths. Transaction.prototype.transfer_rate = function (rate) { this.tx_json.TransferRate = Number(rate); @@ -1561,10 +1579,12 @@ Transaction.prototype.password_set = function (src, authorized_key, generator, p // Options: // .paths() // .build_path() +// .destination_tag() // .path_add() // .secret() // .send_max() // .set_flags() +// .source_tag() Transaction.prototype.payment = function (src, dst, deliver_amount) { this._secret = this._account_secret(src); this.tx_json.TransactionType = 'Payment'; From 99a8925fe5f81931a8d5ccfe5ea3a0e102808656 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 20:48:56 -0800 Subject: [PATCH 300/525] Merge function to add all nodes from another database. --- src/cpp/ripple/HashedObject.cpp | 68 +++++++++++++++++++++++++++++++++ src/cpp/ripple/HashedObject.h | 2 + 2 files changed, 70 insertions(+) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index cfa9dcdac..ef0d17aa4 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -4,6 +4,8 @@ #include #include +#include "../database/SqliteDatabase.h" + #include "Serializer.h" #include "Application.h" #include "Log.h" @@ -188,4 +190,70 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) return obj; } +int HashedObjectStore::import(const std::string& file) +{ + cLog(lsWARNING) << "Hash import from \"" << file << "\"."; + std::auto_ptr importDB(new SqliteDatabase(file.c_str())); + importDB->connect(); + + int countYes = 0, countNo = 0; + + SQL_FOREACH(importDB, "SELECT * FROM CommittedObjects;") + { + uint256 hash; + std::string hashStr; + importDB->getStr("Hash", hashStr); + hash.SetHex(hashStr); + if (hash.isZero()) + { + cLog(lsWARNING) << "zero hash found in import table"; + } + else + { + if (retrieve(hash) != HashedObject::pointer()) + ++countNo; + else + { // we don't have this object + std::vector data; + std::string type; + importDB->getStr("ObjType", type); + uint32 index = importDB->getBigInt("LedgerIndex"); + + int size = importDB->getBinary("Object", NULL, 0); + data.resize(size); + importDB->getBinary("Object", &(data.front()), size); + + assert(Serializer::getSHA512Half(data) == hash); + + HashedObjectType htype = hotUNKNOWN; + switch (type[0]) + { + case 'L': htype = hotLEDGER; break; + case 'T': htype = hotTRANSACTION; break; + case 'A': htype = hotACCOUNT_NODE; break; + case 'N': htype = hotTRANSACTION_NODE; break; + default: + assert(false); + cLog(lsERROR) << "Invalid hashed object"; + } + + if (Serializer::getSHA512Half(data) != hash) + { + cLog(lsWARNING) << "Hash mismatch in import table " << hash + << " " << Serializer::getSHA512Half(data); + } + else + { + store(htype, index, data, hash); + ++countYes; + } + } + } + } + + cLog(lsWARNING) << "Imported " << countYes << " nodes, had " << countNo << " nodes"; + waitWrite(); + return countYes; +} + // vim:ts=4 diff --git a/src/cpp/ripple/HashedObject.h b/src/cpp/ripple/HashedObject.h index 05883c2ca..d96101370 100644 --- a/src/cpp/ripple/HashedObject.h +++ b/src/cpp/ripple/HashedObject.h @@ -68,6 +68,8 @@ public: void bulkWrite(); void waitWrite(); void sweep() { mCache.sweep(); mNegativeCache.sweep(); } + + int import(const std::string&); }; #endif From 34411001e68536ab7071552d2e4ecb7b40c1ab62 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 21:17:41 -0800 Subject: [PATCH 301/525] Mark a major FIXME. --- src/cpp/ripple/HashedObject.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index ef0d17aa4..5b72cd3c7 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -89,7 +89,7 @@ void HashedObjectStore::bulkWrite() fAdd("INSERT INTO CommittedObjects (Hash,ObjType,LedgerIndex,Object) VALUES ('%s','%c','%u',%s);"); Database* db = theApp->getHashNodeDB()->getDB(); - { + { // FIXME: We're holding the lock too long! ScopedLock sl( theApp->getHashNodeDB()->getDBLock()); db->executeSQL("BEGIN TRANSACTION;"); @@ -248,6 +248,10 @@ int HashedObjectStore::import(const std::string& file) ++countYes; } } + if (((countYes + countNo) % 100) == 99) + { + cLog(lsINFO) << "Import in progress: yes=" << countYes << ", no=" << countNo; + } } } From 97e5223642d576af1779ec6597d818af5362f5d7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 23:52:01 -0800 Subject: [PATCH 302/525] Improve sqlEscape performance. --- src/cpp/ripple/utils.h | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/utils.h b/src/cpp/ripple/utils.h index 752078048..c5790bc85 100644 --- a/src/cpp/ripple/utils.h +++ b/src/cpp/ripple/utils.h @@ -165,8 +165,27 @@ inline static std::string sqlEscape(const std::string& strSrc) inline static std::string sqlEscape(const std::vector& vecSrc) { - static boost::format f("X'%s'"); - return str(f % strHex(vecSrc)); + size_t size = vecSrc.size(); + if (size == 0) + return "X''"; + + std::string j(size * 2 + 3, 0); + + unsigned char *oPtr = reinterpret_cast(&*j.begin()); + const unsigned char *iPtr = &vecSrc[0]; + + *oPtr++ = 'X'; + *oPtr++ = '\''; + + for (int i = size; i != 0; --i) + { + unsigned char c = *iPtr++; + *oPtr++ = charHex(c >> 4); + *oPtr++ = charHex(c & 15); + } + + *oPtr++ = '\''; + return j; } template From 1e2b11fe80cc045ed8e6f4cc18417ccc81d1d67e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 23:54:23 -0800 Subject: [PATCH 303/525] Slight improvement. --- src/cpp/ripple/HashedObject.cpp | 77 +++++++++++++++------------------ 1 file changed, 36 insertions(+), 41 deletions(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index 5b72cd3c7..507b04b1a 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -90,26 +90,23 @@ void HashedObjectStore::bulkWrite() Database* db = theApp->getHashNodeDB()->getDB(); { // FIXME: We're holding the lock too long! - ScopedLock sl( theApp->getHashNodeDB()->getDBLock()); + ScopedLock sl(theApp->getHashNodeDB()->getDBLock()); db->executeSQL("BEGIN TRANSACTION;"); BOOST_FOREACH(const boost::shared_ptr& it, set) { - if (!SQL_EXISTS(db, boost::str(fExists % it->getHash().GetHex()))) - { - char type; + char type; - switch(it->getType()) - { - case hotLEDGER: type = 'L'; break; - case hotTRANSACTION: type = 'T'; break; - case hotACCOUNT_NODE: type = 'A'; break; - case hotTRANSACTION_NODE: type = 'N'; break; - default: type = 'U'; - } - db->executeSQL(boost::str(fAdd % it->getHash().GetHex() % type % it->getIndex() % sqlEscape(it->getData()))); + switch (it->getType()) + { + case hotLEDGER: type = 'L'; break; + case hotTRANSACTION: type = 'T'; break; + case hotACCOUNT_NODE: type = 'A'; break; + case hotTRANSACTION_NODE: type = 'N'; break; + default: type = 'U'; } + db->executeSQL(boost::str(fAdd % it->getHash().GetHex() % type % it->getIndex() % sqlEscape(it->getData()))); } db->executeSQL("END TRANSACTION;"); @@ -140,6 +137,10 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) sql.append("';"); std::vector data; + std::string type; + uint32 index; + int size; + { ScopedLock sl(theApp->getHashNodeDB()->getDBLock()); Database* db = theApp->getHashNodeDB()->getDB(); @@ -147,45 +148,39 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) if (!db->executeSQL(sql) || !db->startIterRows()) { // cLog(lsTRACE) << "HOS: " << hash << " fetch: not in db"; + sl.unlock(); mNegativeCache.add(hash); return HashedObject::pointer(); } - std::string type; db->getStr("ObjType", type); - if (type.size() == 0) - { - assert(false); - mNegativeCache.add(hash); - return HashedObject::pointer(); - } - - uint32 index = db->getBigInt("LedgerIndex"); + index = db->getBigInt("LedgerIndex"); int size = db->getBinary("Object", NULL, 0); data.resize(size); db->getBinary("Object", &(data.front()), size); db->endIterRows(); - - assert(Serializer::getSHA512Half(data) == hash); - - HashedObjectType htype = hotUNKNOWN; - switch (type[0]) - { - case 'L': htype = hotLEDGER; break; - case 'T': htype = hotTRANSACTION; break; - case 'A': htype = hotACCOUNT_NODE; break; - case 'N': htype = hotTRANSACTION_NODE; break; - default: - assert(false); - cLog(lsERROR) << "Invalid hashed object"; - mNegativeCache.add(hash); - return HashedObject::pointer(); - } - - obj = boost::make_shared(htype, index, data, hash); - mCache.canonicalize(hash, obj); } + + assert(Serializer::getSHA512Half(data) == hash); + + HashedObjectType htype = hotUNKNOWN; + switch (type[0]) + { + case 'L': htype = hotLEDGER; break; + case 'T': htype = hotTRANSACTION; break; + case 'A': htype = hotACCOUNT_NODE; break; + case 'N': htype = hotTRANSACTION_NODE; break; + default: + assert(false); + cLog(lsERROR) << "Invalid hashed object"; + mNegativeCache.add(hash); + return HashedObject::pointer(); + } + + obj = boost::make_shared(htype, index, data, hash); + mCache.canonicalize(hash, obj); + cLog(lsTRACE) << "HOS: " << hash << " fetch: in db"; return obj; } From 376f214a70a4c8bd974edc998131f9c8d6e0c34b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 9 Jan 2013 23:55:39 -0800 Subject: [PATCH 304/525] Make it easier to insert code between when the server is setup and when it's started. --- src/cpp/ripple/Application.cpp | 5 ++++- src/cpp/ripple/Application.h | 1 + src/cpp/ripple/main.cpp | 8 +++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 8ec614bc6..b3c9c12b7 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -81,7 +81,7 @@ void sigIntHandler(int) } #endif -void Application::run() +void Application::setup() { #ifndef WIN32 #ifdef SIGINT @@ -256,7 +256,10 @@ void Application::run() } else mNetOps.setStateTimer(); +} +void Application::run() +{ mIOService.run(); // This blocks if (mWSPublicDoor) diff --git a/src/cpp/ripple/Application.h b/src/cpp/ripple/Application.h index ca1561379..ed950f22e 100644 --- a/src/cpp/ripple/Application.h +++ b/src/cpp/ripple/Application.h @@ -133,6 +133,7 @@ public: uint256 getNonce256() { return mNonce256; } std::size_t getNonceST() { return mNonceST; } + void setup(); void run(); void stop(); void sweep(); diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index 0373dccad..ebcef7eb0 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -17,9 +17,14 @@ extern bool AddSystemEntropy(); using namespace std; using namespace boost::unit_test; -void startServer() +void setupServer() { theApp = new Application(); + theApp->setup(); +} + +void startServer() +{ theApp->run(); // Blocks till we get a stop RPC. } @@ -194,6 +199,7 @@ int main(int argc, char* argv[]) else if (!vm.count("parameters")) { // No arguments. Run server. + setupServer(); startServer(); } else From c3498cbfcb8fa905c8d65a599d32109f226d7917 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 00:16:50 -0800 Subject: [PATCH 305/525] Use WOL mode to avoid performance problems with large writes causing huge latency for small reads. See: http://www.sqlite.org/wal.html --- src/cpp/ripple/DBInit.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cpp/ripple/DBInit.cpp b/src/cpp/ripple/DBInit.cpp index 13d5f7ad6..5d8f973a1 100644 --- a/src/cpp/ripple/DBInit.cpp +++ b/src/cpp/ripple/DBInit.cpp @@ -4,6 +4,9 @@ // Transaction database holds transactions and public keys const char *TxnDBInit[] = { + "PRAGMA synchronous=NORMAL", + "PRAGMA journal_mode=WAL", + "BEGIN TRANSACTION;", "CREATE TABLE Transactions ( \ @@ -254,6 +257,9 @@ int WalletDBCount = NUMBER(WalletDBInit); // Hash node database holds nodes indexed by hash const char *HashNodeDBInit[] = { + "PRAGMA synchronous=NORMAL", + "PRAGMA journal_mode=WAL", + "BEGIN TRANSACTION;", "CREATE TABLE CommittedObjects ( \ From c2922e5a165fda8b6db89fcf17f3890e5b6f1189 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 00:19:47 -0800 Subject: [PATCH 306/525] Remove an unused variable. --- src/cpp/ripple/HashedObject.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index 507b04b1a..14315108e 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -139,7 +139,6 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) std::vector data; std::string type; uint32 index; - int size; { ScopedLock sl(theApp->getHashNodeDB()->getDBLock()); From d0fbcd64baada69840ca1dc67585c51ff2e93c9d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 00:33:18 -0800 Subject: [PATCH 307/525] Fix typos. --- src/cpp/ripple/DBInit.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/DBInit.cpp b/src/cpp/ripple/DBInit.cpp index 5d8f973a1..1b9c65c11 100644 --- a/src/cpp/ripple/DBInit.cpp +++ b/src/cpp/ripple/DBInit.cpp @@ -4,8 +4,8 @@ // Transaction database holds transactions and public keys const char *TxnDBInit[] = { - "PRAGMA synchronous=NORMAL", - "PRAGMA journal_mode=WAL", + "PRAGMA synchronous=NORMAL;", + "PRAGMA journal_mode=WAL;", "BEGIN TRANSACTION;", @@ -257,8 +257,8 @@ int WalletDBCount = NUMBER(WalletDBInit); // Hash node database holds nodes indexed by hash const char *HashNodeDBInit[] = { - "PRAGMA synchronous=NORMAL", - "PRAGMA journal_mode=WAL", + "PRAGMA synchronous=NORMAL;", + "PRAGMA journal_mode=WAL;", "BEGIN TRANSACTION;", From 20712536b2cc97f9e7860f4f49bf1e4be5c81b5f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 00:33:32 -0800 Subject: [PATCH 308/525] Use 'INSERT OR IGNORE' --- src/cpp/ripple/HashedObject.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index 14315108e..b11825832 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -86,7 +86,8 @@ void HashedObjectStore::bulkWrite() static boost::format fExists("SELECT ObjType FROM CommittedObjects WHERE Hash = '%s';"); static boost::format - fAdd("INSERT INTO CommittedObjects (Hash,ObjType,LedgerIndex,Object) VALUES ('%s','%c','%u',%s);"); + fAdd("INSERT OR IGNORE INTO CommittedObjects " + "(Hash,ObjType,LedgerIndex,Object) VALUES ('%s','%c','%u',%s);"); Database* db = theApp->getHashNodeDB()->getDB(); { // FIXME: We're holding the lock too long! From 82d439ea8dab984f09b822c09a5936df275eb41e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 00:43:25 -0800 Subject: [PATCH 309/525] Remove a FIXME, since it's **FIXED**. --- src/cpp/ripple/HashedObject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index b11825832..41697f7b0 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -90,7 +90,7 @@ void HashedObjectStore::bulkWrite() "(Hash,ObjType,LedgerIndex,Object) VALUES ('%s','%c','%u',%s);"); Database* db = theApp->getHashNodeDB()->getDB(); - { // FIXME: We're holding the lock too long! + { ScopedLock sl(theApp->getHashNodeDB()->getDBLock()); db->executeSQL("BEGIN TRANSACTION;"); From 14b63f74071ab97275a776f54358d888320f9b10 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Thu, 10 Jan 2013 15:57:09 +0100 Subject: [PATCH 310/525] Tests: Print an error when timing out due to server crash. --- test/server.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/test/server.js b/test/server.js index 8606c003b..84d5164b4 100644 --- a/test/server.js +++ b/test/server.js @@ -98,12 +98,19 @@ Server.prototype._serverSpawnSync = function() { // By default, just log exits. this.child.on('exit', function(code, signal) { - // If could not exec: code=127, signal=null - // If regular exit: code=0, signal=null - buster.assert(self.stopping); //Fail the test if the server has not called "stop". + // Workaround for + // https://github.com/busterjs/buster/issues/266 + if (!self.stopping) { + buster.assertions.throwOnFailure = true; + } - if (!self.quiet) console.log("server: spawn: server exited code=%s: signal=%s", code, signal); - }); + // If could not exec: code=127, signal=null + // If regular exit: code=0, signal=null + // Fail the test if the server has not called "stop". + buster.assert(self.stopping, 'Server died with signal '+signal); + + if (!self.quiet) console.log("server: spawn: server exited code=%s: signal=%s", code, signal); + }); }; // Prepare server's working directory. From 3bdba555eba67a6e64d1bc0348afba35b88d0a28 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 07:04:35 -0800 Subject: [PATCH 311/525] Rate limit. --- src/cpp/ripple/LedgerMaster.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index ffa0ed45d..3c9fed8e3 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -142,7 +142,7 @@ void LedgerMaster::asyncAccept(Ledger::pointer ledger) if ((ledger->getLedgerSeq() == 0) || mCompleteLedgers.hasValue(ledger->getLedgerSeq() - 1)) break; } - Ledger::pointer prevLedger = mLedgerHistory.getLedgerBySeq(ledger->getLedgerSeq() - 1); + Ledger::pointer prevLedger = mLedgerHistory.getLedgerBySeq(ledger->getLedgerSeq() - 1); // FIXME if (!prevLedger || (prevLedger->getHash() != ledger->getParentHash())) break; ledger = prevLedger; @@ -152,6 +152,9 @@ void LedgerMaster::asyncAccept(Ledger::pointer ledger) bool LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq) { // return: false = already gave up recently + if (mTooFast) + return true; + Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(ledgerSeq); if (ledger && (ledger->getHash() == ledgerHash)) { From e2bac0e7cd752ea274e730d6a2b1f5caa9768cfe Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 08:41:32 -0800 Subject: [PATCH 312/525] Optimize the startup code so we don't have long periods of slowness on startup. --- src/cpp/ripple/Ledger.cpp | 47 +++++++++++++++++++++++++++++++++ src/cpp/ripple/Ledger.h | 4 ++- src/cpp/ripple/LedgerMaster.cpp | 22 +++++++++------ 3 files changed, 64 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 15d03084b..56a7a008a 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -529,6 +529,53 @@ Ledger::pointer Ledger::getSQL(const std::string& sql) return ret; } +uint256 Ledger::getHashByIndex(uint32 ledgerIndex) +{ + uint256 ret; + + std::string sql="SELECT LedgerHash FROM Ledgers WHERE LedgerSeq='"; + sql.append(boost::lexical_cast(ledgerIndex)); + sql.append("';"); + + std::string hash; + { + Database *db = theApp->getLedgerDB()->getDB(); + ScopedLock sl(theApp->getLedgerDB()->getDBLock()); + if (!db->executeSQL(sql) || !db->startIterRows()) + return ret; + db->getStr("LedgerHash", hash); + db->endIterRows(); + } + + ret.SetHex(hash); + return ret; +} + +bool Ledger::getHashesByIndex(uint32 ledgerIndex, uint256& ledgerHash, uint256& parentHash) +{ + std::string sql="SELECT LedgerHash,PrevHash FROM Ledgers WHERE LedgerSeq='"; + sql.append(boost::lexical_cast(ledgerIndex)); + sql.append("';"); + + std::string hash, prevHash; + { + Database *db = theApp->getLedgerDB()->getDB(); + ScopedLock sl(theApp->getLedgerDB()->getDBLock()); + if (!db->executeSQL(sql) || !db->startIterRows()) + return false; + db->getStr("LedgerHash", hash); + db->getStr("PrevHash", prevHash); + db->endIterRows(); + } + + ledgerHash.SetHex(hash); + parentHash.SetHex(prevHash); + + assert(ledgerHash.isNonZero() && ((ledgerIndex == 0) || parentHash.isNonZero())); + + return true; +} + Ledger::pointer Ledger::loadByIndex(uint32 ledgerIndex) { // This is a low-level function with no caching std::string sql="SELECT * from Ledgers WHERE LedgerSeq='"; diff --git a/src/cpp/ripple/Ledger.h b/src/cpp/ripple/Ledger.h index 27fad106c..4ca92acc4 100644 --- a/src/cpp/ripple/Ledger.h +++ b/src/cpp/ripple/Ledger.h @@ -178,9 +178,11 @@ public: SLE::pointer getAccountRoot(const RippleAddress& naAccountID); void updateSkipList(); - // database functions + // database functions (low-level) static Ledger::pointer loadByIndex(uint32 ledgerIndex); static Ledger::pointer loadByHash(const uint256& ledgerHash); + static uint256 getHashByIndex(uint32 index); + static bool getHashesByIndex(uint32 index, uint256& ledgerHash, uint256& parentHash); void pendSave(bool fromConsensus); // next/prev function diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 3c9fed8e3..76cc44dcf 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -134,19 +134,25 @@ bool LedgerMaster::haveLedgerRange(uint32 from, uint32 to) void LedgerMaster::asyncAccept(Ledger::pointer ledger) { - do + uint32 seq = ledger->getLedgerSeq(); + uint256 prevHash = ledger->getParentHash(); + + while (seq > 0) { { boost::recursive_mutex::scoped_lock ml(mLock); - mCompleteLedgers.setValue(ledger->getLedgerSeq()); - if ((ledger->getLedgerSeq() == 0) || mCompleteLedgers.hasValue(ledger->getLedgerSeq() - 1)) + mCompleteLedgers.setValue(seq); + --seq; + if (mCompleteLedgers.hasValue(seq)) break; } - Ledger::pointer prevLedger = mLedgerHistory.getLedgerBySeq(ledger->getLedgerSeq() - 1); // FIXME - if (!prevLedger || (prevLedger->getHash() != ledger->getParentHash())) + + uint256 tHash, pHash; + if (!Ledger::getHashesByIndex(seq, tHash, pHash) || (tHash != prevHash)) break; - ledger = prevLedger; - } while(1); + prevHash = pHash; + } + resumeAcquiring(); } @@ -156,7 +162,7 @@ bool LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledger return true; Ledger::pointer ledger = mLedgerHistory.getLedgerBySeq(ledgerSeq); - if (ledger && (ledger->getHash() == ledgerHash)) + if (Ledger::getHashByIndex(ledgerSeq) == ledgerHash) { cLog(lsDEBUG) << "Ledger hash found in database"; mTooFast = true; From ce3ce7820be152b40951d0bdcc7a6b7e2ce53c9e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 08:46:02 -0800 Subject: [PATCH 313/525] Raise the re-acquire interval. --- src/cpp/ripple/LedgerAcquire.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 9c63a5d6b..2bcef320f 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -20,7 +20,7 @@ // How long before we try again to acquire the same ledger #ifndef LEDGER_REACQUIRE_INTERVAL -#define LEDGER_REACQUIRE_INTERVAL 180 +#define LEDGER_REACQUIRE_INTERVAL 600 #endif DEFINE_INSTANCE(LedgerAcquire); From cfcb1a2c11dd1500cb62a31dce41442a83deaf23 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 09:10:40 -0800 Subject: [PATCH 314/525] Get rid of the redundant SSL contexts. --- src/cpp/ripple/Application.h | 1 + src/cpp/ripple/ConnectionPool.cpp | 19 +++---------------- src/cpp/ripple/ConnectionPool.h | 6 +++--- src/cpp/ripple/PeerDoor.h | 1 + 4 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/cpp/ripple/Application.h b/src/cpp/ripple/Application.h index ed950f22e..7ba1003ce 100644 --- a/src/cpp/ripple/Application.h +++ b/src/cpp/ripple/Application.h @@ -114,6 +114,7 @@ public: LoadManager& getLoadManager() { return mLoadMgr; } LoadFeeTrack& getFeeTrack() { return mFeeTrack; } TXQueue& getTxnQueue() { return mTxnQueue; } + PeerDoor& getPeerDoor() { return *mPeerDoor; } bool isNew(const uint256& s) { return mSuppressions.addSuppression(s); } diff --git a/src/cpp/ripple/ConnectionPool.cpp b/src/cpp/ripple/ConnectionPool.cpp index 2d4920338..cbc12e159 100644 --- a/src/cpp/ripple/ConnectionPool.cpp +++ b/src/cpp/ripple/ConnectionPool.cpp @@ -10,6 +10,7 @@ #include "Config.h" #include "Peer.h" +#include "PeerDoor.h" #include "Application.h" #include "utils.h" #include "Log.h" @@ -28,21 +29,6 @@ void splitIpPort(const std::string& strIpPort, std::string& strIp, int& iPort) iPort = boost::lexical_cast(vIpPort[1]); } -ConnectionPool::ConnectionPool(boost::asio::io_service& io_service) : - mLastPeer(0), - mCtx(boost::asio::ssl::context::sslv23), - mScanTimer(io_service), - mPolicyTimer(io_service) -{ - mCtx.set_options( - boost::asio::ssl::context::default_workarounds - | boost::asio::ssl::context::no_sslv2 - | boost::asio::ssl::context::single_dh_use); - - if (1 != SSL_CTX_set_cipher_list(mCtx.native_handle(), theConfig.PEER_SSL_CIPHER_LIST.c_str())) - std::runtime_error("Error setting cipher list (no valid ciphers)."); -} - void ConnectionPool::start() { if (theConfig.RUN_STANDALONE) @@ -329,7 +315,8 @@ Peer::pointer ConnectionPool::peerConnect(const std::string& strIp, int iPort) if ((it = mIpMap.find(pipPeer)) == mIpMap.end()) { - Peer::pointer ppNew(Peer::create(theApp->getIOService(), mCtx, ++mLastPeer)); + Peer::pointer ppNew(Peer::create(theApp->getIOService(), + theApp->getPeerDoor().getSSLContext(), ++mLastPeer)); // Did not find it. Not already connecting or connected. ppNew->connect(strIp, iPort); diff --git a/src/cpp/ripple/ConnectionPool.h b/src/cpp/ripple/ConnectionPool.h index e02caf198..3cdc77317 100644 --- a/src/cpp/ripple/ConnectionPool.h +++ b/src/cpp/ripple/ConnectionPool.h @@ -38,8 +38,6 @@ private: // Connections with have a 64-bit identifier boost::unordered_map mPeerIdMap; - boost::asio::ssl::context mCtx; - Peer::pointer mScanning; boost::asio::deadline_timer mScanTimer; std::string mScanIp; @@ -60,7 +58,9 @@ private: Peer::pointer peerConnect(const std::string& strIp, int iPort); public: - ConnectionPool(boost::asio::io_service& io_service); + ConnectionPool(boost::asio::io_service& io_service) : + mLastPeer(0), mScanTimer(io_service), mPolicyTimer(io_service) + { ; } // Begin enforcing connection policy. void start(); diff --git a/src/cpp/ripple/PeerDoor.h b/src/cpp/ripple/PeerDoor.h index 9ea247152..5f03c5914 100644 --- a/src/cpp/ripple/PeerDoor.h +++ b/src/cpp/ripple/PeerDoor.h @@ -25,6 +25,7 @@ private: public: PeerDoor(boost::asio::io_service& io_service); + boost::asio::ssl::context& getSSLContext() { return mCtx; } }; #endif From c29fdacc41651f6b324a3c675c29b86d7c67d3e8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 09:11:34 -0800 Subject: [PATCH 315/525] Remove an annoying log message. --- src/cpp/ripple/HashedObject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index 41697f7b0..d5e248f2e 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -123,7 +123,7 @@ HashedObject::pointer HashedObjectStore::retrieve(const uint256& hash) obj = mCache.fetch(hash); if (obj) { - cLog(lsTRACE) << "HOS: " << hash << " fetch: incache"; +// cLog(lsTRACE) << "HOS: " << hash << " fetch: incache"; return obj; } } From 3a96e7c1b6a834570de5ea059eda1fc28ea66199 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 09:55:48 -0800 Subject: [PATCH 316/525] A surprisingly simple fix to the InfoSub/websocketpp deadlock. --- src/cpp/ripple/WSConnection.h | 9 +++++++++ src/cpp/ripple/WSHandler.h | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/src/cpp/ripple/WSConnection.h b/src/cpp/ripple/WSConnection.h index 0116f1f48..6bc97e6ca 100644 --- a/src/cpp/ripple/WSConnection.h +++ b/src/cpp/ripple/WSConnection.h @@ -54,8 +54,17 @@ public: mPingTimer(theApp->getAuxService()), mPinged(false) { setPingTimer(); } + void preDestroy() + { // sever connection + mConnection.reset(); + } + virtual ~WSConnection() { ; } + static void destroy(boost::shared_ptr< WSConnection >) + { // Just discards the reference + } + // Implement overridden functions from base class: void send(const Json::Value& jvObj) { diff --git a/src/cpp/ripple/WSHandler.h b/src/cpp/ripple/WSHandler.h index 887303b29..793ca98b8 100644 --- a/src/cpp/ripple/WSHandler.h +++ b/src/cpp/ripple/WSHandler.h @@ -153,6 +153,10 @@ public: ptr = it->second; // prevent the WSConnection from being destroyed until we release the lock mMap.erase(it); } + ptr->preDestroy(); // Must be done before we return + + // Must be done without holding the websocket send lock + theApp->getAuxService().post(boost::bind(&WSConnection::destroy, ptr)); } void on_message(connection_ptr cpClient, message_ptr mpMessage) From 83d1d3a122d1731cb9040a113a525b02a1b5f9b8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 15:25:21 -0800 Subject: [PATCH 317/525] Some who shall remain nameless (whose first name starts with 'Art' and ends with 'hur') broke the unit tests. --- src/cpp/ripple/Config.cpp | 2 +- src/cpp/ripple/RippleAddress.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index a13e1e0e7..d10b4cb94 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -58,7 +58,7 @@ #define DEFAULT_FEE_OPERATION 1 Config theConfig; -const char* ALPHABET; +const char* ALPHABET = NULL; void Config::setup(const std::string& strConf, bool bTestNet, bool bQuiet) { diff --git a/src/cpp/ripple/RippleAddress.cpp b/src/cpp/ripple/RippleAddress.cpp index 6f3462ec9..93fdf7b60 100644 --- a/src/cpp/ripple/RippleAddress.cpp +++ b/src/cpp/ripple/RippleAddress.cpp @@ -750,12 +750,16 @@ bool RippleAddress::setSeed(const std::string& strSeed) return SetString(strSeed.c_str(), VER_FAMILY_SEED); } +extern const char *ALPHABET; + bool RippleAddress::setSeedGeneric(const std::string& strText) { RippleAddress naTemp; bool bResult = true; uint128 uSeed; + ALPHABET = "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz"; + if (strText.empty() || naTemp.setAccountID(strText) || naTemp.setAccountPublic(strText) From db1322f741274687bcecc9ed57d3a28333a8e93e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 15:29:52 -0800 Subject: [PATCH 318/525] The priority scheme was backwards! --- src/cpp/ripple/JobQueue.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index 954785204..5950a4669 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -54,7 +54,7 @@ const char* Job::toString(JobType t) } } -bool Job::operator<(const Job& j) const +bool Job::operator>(const Job& j) const { // These comparison operators make the jobs sort in priority order in the job set if (mType < j.mType) return true; @@ -63,7 +63,7 @@ bool Job::operator<(const Job& j) const return mJobIndex < j.mJobIndex; } -bool Job::operator<=(const Job& j) const +bool Job::operator>=(const Job& j) const { if (mType < j.mType) return true; @@ -72,7 +72,7 @@ bool Job::operator<=(const Job& j) const return mJobIndex <= j.mJobIndex; } -bool Job::operator>(const Job& j) const +bool Job::operator<(const Job& j) const { if (mType < j.mType) return false; @@ -81,7 +81,7 @@ bool Job::operator>(const Job& j) const return mJobIndex > j.mJobIndex; } -bool Job::operator>=(const Job& j) const +bool Job::operator<=(const Job& j) const { if (mType < j.mType) return false; @@ -251,3 +251,5 @@ void JobQueue::threadEntry() --mThreadCount; mJobCond.notify_all(); } + +// vim:ts=4 From 793843780c0ab72c345eef79944e97d7bd4e2253 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 16:27:22 -0800 Subject: [PATCH 319/525] Filter out redundant node queries. --- src/cpp/ripple/LedgerAcquire.cpp | 58 ++++++++++++++++++++++++++++++-- src/cpp/ripple/LedgerAcquire.h | 7 ++++ 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index e3ad9a92d..38de1b154 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -138,6 +138,9 @@ void LedgerAcquire::onTimer(bool progress) return; } + mRecentTXNodes.clear(); + mRecentASNodes.clear(); + if (!progress) { cLog(lsDEBUG) << "No progress for ledger " << mHash; @@ -326,8 +329,10 @@ void LedgerAcquire::trigger(Peer::ref peer) { std::vector nodeIDs; std::vector nodeHashes; + nodeIDs.reserve(256); + nodeHashes.reserve(256); TransactionStateSF tFilter(mLedger->getHash(), mLedger->getLedgerSeq()); - mLedger->peekTransactionMap()->getMissingNodes(nodeIDs, nodeHashes, 128, &tFilter); + mLedger->peekTransactionMap()->getMissingNodes(nodeIDs, nodeHashes, 256, &tFilter); if (nodeIDs.empty()) { if (!mLedger->peekTransactionMap()->isValid()) @@ -341,6 +346,7 @@ void LedgerAcquire::trigger(Peer::ref peer) } else { + filterNodes(nodeIDs, nodeHashes, mRecentTXNodes, 128); tmGL.set_itype(ripple::liTX_NODE); BOOST_FOREACH(SHAMapNode& it, nodeIDs) { @@ -367,8 +373,10 @@ void LedgerAcquire::trigger(Peer::ref peer) { std::vector nodeIDs; std::vector nodeHashes; + nodeIDs.reserve(256); + nodeHashes.reserve(256); AccountStateSF aFilter(mLedger->getHash(), mLedger->getLedgerSeq()); - mLedger->peekAccountStateMap()->getMissingNodes(nodeIDs, nodeHashes, 128, &aFilter); + mLedger->peekAccountStateMap()->getMissingNodes(nodeIDs, nodeHashes, 256, &aFilter); if (nodeIDs.empty()) { if (!mLedger->peekAccountStateMap()->isValid()) @@ -382,6 +390,7 @@ void LedgerAcquire::trigger(Peer::ref peer) } else { + filterNodes(nodeIDs, nodeHashes, mRecentASNodes, 128); tmGL.set_itype(ripple::liAS_NODE); BOOST_FOREACH(SHAMapNode& it, nodeIDs) *(tmGL.add_nodeids()) = it.getRawString(); @@ -445,6 +454,51 @@ int PeerSet::getPeerCount() const return ret; } +void LedgerAcquire::filterNodes(std::vector& nodeIDs, std::vector& nodeHashes, + std::set& recentNodes, int max) +{ // ask for new nodes in preference to ones we've already asked for + std::vector duplicates; + duplicates.reserve(nodeIDs.size()); + + if (nodeIDs.size() > 4) + { + std::vector duplicates; + duplicates.reserve(nodeIDs.size()); + + for (int i = 0; i < nodeIDs.size(); ++i) + duplicates.push_back(recentNodes.count(nodeIDs[i]) != 0); + + if (!duplicates.empty() && (duplicates.size() != nodeIDs.size())) + { // some, but not all, duplicates + int insertPoint = 0; + for (int i = 0; i < nodeIDs.size(); ++i) + if (!duplicates[i]) + { // Keep this node + if (insertPoint != i) + { + nodeIDs[insertPoint] = nodeIDs[i]; + nodeHashes[insertPoint] = nodeHashes[i]; + } + ++insertPoint; + } + + cLog(lsDEBUG) << "filterNodes " << nodeIDs.size() << " to " << insertPoint; + + nodeIDs.resize(insertPoint); + nodeHashes.resize(insertPoint); + } + } + + if (nodeIDs.size() > max) + { + nodeIDs.resize(max); + nodeHashes.resize(max); + } + + BOOST_FOREACH(const SHAMapNode& n, nodeIDs) + recentNodes.insert(n); +} + bool LedgerAcquire::takeBase(const std::string& data) // data must not have hash prefix { // Return value: true=normal, false=bad data #ifdef LA_DEBUG diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 2bcef320f..91ee83e36 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -85,6 +86,9 @@ protected: Ledger::pointer mLedger; bool mHaveBase, mHaveState, mHaveTransactions, mAborted, mSignaled, mAccept, mByHash; + std::set mRecentTXNodes; + std::set mRecentASNodes; + std::vector< boost::function > mOnComplete; void done(); @@ -121,6 +125,9 @@ public: typedef std::pair neededHash_t; std::vector getNeededHashes(); + + static void filterNodes(std::vector& nodeIDs, std::vector& nodeHashes, + std::set& recentNodes, int max); }; class LedgerAcquireMaster From 88b27a19ed234f382690fddfdbb1ab47847b9e49 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 10 Jan 2013 16:31:33 -0800 Subject: [PATCH 320/525] D'oh! This is what's burning the CPU. --- src/cpp/ripple/Peer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 7290b89ad..b16825d2e 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1112,14 +1112,14 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) newObj.set_data(&hObj->getData().front(), hObj->getData().size()); if (obj.has_nodeid()) newObj.set_index(obj.nodeid()); - if (!packet.has_seq() && (hObj->getIndex() != 0)) - packet.set_seq(hObj->getIndex()); + if (!reply.has_seq() && (hObj->getIndex() != 0)) + reply.set_seq(hObj->getIndex()); } } } cLog(lsTRACE) << "GetObjByHash had " << reply.objects_size() << " of " << packet.objects_size() << " for " << getIP(); - sendPacket(boost::make_shared(packet, ripple::mtGET_OBJECTS)); + sendPacket(boost::make_shared(reply, ripple::mtGET_OBJECTS)); } else { // this is a reply From ef9a0f3ed3457b5341f990c1be53ab699288852b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 11:28:24 -0800 Subject: [PATCH 321/525] Can't call 'size' without the lock. --- src/cpp/ripple/ConnectionPool.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/ConnectionPool.cpp b/src/cpp/ripple/ConnectionPool.cpp index cbc12e159..fa916d4cb 100644 --- a/src/cpp/ripple/ConnectionPool.cpp +++ b/src/cpp/ripple/ConnectionPool.cpp @@ -164,7 +164,7 @@ void ConnectionPool::policyLowWater() int iPort; // Find an entry to connect to. - if (mConnectedMap.size() > theConfig.PEER_CONNECT_LOW_WATER) + if (getPeerCount() > theConfig.PEER_CONNECT_LOW_WATER) { // Above low water mark, don't need more connections. cLog(lsTRACE) << "Pool: Low water: sufficient connections: " << mConnectedMap.size() << "/" << theConfig.PEER_CONNECT_LOW_WATER; From 7d7d2bc46b079d407a76660b92b7a4c7d3c8a619 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 11:53:37 -0800 Subject: [PATCH 322/525] Fix a bug Arthur reported. Some critical Peer structures are not protected against races caused by concurrent reading from and writing to the SSL connection and access to Peer variables like mDetaching, mSendingPacket, and so on. --- src/cpp/ripple/Peer.cpp | 21 ++++++++++++++++++++- src/cpp/ripple/Peer.h | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index b16825d2e..60aaa76b4 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -80,6 +80,8 @@ void Peer::setIpPort(const std::string& strIP, int iPort) void Peer::detach(const char *rsn) { + boost::recursive_mutex::scoped_lock sl(ioMutex); + if (!mDetaching) { mDetaching = true; // Race is ok. @@ -226,6 +228,8 @@ void Peer::handleConnect(const boost::system::error_code& error, boost::asio::ip { cLog(lsINFO) << "Connect peer: success."; + boost::recursive_mutex::scoped_lock sl(ioMutex); + mSocketSsl.set_verify_mode(boost::asio::ssl::verify_none); mSocketSsl.async_handshake(boost::asio::ssl::stream::client, @@ -247,12 +251,15 @@ void Peer::connected(const boost::system::error_code& error) if (iPort == SYSTEM_PEER_PORT) //TODO: Why are you doing this? iPort = -1; + boost::recursive_mutex::scoped_lock sl(ioMutex); + if (!error) { // Not redundant ip and port, handshake, and start. cLog(lsINFO) << "Peer: Inbound: Accepted: " << ADDRESS(this) << ": " << strIp << " " << iPort; + mSocketSsl.set_verify_mode(boost::asio::ssl::verify_none); mSocketSsl.async_handshake(boost::asio::ssl::stream::server, @@ -267,7 +274,7 @@ void Peer::connected(const boost::system::error_code& error) } void Peer::sendPacketForce(const PackedMessage::pointer& packet) -{ +{ // must hold I/O mutex if (!mDetaching) { mSendingPacket = packet; @@ -281,6 +288,8 @@ void Peer::sendPacketForce(const PackedMessage::pointer& packet) void Peer::sendPacket(const PackedMessage::pointer& packet) { + boost::recursive_mutex::scoped_lock sl(ioMutex); + if (packet) { if (mSendingPacket) @@ -296,6 +305,8 @@ void Peer::sendPacket(const PackedMessage::pointer& packet) void Peer::startReadHeader() { + boost::recursive_mutex::scoped_lock sl(ioMutex); + if (!mDetaching) { mReadbuf.clear(); @@ -312,6 +323,8 @@ void Peer::startReadBody(unsigned msg_len) // bytes. Expand it to fit in the body as well, and start async // read into the body. + boost::recursive_mutex::scoped_lock sl(ioMutex); + if (!mDetaching) { mReadbuf.resize(HEADER_SIZE + msg_len); @@ -323,6 +336,8 @@ void Peer::startReadBody(unsigned msg_len) void Peer::handleReadHeader(const boost::system::error_code& error) { + boost::recursive_mutex::scoped_lock sl(ioMutex); + if (mDetaching) { // Drop data or error if detaching. @@ -348,6 +363,8 @@ void Peer::handleReadHeader(const boost::system::error_code& error) void Peer::handleReadBody(const boost::system::error_code& error) { + boost::recursive_mutex::scoped_lock sl(ioMutex); + if (mDetaching) { // Drop data or error if detaching. @@ -1633,6 +1650,8 @@ void Peer::addTxSet(const uint256& hash) // (both sides get the same information, neither side controls it) void Peer::getSessionCookie(std::string& strDst) { + boost::recursive_mutex::scoped_lock sl(ioMutex); + SSL* ssl = mSocketSsl.native_handle(); if (!ssl) throw std::runtime_error("No underlying connection"); diff --git a/src/cpp/ripple/Peer.h b/src/cpp/ripple/Peer.h index 89bfb3e87..49749ddd0 100644 --- a/src/cpp/ripple/Peer.h +++ b/src/cpp/ripple/Peer.h @@ -58,6 +58,7 @@ private: protected: + boost::recursive_mutex ioMutex; std::vector mReadbuf; std::list mSendQ; PackedMessage::pointer mSendingPacket; From d14d8cbf76da61507076ce7577c5e89ef8a79ec9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 14:21:31 -0800 Subject: [PATCH 323/525] Helper functions. --- src/cpp/ripple/Ledger.cpp | 16 ++++++++++++++++ src/cpp/ripple/Ledger.h | 1 + src/cpp/ripple/LedgerAcquire.cpp | 6 ++++++ src/cpp/ripple/LedgerAcquire.h | 1 + 4 files changed, 24 insertions(+) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 56a7a008a..8d34cd959 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -1053,6 +1053,22 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) return uint256(); } +std::vector< std::pair > Ledger::getLedgerHashes() +{ + std::vector< std::pair > ret; + SLE::pointer hashIndex = getSLE(getLedgerHashIndex()); + if (hashIndex) + { + STVector256 vec = hashIndex->getFieldV256(sfHashes); + int size = vec.size(); + ret.reserve(size); + uint32 seq = hashIndex->getFieldU32(sfLastLedgerSequence) - size; + for (int i = 0; i < size; ++i) + ret.push_back(std::make_pair(++seq, vec.at(i))); + } + return ret; +} + uint256 Ledger::getBookBase(const uint160& uTakerPaysCurrency, const uint160& uTakerPaysIssuerID, const uint160& uTakerGetsCurrency, const uint160& uTakerGetsIssuerID) { diff --git a/src/cpp/ripple/Ledger.h b/src/cpp/ripple/Ledger.h index 4ca92acc4..f63cb0a70 100644 --- a/src/cpp/ripple/Ledger.h +++ b/src/cpp/ripple/Ledger.h @@ -200,6 +200,7 @@ public: static int getLedgerHashOffset(uint32 desiredLedgerIndex); static int getLedgerHashOffset(uint32 desiredLedgerIndex, uint32 currentLedgerIndex); uint256 getLedgerHash(uint32 ledgerIndex); + std::vector< std::pair > getLedgerHashes(); static uint256 getLedgerFeatureIndex(); static uint256 getLedgerFeeIndex(); diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 38de1b154..ed6252c5c 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -798,4 +798,10 @@ void LedgerAcquireMaster::sweep() } } +int LedgerAcquire::getFetchCount() +{ + boost::mutex::scoped_lock sl(mLock); + return mLedgers.size(); +} + // vim:ts=4 diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 91ee83e36..124c4983e 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -146,6 +146,7 @@ public: void dropLedger(const uint256& ledgerHash); SMAddNode gotLedgerData(ripple::TMLedgerData& packet, Peer::ref); + int getFetchCount(); void logFailure(const uint256& h) { mRecentFailures.add(h); } bool isFailure(const uint256& h) { return mRecentFailures.isPresent(h, false); } From 9880b23e7f685e9bfa8608db6baad0ce68a873e7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 14:22:50 -0800 Subject: [PATCH 324/525] Typo. --- src/cpp/ripple/LedgerAcquire.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index ed6252c5c..4295dd511 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -798,7 +798,7 @@ void LedgerAcquireMaster::sweep() } } -int LedgerAcquire::getFetchCount() +int LedgerAcquireMaster::getFetchCount() { boost::mutex::scoped_lock sl(mLock); return mLedgers.size(); From 9d0264a6030236c3d7f55197044cf3c8c64e7e41 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 15:50:18 -0800 Subject: [PATCH 325/525] Fix a deadlock. --- src/cpp/ripple/Peer.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 60aaa76b4..01c60394d 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -363,28 +363,28 @@ void Peer::handleReadHeader(const boost::system::error_code& error) void Peer::handleReadBody(const boost::system::error_code& error) { - boost::recursive_mutex::scoped_lock sl(ioMutex); + { + boost::recursive_mutex::scoped_lock sl(ioMutex); - if (mDetaching) - { - // Drop data or error if detaching. - nothing(); - } - else if (!error) - { - processReadBuffer(); - startReadHeader(); - } - else - { - cLog(lsINFO) << "Peer: Body: Error: " << ADDRESS(this) << ": " << error.category().name() << ": " << error.message() << ": " << error; - boost::recursive_mutex::scoped_lock sl(theApp->getMasterLock()); - detach("hrb"); + if (mDetaching) + { + return; + } + else if (error) + { + cLog(lsINFO) << "Peer: Body: Error: " << ADDRESS(this) << ": " << error.category().name() << ": " << error.message() << ": " << error; + boost::recursive_mutex::scoped_lock sl(theApp->getMasterLock()); + detach("hrb"); + return; + } } + + processReadBuffer(); + startReadHeader(); } void Peer::processReadBuffer() -{ +{ // must not hold peer lock int type = PackedMessage::getType(mReadbuf); #ifdef DEBUG // std::cerr << "PRB(" << type << "), len=" << (mReadbuf.size()-HEADER_SIZE) << std::endl; From 2c38bfbbad4a0e3e557b391f196727502413b7dd Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 16:40:04 -0800 Subject: [PATCH 326/525] Speed up ledger writing. --- src/cpp/ripple/DBInit.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cpp/ripple/DBInit.cpp b/src/cpp/ripple/DBInit.cpp index 1b9c65c11..4365eaad2 100644 --- a/src/cpp/ripple/DBInit.cpp +++ b/src/cpp/ripple/DBInit.cpp @@ -40,6 +40,9 @@ int TxnDBCount = NUMBER(TxnDBInit); // Ledger database holds ledgers and ledger confirmations const char *LedgerDBInit[] = { + "PRAGMA synchronous=NORMAL;", + "PRAGMA journal_mode=WAL;", + "BEGIN TRANSACTION;", "CREATE TABLE Ledgers ( \ From 955c5c3a9ca0a8af77bdd029dadd349aadd3e061 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 16:40:37 -0800 Subject: [PATCH 327/525] Bug fixes and performance improvements. --- src/cpp/ripple/LedgerAcquire.cpp | 53 ++++++++++++++++++++++++-------- src/cpp/ripple/LedgerAcquire.h | 3 +- src/cpp/ripple/LedgerMaster.cpp | 31 ++++++++++++++++--- src/cpp/ripple/LedgerMaster.h | 2 +- 4 files changed, 70 insertions(+), 19 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 4295dd511..3aa8864c2 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -74,6 +74,12 @@ void PeerSet::TimerEntry(boost::weak_ptr wptr, const boost::system::err ptr->invokeOnTimer(); } +bool PeerSet::isActive() +{ + boost::recursive_mutex::scoped_lock sl(mLock); + return !isDone(); +} + LedgerAcquire::LedgerAcquire(const uint256& hash) : PeerSet(hash, LEDGER_ACQUIRE_TIMEOUT), mHaveBase(false), mHaveState(false), mHaveTransactions(false), mAborted(false), mSignaled(false), mAccept(false), mByHash(true) @@ -106,6 +112,9 @@ bool LedgerAcquire::tryLocal() try { mLedger->peekTransactionMap()->fetchRoot(mLedger->getTransHash()); + std::vector h = mLedger->peekTransactionMap()->getNeededHashes(1); + if (h.empty()) + mHaveTransactions = true; } catch (SHAMapMissingNode&) { @@ -119,13 +128,19 @@ bool LedgerAcquire::tryLocal() try { mLedger->peekAccountStateMap()->fetchRoot(mLedger->getAccountHash()); + std::vector h = mLedger->peekAccountStateMap()->getNeededHashes(1); + if (h.empty()) + mHaveState = true; } catch (SHAMapMissingNode&) { } } - return mHaveTransactions && mHaveState; + if (mHaveTransactions && mHaveState) + mComplete = true; + + return mComplete; } void LedgerAcquire::onTimer(bool progress) @@ -192,10 +207,11 @@ void LedgerAcquire::done() assert(isComplete() || isFailed()); - mLock.lock(); - triggers = mOnComplete; + { + boost::recursive_mutex::scoped_lock sl(mLock); + triggers = mOnComplete; + } mOnComplete.clear(); - mLock.unlock(); if (isComplete() && !isFailed() && mLedger) { @@ -210,11 +226,13 @@ void LedgerAcquire::done() triggers[i](shared_from_this()); } -void LedgerAcquire::addOnComplete(boost::function trigger) +bool LedgerAcquire::addOnComplete(boost::function trigger) { - mLock.lock(); + boost::recursive_mutex::scoped_lock sl(mLock); + if (isDone()) + return false; mOnComplete.push_back(trigger); - mLock.unlock(); + return true; } void LedgerAcquire::trigger(Peer::ref peer) @@ -404,7 +422,8 @@ void LedgerAcquire::trigger(Peer::ref peer) if (mComplete || mFailed) { - cLog(lsDEBUG) << "Done:" << (mComplete ? " complete" : "") << (mFailed ? " failed" : ""); + cLog(lsDEBUG) << "Done:" << (mComplete ? " complete" : "") << (mFailed ? " failed " : " ") + << mLedger->getLedgerSeq(); done(); } } @@ -645,8 +664,11 @@ LedgerAcquire::pointer LedgerAcquireMaster::findCreate(const uint256& hash) return ptr; } ptr = boost::make_shared(hash); - ptr->addPeers(); - ptr->setTimer(); // Cannot call in constructor + if (!ptr->isDone()) + { + ptr->addPeers(); + ptr->setTimer(); // Cannot call in constructor + } return ptr; } @@ -800,8 +822,15 @@ void LedgerAcquireMaster::sweep() int LedgerAcquireMaster::getFetchCount() { - boost::mutex::scoped_lock sl(mLock); - return mLedgers.size(); + int ret = 0; + { + typedef std::pair u256_acq_pair; + boost::mutex::scoped_lock sl(mLock); + BOOST_FOREACH(const u256_acq_pair& it, mLedgers) + if (it.second->isActive()) + ++ret; + } + return ret; } // vim:ts=4 diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 124c4983e..6dcc31879 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -50,6 +50,7 @@ public: bool isFailed() const { return mFailed; } int getTimeouts() const { return mTimeouts; } + bool isActive(); void progress() { mProgress = true; } bool isProgress() { return mProgress; } void touch() { mLastAction = time(NULL); } @@ -110,7 +111,7 @@ public: void abort() { mAborted = true; } bool setAccept() { if (mAccept) return false; mAccept = true; return true; } - void addOnComplete(boost::function); + bool addOnComplete(boost::function); bool takeBase(const std::string& data); bool takeTxNode(const std::list& IDs, const std::list >& data, diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 76cc44dcf..7eaa96b08 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -156,7 +156,7 @@ void LedgerMaster::asyncAccept(Ledger::pointer ledger) resumeAcquiring(); } -bool LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq) +bool LedgerMaster::acquireMissingLedger(Ledger::ref origLedger, const uint256& ledgerHash, uint32 ledgerSeq) { // return: false = already gave up recently if (mTooFast) return true; @@ -189,7 +189,28 @@ bool LedgerMaster::acquireMissingLedger(const uint256& ledgerHash, uint32 ledger } mMissingSeq = ledgerSeq; if (mMissingLedger->setAccept()) - mMissingLedger->addOnComplete(boost::bind(&LedgerMaster::missingAcquireComplete, this, _1)); + { + if (!mMissingLedger->addOnComplete(boost::bind(&LedgerMaster::missingAcquireComplete, this, _1))) + theApp->getIOService().post(boost::bind(&LedgerMaster::missingAcquireComplete, this, mMissingLedger)); + } + + if (theApp->getMasterLedgerAcquire().getFetchCount() < 5) + { + int count = 0; + typedef std::pair u_pair; + + std::vector vec = origLedger->getLedgerHashes(); + BOOST_REVERSE_FOREACH(const u_pair& it, vec) + { + if ((count < 2) && (it.first < ledgerSeq) && + !mCompleteLedgers.hasValue(it.first) && !theApp->getMasterLedgerAcquire().find(it.second)) + { + ++count; + theApp->getMasterLedgerAcquire().findCreate(it.second); + } + } + } + return true; } @@ -250,7 +271,7 @@ void LedgerMaster::resumeAcquiring() assert(!mCompleteLedgers.hasValue(prevMissing)); Ledger::pointer nextLedger = getLedgerBySeq(prevMissing + 1); if (nextLedger) - acquireMissingLedger(nextLedger->getParentHash(), nextLedger->getLedgerSeq() - 1); + acquireMissingLedger(nextLedger, nextLedger->getParentHash(), nextLedger->getLedgerSeq() - 1); else { mCompleteLedgers.clearValue(prevMissing); @@ -333,7 +354,7 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) if (!shouldAcquire(mCurrentLedger->getLedgerSeq(), theConfig.LEDGER_HISTORY, ledger->getLedgerSeq() - 1)) return; cLog(lsDEBUG) << "We need the ledger before the ledger we just accepted: " << ledger->getLedgerSeq() - 1; - acquireMissingLedger(ledger->getParentHash(), ledger->getLedgerSeq() - 1); + acquireMissingLedger(ledger, ledger->getParentHash(), ledger->getLedgerSeq() - 1); } else { @@ -349,7 +370,7 @@ void LedgerMaster::setFullLedger(Ledger::ref ledger) assert(!mCompleteLedgers.hasValue(prevMissing)); Ledger::pointer nextLedger = getLedgerBySeq(prevMissing + 1); if (nextLedger) - acquireMissingLedger(nextLedger->getParentHash(), nextLedger->getLedgerSeq() - 1); + acquireMissingLedger(ledger, nextLedger->getParentHash(), nextLedger->getLedgerSeq() - 1); else { mCompleteLedgers.clearValue(prevMissing); diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 162b06c8a..67cca3c27 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -51,7 +51,7 @@ protected: bool isValidTransaction(const Transaction::pointer& trans); bool isTransactionOnFutureList(const Transaction::pointer& trans); - bool acquireMissingLedger(const uint256& ledgerHash, uint32 ledgerSeq); + bool acquireMissingLedger(Ledger::ref from, const uint256& ledgerHash, uint32 ledgerSeq); void asyncAccept(Ledger::pointer); void missingAcquireComplete(LedgerAcquire::pointer); void pubThread(); From 3cbaeebf2a4a03d85997cbebd5448e00e59599cc Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 16:53:08 -0800 Subject: [PATCH 328/525] Remove old debug. --- src/cpp/ripple/Ledger.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 8d34cd959..9581a32d9 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -995,16 +995,10 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) } if (ledgerIndex == mLedgerSeq) - { - cLog(lsWARNING) << ledgerIndex << " found in header"; return getHash(); - } if (ledgerIndex == (mLedgerSeq - 1)) - { - cLog(lsWARNING) << ledgerIndex << " found in parenthash"; return mParentHash; - } // within 256 int diff = mLedgerSeq - ledgerIndex; @@ -1016,10 +1010,7 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) assert(hashIndex->getFieldU32(sfLastLedgerSequence) == (mLedgerSeq - 1)); STVector256 vec = hashIndex->getFieldV256(sfHashes); if (vec.size() >= diff) - { - cLog(lsWARNING) << ledgerIndex << " found in normal list"; return vec.at(vec.size() - diff); - } cLog(lsWARNING) << "Ledger " << mLedgerSeq << " missing hash for " << ledgerIndex << " (" << vec.size() << "," << diff << ")"; } @@ -1043,10 +1034,7 @@ uint256 Ledger::getLedgerHash(uint32 ledgerIndex) STVector256 vec = hashIndex->getFieldV256(sfHashes); if (vec.size() > sDiff) - { - cLog(lsWARNING) << ledgerIndex << " found in skip list"; return vec.at(vec.size() - sDiff - 1); - } } cLog(lsWARNING) << "Can't get seq " << ledgerIndex << " from " << mLedgerSeq << " error"; From e86aa7b7ab9f40d0a9fef9e598423dbd13aa56b5 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 16:54:25 -0800 Subject: [PATCH 329/525] Better debug messages. --- src/cpp/ripple/Peer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 01c60394d..7457c2259 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1170,7 +1170,7 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) theApp->getHashedObjectStore().store(type, seq, data, hash); } else - cLog(lsWARNING) << "Received unwanted hash from peer " << getIP(); + cLog(lsWARNING) << "Received unwanted hash " << getIP() << " " << hash; } } } From 14f6250ce55ba44aa6c9d4c359444101eacdb2af Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 16:54:34 -0800 Subject: [PATCH 330/525] Don't use hash-based fetching too quickly. --- src/cpp/ripple/LedgerAcquire.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 3aa8864c2..a956862e8 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -271,7 +271,7 @@ void LedgerAcquire::trigger(Peer::ref peer) { tmGL.set_querytype(ripple::qtINDIRECT); - if (!isProgress() && !mFailed && mByHash) + if (!isProgress() && !mFailed && mByHash && (getTimeouts() > 2)) { std::vector need = getNeededHashes(); if (!need.empty()) @@ -310,6 +310,7 @@ void LedgerAcquire::trigger(Peer::ref peer) } } } + cLog(lsINFO) << "Attempting by hash fetch for ledegr " << mHash; } else { From f2d811851aef94e87aee7b09bb424c4b6bbf59e7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 17:16:34 -0800 Subject: [PATCH 331/525] Trigger an assert if we get errors that shouldn't ever happen. --- src/cpp/database/SqliteDatabase.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cpp/database/SqliteDatabase.cpp b/src/cpp/database/SqliteDatabase.cpp index 14dd0bbc5..9db0ac3d8 100644 --- a/src/cpp/database/SqliteDatabase.cpp +++ b/src/cpp/database/SqliteDatabase.cpp @@ -19,6 +19,7 @@ void SqliteDatabase::connect() { cout << "Can't open database: " << mHost << " " << rc << endl; sqlite3_close(mConnection); + assert((rc != SQLITE_BUSY) && (rc != SQLITE_LOCKED)); } } @@ -58,6 +59,7 @@ bool SqliteDatabase::executeSQL(const char* sql, bool fail_ok) } else { + assert((rc != SQLITE_BUSY) && (rc != SQLITE_LOCKED)); mMoreRows = false; if (!fail_ok) @@ -122,6 +124,7 @@ bool SqliteDatabase::getNextRow() } else { + assert((rc != SQLITE_BUSY) && (rc != SQLITE_LOCKED)); cout << "SQL Rerror:" << rc << endl; return(false); } From 35721a73e21da36835e72d767697b3539188241e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 17:18:28 -0800 Subject: [PATCH 332/525] Don't let the acquire engine stall. --- src/cpp/ripple/LedgerMaster.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 7eaa96b08..1bac9de87 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -502,6 +502,7 @@ void LedgerMaster::tryPublish() { theApp->getOPs().clearNeedNetworkLedger(); mPubThread = true; + mTooFast = false; theApp->getJobQueue().addJob(jtPUBLEDGER, boost::bind(&LedgerMaster::pubThread, this)); } } From c88c7c50a800ee85da5bc4f2d9168eb5a9c7becc Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 18:12:42 -0800 Subject: [PATCH 333/525] Oops. Fix the job run order. --- src/cpp/ripple/JobQueue.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index 5950a4669..328654b07 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -60,7 +60,7 @@ bool Job::operator>(const Job& j) const return true; if (mType > j.mType) return false; - return mJobIndex < j.mJobIndex; + return mJobIndex > j.mJobIndex; } bool Job::operator>=(const Job& j) const @@ -69,7 +69,7 @@ bool Job::operator>=(const Job& j) const return true; if (mType > j.mType) return false; - return mJobIndex <= j.mJobIndex; + return mJobIndex >= j.mJobIndex; } bool Job::operator<(const Job& j) const @@ -78,7 +78,7 @@ bool Job::operator<(const Job& j) const return false; if (mType > j.mType) return true; - return mJobIndex > j.mJobIndex; + return mJobIndex < j.mJobIndex; } bool Job::operator<=(const Job& j) const @@ -87,7 +87,7 @@ bool Job::operator<=(const Job& j) const return false; if (mType > j.mType) return true; - return mJobIndex >= j.mJobIndex; + return mJobIndex <= j.mJobIndex; } void JobQueue::addJob(JobType type, const boost::function& jobFunc) From b21e751ce7fa49c4d0de4d2855e348cd450d453e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 18:27:37 -0800 Subject: [PATCH 334/525] Typo --- src/cpp/ripple/LedgerAcquire.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index a956862e8..89a6b707e 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -310,7 +310,7 @@ void LedgerAcquire::trigger(Peer::ref peer) } } } - cLog(lsINFO) << "Attempting by hash fetch for ledegr " << mHash; + cLog(lsINFO) << "Attempting by hash fetch for ledger " << mHash; } else { From 0d49bc877e18d410b94d68908642cc993cee024b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 11 Jan 2013 18:45:16 -0800 Subject: [PATCH 335/525] Do WAL checkpointing in our own thread(s). --- src/cpp/database/SqliteDatabase.cpp | 59 ++++++++++++++++++++++++++++- src/cpp/database/SqliteDatabase.h | 17 +++++++++ src/cpp/database/database.h | 2 + src/cpp/ripple/Application.cpp | 3 ++ 4 files changed, 80 insertions(+), 1 deletion(-) diff --git a/src/cpp/database/SqliteDatabase.cpp b/src/cpp/database/SqliteDatabase.cpp index 9db0ac3d8..0159212e6 100644 --- a/src/cpp/database/SqliteDatabase.cpp +++ b/src/cpp/database/SqliteDatabase.cpp @@ -1,12 +1,17 @@ #include "SqliteDatabase.h" #include "sqlite3.h" + #include #include #include +#include +#include +#include + using namespace std; -SqliteDatabase::SqliteDatabase(const char* host) : Database(host,"","") +SqliteDatabase::SqliteDatabase(const char* host) : Database(host,"",""), walRunning(false) { mConnection = NULL; mCurrentStmt = NULL; @@ -182,4 +187,56 @@ uint64 SqliteDatabase::getBigInt(int colIndex) return(sqlite3_column_int64(mCurrentStmt, colIndex)); } + +static int SqliteWALHook(void *s, sqlite3* dbCon, const char *dbName, int walSize) +{ + (reinterpret_cast(s))->doHook(dbName, walSize); + return SQLITE_OK; +} + +bool SqliteDatabase::setupCheckpointing() +{ + sqlite3_wal_hook(mConnection, SqliteWALHook, this); + return true; +} + +void SqliteDatabase::doHook(const char *db, int pages) +{ + if (pages < 256) + return; + boost::mutex::scoped_lock sl(walMutex); + if (walDBs.insert(db).second && !walRunning) + { + walRunning = true; + boost::thread(boost::bind(&SqliteDatabase::runWal, this)).detach(); + } +} + +void SqliteDatabase::runWal() +{ + std::set walSet; + + while (1) + { + { + boost::mutex::scoped_lock sl(walMutex); + walDBs.swap(walSet); + if (walSet.empty()) + { + walRunning = false; + return; + } + } + + BOOST_FOREACH(const std::string& db, walSet) + { + int log, ckpt; + sqlite3_wal_checkpoint_v2(mConnection, db.c_str(), SQLITE_CHECKPOINT_PASSIVE, &log, &ckpt); + std::cerr << "Checkpoint " << db << ": " << log << " of " << ckpt << std::endl; + } + walSet.clear(); + + } +} + // vim:ts=4 diff --git a/src/cpp/database/SqliteDatabase.h b/src/cpp/database/SqliteDatabase.h index a3e7d6257..9b99bbf11 100644 --- a/src/cpp/database/SqliteDatabase.h +++ b/src/cpp/database/SqliteDatabase.h @@ -1,13 +1,24 @@ #include "database.h" +#include +#include + +#include + struct sqlite3; struct sqlite3_stmt; + class SqliteDatabase : public Database { sqlite3* mConnection; sqlite3_stmt* mCurrentStmt; bool mMoreRows; + + boost::mutex walMutex; + std::set walDBs; + bool walRunning; + public: SqliteDatabase(const char* host); @@ -38,6 +49,12 @@ public: int getBinary(int colIndex,unsigned char* buf,int maxSize); std::vector getBinary(int colIndex); uint64 getBigInt(int colIndex); + + sqlite3* peekConnection() { return mConnection; } + virtual bool setupCheckpointing(); + + void runWal(); + void doHook(const char *db, int walSize); }; // vim:ts=4 diff --git a/src/cpp/database/database.h b/src/cpp/database/database.h index 38c946560..7f9199529 100644 --- a/src/cpp/database/database.h +++ b/src/cpp/database/database.h @@ -82,6 +82,8 @@ public: // int getSingleDBValueInt(const char* sql); // float getSingleDBValueFloat(const char* sql); // char* getSingleDBValueStr(const char* sql, std::string& retStr); + + virtual bool setupCheckpointing() { return false; } }; #endif diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index b3c9c12b7..6e9043be6 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -118,6 +118,9 @@ void Application::setup() boost::thread t5(boost::bind(&InitDB, &mHashNodeDB, "hashnode.db", HashNodeDBInit, HashNodeDBCount)); boost::thread t6(boost::bind(&InitDB, &mNetNodeDB, "netnode.db", NetNodeDBInit, NetNodeDBCount)); t1.join(); t2.join(); t3.join(); t4.join(); t5.join(); t6.join(); + mTxnDB->getDB()->setupCheckpointing(); + mLedgerDB->getDB()->setupCheckpointing(); + mHashNodeDB->getDB()->setupCheckpointing(); if (theConfig.START_UP == Config::FRESH) { From 8df9519a1c5cd09e821ce75729d8defdfd07ab3c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 11 Jan 2013 18:55:13 -0800 Subject: [PATCH 336/525] Add a default for currencies for ripple_find_path. --- src/cpp/ripple/Pathfinder.cpp | 26 ++++++++++++++- src/cpp/ripple/Pathfinder.h | 2 ++ src/cpp/ripple/RPCErr.cpp | 2 ++ src/cpp/ripple/RPCErr.h | 2 ++ src/cpp/ripple/RPCHandler.cpp | 63 +++++++++++++++++++++++++---------- src/cpp/ripple/RippleState.h | 1 + 6 files changed, 78 insertions(+), 18 deletions(-) diff --git a/src/cpp/ripple/Pathfinder.cpp b/src/cpp/ripple/Pathfinder.cpp index a1d37d192..674c811d0 100644 --- a/src/cpp/ripple/Pathfinder.cpp +++ b/src/cpp/ripple/Pathfinder.cpp @@ -317,7 +317,7 @@ bool Pathfinder::findPaths(const unsigned int iMaxSteps, const unsigned int iMax % RippleAddress::createHumanAccountID(rspEntry->getAccountIDPeer().getAccountID()) % STAmount::createHumanCurrency(speEnd.mCurrencyID)); } - else if (!rspEntry->getBalance().isPositive() // Have IOUs to send. + else if (!rspEntry->getBalance().isPositive() // No IOUs to send. && (!rspEntry->getLimitPeer() // Peer does not extend credit. || *rspEntry->getBalance().negate() >= rspEntry->getLimitPeer())) // No credit left. { @@ -565,4 +565,28 @@ void Pathfinder::addPathOption(PathOption::pointer pathOption) } #endif +boost::unordered_set usAccountSourceCurrencies(const RippleAddress& raAccountID, Ledger::ref lrLedger) +{ + boost::unordered_set usCurrencies; + + // List of ripple lines. + AccountItems rippleLines(raAccountID.getAccountID(), lrLedger, AccountItem::pointer(new RippleState())); + + BOOST_FOREACH(AccountItem::ref item, rippleLines.getItems()) + { + RippleState* rspEntry = (RippleState*) item.get(); + STAmount saBalance = rspEntry->getBalance(); + + // Filter out non + if (saBalance.isPositive() // Have IOUs to send. + || (rspEntry->getLimitPeer() // Peer extends credit. + && *saBalance.negate() < rspEntry->getLimitPeer())) // Credit left. + { + // Path has no credit left. Ignore it. + usCurrencies.insert(saBalance.getCurrency()); + } + } + + return usCurrencies; +} // vim:ts=4 diff --git a/src/cpp/ripple/Pathfinder.h b/src/cpp/ripple/Pathfinder.h index b0cf3ec13..5682778e4 100644 --- a/src/cpp/ripple/Pathfinder.h +++ b/src/cpp/ripple/Pathfinder.h @@ -63,6 +63,8 @@ public: bool bDefaultPath(const STPath& spPath); }; + +boost::unordered_set usAccountSourceCurrencies(const RippleAddress& raAccountID, Ledger::ref lrLedger); #endif // vim:ts=4 diff --git a/src/cpp/ripple/RPCErr.cpp b/src/cpp/ripple/RPCErr.cpp index 61414aec3..57eb4dadd 100644 --- a/src/cpp/ripple/RPCErr.cpp +++ b/src/cpp/ripple/RPCErr.cpp @@ -58,6 +58,8 @@ Json::Value rpcError(int iError, Json::Value jvResult) { rpcSRC_ACT_MISSING, "srcActMissing", "Source account not provided." }, { rpcSRC_ACT_NOT_FOUND, "srcActNotFound", "Source amount not found." }, { rpcSRC_AMT_MALFORMED, "srcAmtMalformed", "Source amount/currency/issuer is malformed." }, + { rpcSRC_CUR_MALFORMED, "srcCurMalformed", "Source currency is malformed." }, + { rpcSRC_ISR_MALFORMED, "srcIsrMalformed", "Source issuer is malformed." }, { rpcSRC_UNCLAIMED, "srcUnclaimed", "Source account is not claimed." }, { rpcTXN_NOT_FOUND, "txnNotFound", "Transaction not found." }, { rpcUNKNOWN_COMMAND, "unknownCmd", "Unknown command." }, diff --git a/src/cpp/ripple/RPCErr.h b/src/cpp/ripple/RPCErr.h index 02dcda008..858c3f9b5 100644 --- a/src/cpp/ripple/RPCErr.h +++ b/src/cpp/ripple/RPCErr.h @@ -62,6 +62,8 @@ enum { rpcSRC_ACT_MISSING, rpcSRC_ACT_NOT_FOUND, rpcSRC_AMT_MALFORMED, + rpcSRC_CUR_MALFORMED, + rpcSRC_ISR_MALFORMED, // Internal error (should never happen) rpcINTERNAL, // Generic internal error. diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index dd2c98a56..e1b5df434 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -754,9 +754,9 @@ Json::Value RPCHandler::doRipplePathFind(Json::Value jvRequest) } else if ( // Checks on source_currencies. - !jvRequest.isMember("source_currencies") - || !jvRequest["source_currencies"].isArray() - || !jvRequest["source_currencies"].size() + jvRequest.isMember("source_currencies") + && (!jvRequest["source_currencies"].isArray() + || !jvRequest["source_currencies"].size()) // Don't allow empty currencies. ) { cLog(lsINFO) << "Bad source_currencies."; @@ -764,36 +764,63 @@ Json::Value RPCHandler::doRipplePathFind(Json::Value jvRequest) } else { - Json::Value jvSrcCurrencies = jvRequest["source_currencies"]; - Json::Value jvArray(Json::arrayValue); - Ledger::pointer lpCurrent = mNetOps->getCurrentLedger(); + Json::Value jvSrcCurrencies; + + if (jvRequest.isMember("source_currencies")) + { + jvSrcCurrencies = jvRequest["source_currencies"]; + } + else + { + boost::unordered_set usCurrencies = usAccountSourceCurrencies(raSrc, lpCurrent); + + // Add XRP as a source currency. + // YYY Only bother if they are above reserve. + usCurrencies.insert(uint160(CURRENCY_XRP)); + + jvSrcCurrencies = Json::Value(Json::arrayValue); + + BOOST_FOREACH(const uint160& uCurrency, usCurrencies) + { + Json::Value jvCurrency(Json::objectValue); + + jvCurrency["currency"] = STAmount::createHumanCurrency(uCurrency); + + jvSrcCurrencies.append(jvCurrency); + } + } + + LedgerEntrySet lesSnapshot(lpCurrent); ScopedUnlock su(theApp->getMasterLock()); // As long as we have a locked copy of the ledger, we can unlock. - LedgerEntrySet lesSnapshot(lpCurrent); + Json::Value jvArray(Json::arrayValue); for (unsigned int i=0; i != jvSrcCurrencies.size(); ++i) { Json::Value jvSource = jvSrcCurrencies[i]; uint160 uSrcCurrencyID; uint160 uSrcIssuerID = raSrc.getAccountID(); - if ( - // Parse currency. - !jvSource.isMember("currency") - || !STAmount::currencyFromString(uSrcCurrencyID, jvSource["currency"].asString()) + // Parse mandatory currency. + if (!jvSource.isMember("currency") + || !STAmount::currencyFromString(uSrcCurrencyID, jvSource["currency"].asString())) + { + cLog(lsINFO) << "Bad currency."; - // Parse issuer. - || ((jvSource.isMember("issuer")) + return rpcError(rpcSRC_CUR_MALFORMED); + } + // Parse optional issuer. + else if (((jvSource.isMember("issuer")) && (!jvSource["issuer"].isString() || !STAmount::issuerFromString(uSrcIssuerID, jvSource["issuer"].asString()))) - // Don't allow illegal issuers. || !uSrcIssuerID || ACCOUNT_ONE == uSrcIssuerID) { - cLog(lsINFO) << "Bad currency/issuer."; - return rpcError(rpcINVALID_PARAMS); + cLog(lsINFO) << "Bad issuer."; + + return rpcError(rpcSRC_ISR_MALFORMED); } STPathSet spsComputed; @@ -2495,7 +2522,9 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { return rpcError(rpcNO_PERMISSION); } - else if (commandsA[i].iOptions & optNetwork + + // XXX Need the master lock for getOperatingMode + if (commandsA[i].iOptions & optNetwork && mNetOps->getOperatingMode() != NetworkOPs::omTRACKING && mNetOps->getOperatingMode() != NetworkOPs::omFULL) { diff --git a/src/cpp/ripple/RippleState.h b/src/cpp/ripple/RippleState.h index f7edcbe1e..a89c55476 100644 --- a/src/cpp/ripple/RippleState.h +++ b/src/cpp/ripple/RippleState.h @@ -34,6 +34,7 @@ private: bool mViewLowest; RippleState(SerializedLedgerEntry::ref ledgerEntry); // For accounts in a ledger + public: RippleState(){ } AccountItem::pointer makeItem(const uint160& accountID, SerializedLedgerEntry::ref ledgerEntry); From 0fabbc4f1857edfd43c52d4024afc46c608f13fe Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 01:41:46 -0800 Subject: [PATCH 337/525] About half of clustering support. We need this so our own nodes don't send each other proof of work requests when we're under load. --- rippled-example.cfg | 10 +++++ src/cpp/ripple/Config.cpp | 18 ++++++++ src/cpp/ripple/Config.h | 4 ++ src/cpp/ripple/UniqueNodeList.cpp | 75 ++++++++++++++++++++----------- src/cpp/ripple/UniqueNodeList.h | 14 +++--- src/cpp/ripple/Wallet.cpp | 7 +++ 6 files changed, 98 insertions(+), 30 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 9f28dab46..377cf961a 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -123,6 +123,16 @@ # Examples: RASH BUSH MILK LOOK BAD BRIM AVID GAFF BAIT ROT POD LOVE # shfArahZT9Q9ckTf3s1psJ7C7qzVN # +# [node_seed]: +# To force a particular node seed or key, the key can be set here. +# The format is the same as the validation_seed field. The need is used for clustering. +# Node seeds start with an 's'. +# +# [cluster_nodes]: +# To extend full trust to other nodes, place their node public keys here. +# Generally, you should only do this for nodes under common administration. +# Node public keys start with an 'n'. +# # [ledger_history]: # To serve clients, servers need historical ledger data. This sets the number of # past ledgers to acquire on server startup and the minimum to maintain while diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index d10b4cb94..8d0656e3c 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -13,6 +13,7 @@ #include #define SECTION_ACCOUNT_PROBE_MAX "account_probe_max" +#define SECTION_CLUSTER_NODES "cluster_nodes" #define SECTION_DATABASE_PATH "database_path" #define SECTION_DEBUG_LOGFILE "debug_logfile" #define SECTION_FEE_DEFAULT "fee_default" @@ -24,6 +25,7 @@ #define SECTION_LEDGER_HISTORY "ledger_history" #define SECTION_IPS "ips" #define SECTION_NETWORK_QUORUM "network_quorum" +#define SECTION_NODE_SEED "node_seed" #define SECTION_PEER_CONNECT_LOW_WATER "peer_connect_low_water" #define SECTION_PEER_IP "peer_ip" #define SECTION_PEER_PORT "peer_port" @@ -247,6 +249,13 @@ void Config::load() // sectionEntriesPrint(&VALIDATORS, SECTION_VALIDATORS); } + smtTmp = sectionEntries(secConfig, SECTION_CLUSTER_NODES); + if (smtTmp) + { + CLUSTER_NODES = *smtTmp; + // sectionEntriesPrint(&CLUSTER_NODES, SECTION_CLUSTER_NODES); + } + smtTmp = sectionEntries(secConfig, SECTION_IPS); if (smtTmp) { @@ -310,6 +319,15 @@ void Config::load() VALIDATION_PRIV = RippleAddress::createNodePrivate(VALIDATION_SEED); } } + if (sectionSingleB(secConfig, SECTION_NODE_SEED, strTemp)) + { + NODE_SEED.setSeedGeneric(strTemp); + if (NODE_SEED.isValid()) + { + NODE_PUB = RippleAddress::createNodePublic(NODE_SEED); + NODE_PRIV = RippleAddress::createNodePrivate(NODE_SEED); + } + } (void) sectionSingleB(secConfig, SECTION_PEER_SSL_CIPHER_LIST, PEER_SSL_CIPHER_LIST); diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index 04544dd2a..92f83c8db 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -114,6 +114,10 @@ public: // Validation RippleAddress VALIDATION_SEED, VALIDATION_PUB, VALIDATION_PRIV; + // Node/Cluster + std::vector CLUSTER_NODES; + RippleAddress NODE_SEED, NODE_PUB, NODE_PRIV; + // Fee schedule (All below values are in fee units) uint64 FEE_DEFAULT; // Default fee. uint64 FEE_ACCOUNT_RESERVE; // Amount of units not allowed to send. diff --git a/src/cpp/ripple/UniqueNodeList.cpp b/src/cpp/ripple/UniqueNodeList.cpp index 7acdf14df..393503965 100644 --- a/src/cpp/ripple/UniqueNodeList.cpp +++ b/src/cpp/ripple/UniqueNodeList.cpp @@ -64,7 +64,16 @@ void UniqueNodeList::start() // Load information about when we last updated. bool UniqueNodeList::miscLoad() { - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + BOOST_FOREACH(const std::string& node, theConfig.CLUSTER_NODES) + { + RippleAddress a = RippleAddress::createNodePublic(node); + if (a.isValid()) + sClusterNodes.insert(a); + else + cLog(lsWARNING) << "Entry in cluster list invalid: '" << node << "'"; + } + + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); Database *db=theApp->getWalletDB()->getDB(); if (!db->executeSQL("SELECT * FROM Misc WHERE Magic=1;")) return false; @@ -85,7 +94,7 @@ bool UniqueNodeList::miscLoad() bool UniqueNodeList::miscSave() { Database* db=theApp->getWalletDB()->getDB(); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); db->executeSQL(str(boost::format("REPLACE INTO Misc (Magic,FetchUpdated,ScoreUpdated) VALUES (1,%d,%d);") % iToSeconds(mtpFetchUpdated) @@ -96,9 +105,18 @@ bool UniqueNodeList::miscSave() void UniqueNodeList::trustedLoad() { + BOOST_FOREACH(const std::string& node, theConfig.CLUSTER_NODES) + { + RippleAddress a = RippleAddress::createNodePublic(node); + if (a.isValid()) + sClusterNodes.insert(a); + else + cLog(lsWARNING) << "Entry in cluster list invalid: '" << node << "'"; + } + Database* db=theApp->getWalletDB()->getDB(); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); - ScopedLock slUNL(mUNLLock); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock slUNL(mUNLLock); mUNL.clear(); @@ -187,7 +205,7 @@ void UniqueNodeList::scoreCompute() // For each entry in SeedDomains with a PublicKey: // - Add an entry in umPulicIdx, umDomainIdx, and vsnNodes. { - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); SQL_FOREACH(db, "SELECT Domain,PublicKey,Source FROM SeedDomains;") { @@ -240,7 +258,7 @@ void UniqueNodeList::scoreCompute() // For each entry in SeedNodes: // - Add an entry in umPulicIdx, umDomainIdx, and vsnNodes. { - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); SQL_FOREACH(db, "SELECT PublicKey,Source FROM SeedNodes;") { @@ -304,7 +322,7 @@ void UniqueNodeList::scoreCompute() std::string& strValidator = sn.strValidator; std::vector& viReferrals = sn.viReferrals; - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); SQL_FOREACH(db, boost::str(boost::format("SELECT Referral FROM ValidatorReferrals WHERE Validator=%s ORDER BY Entry;") % sqlEscape(strValidator))) @@ -385,7 +403,7 @@ void UniqueNodeList::scoreCompute() } // Persist validator scores. - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); db->executeSQL("BEGIN;"); db->executeSQL("UPDATE TrustedNodes SET Score = 0 WHERE Score != 0;"); @@ -436,7 +454,7 @@ void UniqueNodeList::scoreCompute() } { - ScopedLock sl(mUNLLock); + boost::recursive_mutex::scoped_lock sl(mUNLLock); // XXX Should limit to scores above a certain minimum and limit to a certain number. mUNL.swap(usUNL); @@ -622,7 +640,7 @@ void UniqueNodeList::processIps(const std::string& strSite, const RippleAddress& // Remove all current Validator's entries in IpReferrals { - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); db->executeSQL(str(boost::format("DELETE FROM IpReferrals WHERE Validator=%s;") % strEscNodePublic)); // XXX Check result. } @@ -664,7 +682,7 @@ void UniqueNodeList::processIps(const std::string& strSite, const RippleAddress& { vstrValues.resize(iValues); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); db->executeSQL(str(boost::format("INSERT INTO IpReferrals (Validator,Entry,IP,Port) VALUES %s;") % strJoin(vstrValues.begin(), vstrValues.end(), ","))); // XXX Check result. @@ -693,7 +711,7 @@ int UniqueNodeList::processValidators(const std::string& strSite, const std::str // Remove all current Validator's entries in ValidatorReferrals { - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); db->executeSQL(str(boost::format("DELETE FROM ValidatorReferrals WHERE Validator='%s';") % strNodePublic)); // XXX Check result. @@ -764,7 +782,7 @@ int UniqueNodeList::processValidators(const std::string& strSite, const std::str std::string strSql = str(boost::format("INSERT INTO ValidatorReferrals (Validator,Entry,Referral) VALUES %s;") % strJoin(vstrValues.begin(), vstrValues.end(), ",")); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); db->executeSQL(strSql); // XXX Check result. @@ -1056,7 +1074,7 @@ void UniqueNodeList::fetchNext() boost::posix_time::ptime tpNext; boost::posix_time::ptime tpNow; - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); Database *db=theApp->getWalletDB()->getDB(); if (db->executeSQL("SELECT Domain,Next FROM SeedDomains INDEXED BY SeedDomainNext ORDER BY Next LIMIT 1;") @@ -1156,7 +1174,7 @@ bool UniqueNodeList::getSeedDomains(const std::string& strDomain, seedDomain& ds std::string strSql = boost::str(boost::format("SELECT * FROM SeedDomains WHERE Domain=%s;") % sqlEscape(strDomain)); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); bResult = db->executeSQL(strSql) && db->startIterRows(); if (bResult) @@ -1226,7 +1244,7 @@ void UniqueNodeList::setSeedDomains(const seedDomain& sdSource, bool bNext) % sqlEscape(sdSource.strComment) ); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); if (!db->executeSQL(strSql)) { @@ -1294,7 +1312,7 @@ bool UniqueNodeList::getSeedNodes(const RippleAddress& naNodePublic, seedNode& d std::string strSql = str(boost::format("SELECT * FROM SeedNodes WHERE PublicKey='%s';") % naNodePublic.humanNodePublic()); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); bResult = db->executeSQL(strSql) && db->startIterRows(); if (bResult) @@ -1366,7 +1384,7 @@ void UniqueNodeList::setSeedNodes(const seedNode& snSource, bool bNext) ); { - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); if (!db->executeSQL(strSql)) { @@ -1424,7 +1442,7 @@ void UniqueNodeList::nodeRemovePublic(const RippleAddress& naNodePublic) { { Database* db=theApp->getWalletDB()->getDB(); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); db->executeSQL(str(boost::format("DELETE FROM SeedNodes WHERE PublicKey=%s") % sqlEscape(naNodePublic.humanNodePublic()))); } @@ -1440,7 +1458,7 @@ void UniqueNodeList::nodeRemoveDomain(std::string strDomain) { Database* db=theApp->getWalletDB()->getDB(); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); db->executeSQL(str(boost::format("DELETE FROM SeedDomains WHERE Domain=%s") % sqlEscape(strDomain))); } @@ -1454,7 +1472,7 @@ void UniqueNodeList::nodeReset() { Database* db=theApp->getWalletDB()->getDB(); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); // XXX Check results. db->executeSQL("DELETE FROM SeedDomains"); @@ -1470,7 +1488,7 @@ Json::Value UniqueNodeList::getUnlJson() Json::Value ret(Json::arrayValue); - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); SQL_FOREACH(db, "SELECT * FROM TrustedNodes;") { Json::Value node(Json::objectValue); @@ -1571,7 +1589,7 @@ void UniqueNodeList::nodeBootstrap() Database* db = theApp->getWalletDB()->getDB(); { - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); if (db->executeSQL(str(boost::format("SELECT COUNT(*) AS Count FROM SeedDomains WHERE Source='%s' OR Source='%c';") % vsManual % vsValidator)) && db->startIterRows()) iDomains = db->getInt("Count"); @@ -1640,7 +1658,7 @@ void UniqueNodeList::nodeBootstrap() if (!vstrValues.empty()) { - ScopedLock sl(theApp->getWalletDB()->getDBLock()); + boost::recursive_mutex::scoped_lock sl(theApp->getWalletDB()->getDBLock()); db->executeSQL(str(boost::format("REPLACE INTO PeerIps (IpPort,Source) VALUES %s;") % strJoin(vstrValues.begin(), vstrValues.end(), ","))); @@ -1673,8 +1691,15 @@ void UniqueNodeList::nodeProcess(const std::string& strSite, const std::string& bool UniqueNodeList::nodeInUNL(const RippleAddress& naNodePublic) { - ScopedLock sl(mUNLLock); + boost::recursive_mutex::scoped_lock sl(mUNLLock); return mUNL.end() != mUNL.find(naNodePublic.humanNodePublic()); } + +bool UniqueNodeList::nodeInCluster(const RippleAddress& naNodePublic) +{ + boost::recursive_mutex::scoped_lock sl(mUNLLock); + return sClusterNodes.count(naNodePublic) != 0; +} + // vim:ts=4 diff --git a/src/cpp/ripple/UniqueNodeList.h b/src/cpp/ripple/UniqueNodeList.h index e9c3999dd..9cf511d84 100644 --- a/src/cpp/ripple/UniqueNodeList.h +++ b/src/cpp/ripple/UniqueNodeList.h @@ -2,6 +2,11 @@ #define __UNIQUE_NODE_LIST__ #include +#include + +#include +#include +#include #include "../json/value.h" @@ -10,11 +15,7 @@ #include "HttpsClient.h" #include "ParseSection.h" -#include -#include -#include - -// Guarantees minimum thoughput of 1 node per second. +// Guarantees minimum throughput of 1 node per second. #define NODE_FETCH_JOBS 10 #define NODE_FETCH_SECONDS 10 #define NODE_FILE_BYTES_MAX (50<<10) // 50k @@ -87,6 +88,8 @@ private: std::vector viReferrals; } scoreNode; + std::set sClusterNodes; + typedef boost::unordered_map strIndex; typedef std::pair ipPort; typedef boost::unordered_map, score> epScore; @@ -151,6 +154,7 @@ public: void nodeScore(); bool nodeInUNL(const RippleAddress& naNodePublic); + bool nodeInCluster(const RippleAddress& naNodePublic); void nodeBootstrap(); bool nodeLoad(boost::filesystem::path pConfig); diff --git a/src/cpp/ripple/Wallet.cpp b/src/cpp/ripple/Wallet.cpp index 3d23adede..244536769 100644 --- a/src/cpp/ripple/Wallet.cpp +++ b/src/cpp/ripple/Wallet.cpp @@ -38,6 +38,7 @@ void Wallet::start() // Retrieve network identity. bool Wallet::nodeIdentityLoad() { + Database* db=theApp->getWalletDB()->getDB(); ScopedLock sl(theApp->getWalletDB()->getDBLock()); bool bSuccess = false; @@ -59,6 +60,12 @@ bool Wallet::nodeIdentityLoad() bSuccess = true; } + if (theConfig.NODE_PUB.isValid() && theConfig.NODE_PRIV.isValid()) + { + mNodePublicKey = theConfig.NODE_PUB; + mNodePrivateKey = theConfig.NODE_PRIV; + } + return bSuccess; } From 95c7794e7b6ec1fa56141c83709c99706f9e48ac Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 01:57:20 -0800 Subject: [PATCH 338/525] Be explicit about which SQLite thread mode we want. --- SConstruct | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SConstruct b/SConstruct index 48c6ebac7..0800c402b 100644 --- a/SConstruct +++ b/SConstruct @@ -87,7 +87,7 @@ DEBUGFLAGS = ['-g', '-DDEBUG'] BOOSTFLAGS = ['-DBOOST_TEST_DYN_LINK', '-DBOOST_FILESYSTEM_NO_DEPRECATED'] env.Append(LINKFLAGS = ['-rdynamic', '-pthread']) -env.Append(CCFLAGS = ['-pthread', '-Wall', '-Wno-sign-compare', '-Wno-char-subscripts', '-DSQLITE_THREADSAFE']) +env.Append(CCFLAGS = ['-pthread', '-Wall', '-Wno-sign-compare', '-Wno-char-subscripts', '-DSQLITE_THREADSAFE=1']) env.Append(CXXFLAGS = ['-O0', '-pthread', '-Wno-invalid-offsetof', '-Wformat']+BOOSTFLAGS+DEBUGFLAGS) if OSX: From be93d59933a859657f97b50ced0a2c367c8e84f3 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 02:53:45 -0800 Subject: [PATCH 339/525] Remove log accidentally commited. --- src/cpp/database/SqliteDatabase.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpp/database/SqliteDatabase.cpp b/src/cpp/database/SqliteDatabase.cpp index 0159212e6..e760d6903 100644 --- a/src/cpp/database/SqliteDatabase.cpp +++ b/src/cpp/database/SqliteDatabase.cpp @@ -232,7 +232,6 @@ void SqliteDatabase::runWal() { int log, ckpt; sqlite3_wal_checkpoint_v2(mConnection, db.c_str(), SQLITE_CHECKPOINT_PASSIVE, &log, &ckpt); - std::cerr << "Checkpoint " << db << ": " << log << " of " << ckpt << std::endl; } walSet.clear(); From 57313a933996b67a6ddbd1b8dbd00409de6a6ce9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 03:05:45 -0800 Subject: [PATCH 340/525] Cache the hash of a SHAMapNode. --- src/cpp/ripple/SHAMap.cpp | 12 +++++++----- src/cpp/ripple/SHAMap.h | 11 ++++++++--- src/cpp/ripple/SHAMapNodes.cpp | 7 ++++--- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/cpp/ripple/SHAMap.cpp b/src/cpp/ripple/SHAMap.cpp index ad536e762..e549b9325 100644 --- a/src/cpp/ripple/SHAMap.cpp +++ b/src/cpp/ripple/SHAMap.cpp @@ -21,13 +21,15 @@ DECLARE_INSTANCE(SHAMap); DECLARE_INSTANCE(SHAMapItem); DECLARE_INSTANCE(SHAMapTreeNode); +void SHAMapNode::setHash() const +{ + std::size_t h = theApp->getNonceST() + mDepth; + mHash = mNodeID.hash_combine(h); +} + std::size_t hash_value(const SHAMapNode& mn) { - std::size_t seed = theApp->getNonceST(); - - boost::hash_combine(seed, mn.getDepth()); - - return mn.getNodeID().hash_combine(seed); + return mn.getHash(); } std::size_t hash_value(const uint256& u) diff --git a/src/cpp/ripple/SHAMap.h b/src/cpp/ripple/SHAMap.h index afd323fdd..a03eb76bd 100644 --- a/src/cpp/ripple/SHAMap.h +++ b/src/cpp/ripple/SHAMap.h @@ -27,23 +27,28 @@ class SHAMap; class SHAMapNode -{ // Identifies a node in a SHA256 hash +{ // Identifies a node in a SHA256 hash map private: static uint256 smMasks[65]; // AND with hash to get node id uint256 mNodeID; - int mDepth; + int mDepth; + mutable size_t mHash; + + void setHash() const; public: static const int rootDepth = 0; - SHAMapNode() : mDepth(0) { ; } + SHAMapNode() : mDepth(0), mHash(0) { ; } SHAMapNode(int depth, const uint256& hash); virtual ~SHAMapNode() { ; } + int getDepth() const { return mDepth; } const uint256& getNodeID() const { return mNodeID; } bool isValid() const { return (mDepth >= 0) && (mDepth < 64); } + size_t getHash() const { if (mHash == 0) setHash(); return mHash; } virtual bool isPopulated() const { return false; } diff --git a/src/cpp/ripple/SHAMapNodes.cpp b/src/cpp/ripple/SHAMapNodes.cpp index 724f70942..0cfa10b53 100644 --- a/src/cpp/ripple/SHAMapNodes.cpp +++ b/src/cpp/ripple/SHAMapNodes.cpp @@ -102,15 +102,16 @@ uint256 SHAMapNode::getNodeID(int depth, const uint256& hash) return hash & smMasks[depth]; } -SHAMapNode::SHAMapNode(int depth, const uint256 &hash) : mDepth(depth) +SHAMapNode::SHAMapNode(int depth, const uint256 &hash) : mDepth(depth), mHash(0) { // canonicalize the hash to a node ID for this depth assert((depth >= 0) && (depth < 65)); mNodeID = getNodeID(depth, hash); } -SHAMapNode::SHAMapNode(const void *ptr, int len) +SHAMapNode::SHAMapNode(const void *ptr, int len) : mHash(0) { - if (len < 33) mDepth = -1; + if (len < 33) + mDepth = -1; else { memcpy(mNodeID.begin(), ptr, 32); From cf726c7749fb8d681bde6eb384d8e6d3a882eec5 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 03:37:45 -0800 Subject: [PATCH 341/525] Don't connect to invalid IP:port combinations. --- src/cpp/ripple/ConnectionPool.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/ConnectionPool.cpp b/src/cpp/ripple/ConnectionPool.cpp index fa916d4cb..097a39362 100644 --- a/src/cpp/ripple/ConnectionPool.cpp +++ b/src/cpp/ripple/ConnectionPool.cpp @@ -284,7 +284,7 @@ void ConnectionPool::relayMessageTo(const std::set& fromPeers, const Pac // Requires sane IP and port. void ConnectionPool::connectTo(const std::string& strIp, int iPort) { - if (theConfig.RUN_STANDALONE) + if (theConfig.RUN_STANDALONE || (iPort < 0)) return; { From 755182c26634863bc668728d6796f50547526292 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 03:38:15 -0800 Subject: [PATCH 342/525] Cleanups. --- src/cpp/ripple/SHAMap.h | 4 ++-- src/cpp/ripple/uint256.h | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/SHAMap.h b/src/cpp/ripple/SHAMap.h index a03eb76bd..fb5fbc155 100644 --- a/src/cpp/ripple/SHAMap.h +++ b/src/cpp/ripple/SHAMap.h @@ -204,9 +204,9 @@ public: bool isAccountState() const { return mType == tnACCOUNT_STATE; } // inner node functions - bool isInnerNode() const { return !mItem; } + bool isInnerNode() const { return !mItem; } bool setChildHash(int m, const uint256& hash); - bool isEmptyBranch(int m) const { return !mHashes[m]; } + bool isEmptyBranch(int m) const { return mHashes[m].isZero(); } bool isEmpty() const; int getBranchCount() const; void makeInner(); diff --git a/src/cpp/ripple/uint256.h b/src/cpp/ripple/uint256.h index 2937be12a..872fce531 100644 --- a/src/cpp/ripple/uint256.h +++ b/src/cpp/ripple/uint256.h @@ -298,22 +298,22 @@ public: unsigned char* begin() { - return (unsigned char*) &pn[0]; + return reinterpret_cast(pn); } unsigned char* end() { - return (unsigned char*) &pn[WIDTH]; + return reinterpret_cast(pn + WIDTH); } const unsigned char* begin() const { - return (const unsigned char*) &pn[0]; + return reinterpret_cast(pn); } const unsigned char* end() const { - return (unsigned char*) &pn[WIDTH]; + return reinterpret_cast(pn + WIDTH); } unsigned int size() const From a62fb9a52f68f530ee3c369332e05388257989e5 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 04:01:22 -0800 Subject: [PATCH 343/525] operator& was way inefficient. --- src/cpp/ripple/uint256.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/uint256.h b/src/cpp/ripple/uint256.h index 872fce531..c00a7624a 100644 --- a/src/cpp/ripple/uint256.h +++ b/src/cpp/ripple/uint256.h @@ -475,7 +475,7 @@ inline const uint256 operator|(const base_uint256& a, const uint256& b) { return inline bool operator==(const uint256& a, const base_uint256& b) { return (base_uint256)a == (base_uint256)b; } inline bool operator!=(const uint256& a, const base_uint256& b) { return (base_uint256)a != (base_uint256)b; } inline const uint256 operator^(const uint256& a, const base_uint256& b) { return (base_uint256)a ^ (base_uint256)b; } -inline const uint256 operator&(const uint256& a, const base_uint256& b) { return (base_uint256)a & (base_uint256)b; } +inline const uint256 operator&(const uint256& a, const base_uint256& b) { return uint256(a) &= b; } inline const uint256 operator|(const uint256& a, const base_uint256& b) { return (base_uint256)a | (base_uint256)b; } inline bool operator==(const uint256& a, const uint256& b) { return (base_uint256)a == (base_uint256)b; } inline bool operator!=(const uint256& a, const uint256& b) { return (base_uint256)a != (base_uint256)b; } From 1b8f20eaa78b71915f6b45162a6017a507586ab1 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 04:44:41 -0800 Subject: [PATCH 344/525] Some tuning. --- src/cpp/ripple/LedgerMaster.cpp | 2 +- src/cpp/ripple/uint256.h | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 1bac9de87..05d28e3e8 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -194,7 +194,7 @@ bool LedgerMaster::acquireMissingLedger(Ledger::ref origLedger, const uint256& l theApp->getIOService().post(boost::bind(&LedgerMaster::missingAcquireComplete, this, mMissingLedger)); } - if (theApp->getMasterLedgerAcquire().getFetchCount() < 5) + if (theApp->getMasterLedgerAcquire().getFetchCount() < 3) { int count = 0; typedef std::pair u_pair; diff --git a/src/cpp/ripple/uint256.h b/src/cpp/ripple/uint256.h index c00a7624a..3ec6c45d4 100644 --- a/src/cpp/ripple/uint256.h +++ b/src/cpp/ripple/uint256.h @@ -423,10 +423,8 @@ public: uint256& operator=(const basetype& b) { - for (int i = 0; i < WIDTH; i++) - pn[i] = b.pn[i]; - - return *this; + if (pn != b.pn) + memcpy(pn, b.pn, sizeof(pn)); } uint256(uint64 b) From 35f36d61e219ad8de89e300ecbd622c071d994b7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 04:45:28 -0800 Subject: [PATCH 345/525] Oops. Accidentally removed a line. --- src/cpp/ripple/uint256.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/uint256.h b/src/cpp/ripple/uint256.h index 3ec6c45d4..eb74f0f5e 100644 --- a/src/cpp/ripple/uint256.h +++ b/src/cpp/ripple/uint256.h @@ -425,6 +425,7 @@ public: { if (pn != b.pn) memcpy(pn, b.pn, sizeof(pn)); + return *this; } uint256(uint64 b) From 3febe8ae2a1fa7cdf1702791b09842c58b488b5a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 05:22:52 -0800 Subject: [PATCH 346/525] Make sure backfilling is disabled in standalone mode. --- src/cpp/ripple/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index ebcef7eb0..73667e3e2 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -173,6 +173,7 @@ int main(int argc, char* argv[]) if (vm.count("standalone")) { theConfig.RUN_STANDALONE = true; + theConfig.LEDGER_HISTORY = 0; } } From 5a6f306c59f0df32ee06ccd3ee20c74aaf6dcbeb Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 08:34:14 -0800 Subject: [PATCH 347/525] Remove extra whitespace. --- src/cpp/ripple/Peer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 7457c2259..784276c94 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1170,7 +1170,7 @@ void Peer::recvGetObjectByHash(ripple::TMGetObjectByHash& packet) theApp->getHashedObjectStore().store(type, seq, data, hash); } else - cLog(lsWARNING) << "Received unwanted hash " << getIP() << " " << hash; + cLog(lsWARNING) << "Received unwanted hash " << getIP() << " " << hash; } } } From cbeb6a50e85ead42c32b82b34ebe8f1861f4eea0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 08:34:36 -0800 Subject: [PATCH 348/525] LedgerAcquire::filterNodes wasn't following the right logic. --- src/cpp/ripple/LedgerAcquire.cpp | 95 ++++++++++++++++++-------------- src/cpp/ripple/LedgerAcquire.h | 2 +- 2 files changed, 56 insertions(+), 41 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 89a6b707e..9a71dcd24 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -284,6 +284,7 @@ void LedgerAcquire::trigger(Peer::ref peer) bool typeSet = false; BOOST_FOREACH(neededHash_t& p, need) { + cLog(lsWARNING) << "Want: " << p.second; theApp->getOPs().addWantedHash(p.second); if (!typeSet) { @@ -365,15 +366,18 @@ void LedgerAcquire::trigger(Peer::ref peer) } else { - filterNodes(nodeIDs, nodeHashes, mRecentTXNodes, 128); - tmGL.set_itype(ripple::liTX_NODE); - BOOST_FOREACH(SHAMapNode& it, nodeIDs) + filterNodes(nodeIDs, nodeHashes, mRecentTXNodes, 128, !isProgress()); + if (!nodeIDs.empty()) { - *(tmGL.add_nodeids()) = it.getRawString(); + tmGL.set_itype(ripple::liTX_NODE); + BOOST_FOREACH(SHAMapNode& it, nodeIDs) + { + *(tmGL.add_nodeids()) = it.getRawString(); + } + cLog(lsTRACE) << "Sending TX node " << nodeIDs.size() + << " request to " << (peer ? "selected peer" : "all peers"); + sendRequest(tmGL, peer); } - cLog(lsTRACE) << "Sending TX node " << nodeIDs.size() - << " request to " << (peer ? "selected peer" : "all peers"); - sendRequest(tmGL, peer); } } } @@ -409,14 +413,17 @@ void LedgerAcquire::trigger(Peer::ref peer) } else { - filterNodes(nodeIDs, nodeHashes, mRecentASNodes, 128); - tmGL.set_itype(ripple::liAS_NODE); - BOOST_FOREACH(SHAMapNode& it, nodeIDs) - *(tmGL.add_nodeids()) = it.getRawString(); - cLog(lsTRACE) << "Sending AS node " << nodeIDs.size() - << " request to " << (peer ? "selected peer" : "all peers"); - tLog(nodeIDs.size() == 1, lsTRACE) << "AS node: " << nodeIDs[0]; - sendRequest(tmGL, peer); + filterNodes(nodeIDs, nodeHashes, mRecentASNodes, 128, !isProgress()); + if (!nodeIDs.empty()) + { + tmGL.set_itype(ripple::liAS_NODE); + BOOST_FOREACH(SHAMapNode& it, nodeIDs) + *(tmGL.add_nodeids()) = it.getRawString(); + cLog(lsTRACE) << "Sending AS node " << nodeIDs.size() + << " request to " << (peer ? "selected peer" : "all peers"); + tLog(nodeIDs.size() == 1, lsTRACE) << "AS node: " << nodeIDs[0]; + sendRequest(tmGL, peer); + } } } } @@ -475,39 +482,47 @@ int PeerSet::getPeerCount() const } void LedgerAcquire::filterNodes(std::vector& nodeIDs, std::vector& nodeHashes, - std::set& recentNodes, int max) + std::set& recentNodes, int max, bool aggressive) { // ask for new nodes in preference to ones we've already asked for std::vector duplicates; duplicates.reserve(nodeIDs.size()); - if (nodeIDs.size() > 4) + int dupCount; + + for (int i = 0; i < nodeIDs.size(); ++i) { - std::vector duplicates; - duplicates.reserve(nodeIDs.size()); + bool isDup = recentNodes.count(nodeIDs[i]) != 0; + duplicates.push_back(isDup); + if (isDup) + ++dupCount; + } - for (int i = 0; i < nodeIDs.size(); ++i) - duplicates.push_back(recentNodes.count(nodeIDs[i]) != 0); - - if (!duplicates.empty() && (duplicates.size() != nodeIDs.size())) - { // some, but not all, duplicates - int insertPoint = 0; - for (int i = 0; i < nodeIDs.size(); ++i) - if (!duplicates[i]) - { // Keep this node - if (insertPoint != i) - { - nodeIDs[insertPoint] = nodeIDs[i]; - nodeHashes[insertPoint] = nodeHashes[i]; - } - ++insertPoint; - } - - cLog(lsDEBUG) << "filterNodes " << nodeIDs.size() << " to " << insertPoint; - - nodeIDs.resize(insertPoint); - nodeHashes.resize(insertPoint); + if (dupCount == nodeIDs.size()) + { // all duplicates + if (!aggressive) + { + nodeIDs.clear(); + nodeHashes.clear(); + return; } } + else if (dupCount > 0) + { // some, but not all, duplicates + int insertPoint = 0; + for (int i = 0; i < nodeIDs.size(); ++i) + if (!duplicates[i]) + { // Keep this node + if (insertPoint != i) + { + nodeIDs[insertPoint] = nodeIDs[i]; + nodeHashes[insertPoint] = nodeHashes[i]; + } + ++insertPoint; + } + cLog(lsDEBUG) << "filterNodes " << nodeIDs.size() << " to " << insertPoint; + nodeIDs.resize(insertPoint); + nodeHashes.resize(insertPoint); + } if (nodeIDs.size() > max) { diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 6dcc31879..805c84c09 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -128,7 +128,7 @@ public: std::vector getNeededHashes(); static void filterNodes(std::vector& nodeIDs, std::vector& nodeHashes, - std::set& recentNodes, int max); + std::set& recentNodes, int max, bool aggressive); }; class LedgerAcquireMaster From 55d1af746c0689a82de8a0054583f38dea0c5258 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 08:42:24 -0800 Subject: [PATCH 349/525] Share the 'shouldAcquire' function. recvGetLedger will needed it. --- src/cpp/ripple/LedgerMaster.cpp | 2 +- src/cpp/ripple/LedgerMaster.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 05d28e3e8..116bfd313 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -233,7 +233,7 @@ void LedgerMaster::missingAcquireComplete(LedgerAcquire::pointer acq) } } -static bool shouldAcquire(uint32 currentLedger, uint32 ledgerHistory, uint32 candidateLedger) +bool LedgerMaster::shouldAcquire(uint32 currentLedger, uint32 ledgerHistory, uint32 candidateLedger) { bool ret; if (candidateLedger >= currentLedger) diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 67cca3c27..ebb10d227 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -124,6 +124,8 @@ public: void checkAccept(const uint256& hash); void checkAccept(const uint256& hash, uint32 seq); void tryPublish(); + + static bool shouldAcquire(uint32 currentLedgerID, uint32 ledgerHistory, uint32 targetLedger); }; #endif From efe63c3261068ed70434f70baa998ac082402e28 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 08:43:56 -0800 Subject: [PATCH 350/525] Mark a minor fixme. --- src/cpp/ripple/Peer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 784276c94..a2bb2dc96 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1335,7 +1335,8 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) if (!map) { if (packet.has_querytype() && !packet.has_requestcookie()) - { + { // FIXME: Don't relay requests for older ledgers we would acquire + // (if we don't have them, we can't get them) cLog(lsINFO) << "Trying to route TX set request"; std::vector peerList = theApp->getConnectionPool().getPeerVector(); std::vector usablePeers; From 3b66a1364600dd3da94df1239dc1f34678918e75 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 12 Jan 2013 10:56:29 -0800 Subject: [PATCH 351/525] Standalone fixes. --- src/cpp/ripple/ConnectionPool.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/ConnectionPool.cpp b/src/cpp/ripple/ConnectionPool.cpp index 097a39362..3bac3246b 100644 --- a/src/cpp/ripple/ConnectionPool.cpp +++ b/src/cpp/ripple/ConnectionPool.cpp @@ -284,9 +284,6 @@ void ConnectionPool::relayMessageTo(const std::set& fromPeers, const Pac // Requires sane IP and port. void ConnectionPool::connectTo(const std::string& strIp, int iPort) { - if (theConfig.RUN_STANDALONE || (iPort < 0)) - return; - { Database* db = theApp->getWalletDB()->getDB(); ScopedLock sl(theApp->getWalletDB()->getDBLock()); @@ -649,7 +646,11 @@ void ConnectionPool::scanHandler(const boost::system::error_code& ecResult) // Scan ips as per db entries. void ConnectionPool::scanRefresh() { - if (mScanning) + if (theConfig.RUN_STANDALONE) + { + nothing(); + } + else if (mScanning) { // Currently scanning, will scan again after completion. cLog(lsTRACE) << "Pool: Scan: already scanning"; From 8c5f08ad9bcd3f64f230602bff0a1825375be86c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 12 Jan 2013 12:48:18 -0800 Subject: [PATCH 352/525] UT: More work on detecting standalone server exit. --- src/js/remote.js | 13 ++++++++++++- test/server.js | 6 ++++-- test/testutils.js | 16 ++++++++++++++-- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/js/remote.js b/src/js/remote.js index af5046cbb..992560eeb 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -196,6 +196,7 @@ var Remote = function (opts, trace) { this.local_fee = opts.local_fee; // Locally set fees this.id = 0; this.trace = opts.trace || trace; + this._server_fatal = false; // True, if we know server exited. this._ledger_current_index = undefined; this._ledger_hash = undefined; this._ledger_time = undefined; @@ -289,6 +290,11 @@ Remote.fees = { 'offer' : Amount.from_json("10"), }; +// Inform remote that the remote server is not comming back. +Remote.prototype.server_fatal = function () { + this._server_fatal = true; +}; + // Set the emitted state: 'online' or 'offline' Remote.prototype._set_state = function (state) { if (this.trace) console.log("remote: set_state: %s", state); @@ -378,7 +384,12 @@ Remote.prototype._connect_retry = function () { this.retry_timer = setTimeout(function () { if (self.trace) console.log("remote: retry"); - if (self.online_target) { + if (self._server_fatal) { + // Stop trying to connect. + // nothing(); + console.log("FATAL"); + } + else if (self.online_target) { self._connect_start(); } else { diff --git a/test/server.js b/test/server.js index 84d5164b4..5a5d79cc2 100644 --- a/test/server.js +++ b/test/server.js @@ -98,6 +98,10 @@ Server.prototype._serverSpawnSync = function() { // By default, just log exits. this.child.on('exit', function(code, signal) { + if (!self.quiet) console.log("server: spawn: server exited code=%s: signal=%s", code, signal); + + self.emit('exited'); + // Workaround for // https://github.com/busterjs/buster/issues/266 if (!self.stopping) { @@ -108,8 +112,6 @@ Server.prototype._serverSpawnSync = function() { // If regular exit: code=0, signal=null // Fail the test if the server has not called "stop". buster.assert(self.stopping, 'Server died with signal '+signal); - - if (!self.quiet) console.log("server: spawn: server exited code=%s: signal=%s", code, signal); }); }; diff --git a/test/testutils.js b/test/testutils.js index 55e87a38d..399a6f513 100644 --- a/test/testutils.js +++ b/test/testutils.js @@ -90,10 +90,22 @@ var build_setup = function (opts, host) { function runServerStep(callback) { if (opts.no_server) return callback(); - data.server = Server.from_config(host, !!opts.verbose_server).on('started', callback).start(); + data.server = Server + .from_config(host, !!opts.verbose_server) + .on('started', callback) + .on('exited', function () { + // If know the remote, tell it server is gone. + if (self.remote) + self.remote.server_fatal(); + }) + .start(); }, function connectWebsocketStep(callback) { - self.remote = data.remote = Remote.from_config(host, !!opts.verbose_ws).once('ledger_closed', callback).connect(); + self.remote = data.remote = + Remote + .from_config(host, !!opts.verbose_ws) + .once('ledger_closed', callback) + .connect(); } ], done); }; From 23c01e549f41a98d89b42e37ceae1005f2fb872c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 12 Jan 2013 20:39:11 -0800 Subject: [PATCH 353/525] Cosmetic. --- src/cpp/ripple/SecureAllocator.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/SecureAllocator.h b/src/cpp/ripple/SecureAllocator.h index 295d46d67..85c3b6db2 100644 --- a/src/cpp/ripple/SecureAllocator.h +++ b/src/cpp/ripple/SecureAllocator.h @@ -40,4 +40,4 @@ struct secure_allocator : public std::allocator } std::allocator::deallocate(p, n); } -}; \ No newline at end of file +}; From fb493f6415d8c5921aad1c9bfe25cd55ca279e1e Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 12 Jan 2013 20:58:16 -0800 Subject: [PATCH 354/525] Cosmetic. --- src/cpp/ripple/AccountSetTransactor.h | 4 +++- src/cpp/ripple/OfferCancelTransactor.h | 6 ++++-- src/cpp/ripple/OfferCreateTransactor.h | 2 +- src/cpp/ripple/RegularKeySetTransactor.h | 2 ++ src/cpp/ripple/TrustSetTransactor.h | 4 +++- src/cpp/ripple/WalletAddTransactor.h | 4 +++- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/AccountSetTransactor.h b/src/cpp/ripple/AccountSetTransactor.h index 214a32d27..160192161 100644 --- a/src/cpp/ripple/AccountSetTransactor.h +++ b/src/cpp/ripple/AccountSetTransactor.h @@ -6,4 +6,6 @@ public: AccountSetTransactor(const SerializedTransaction& txn,TransactionEngineParams params, TransactionEngine* engine) : Transactor(txn,params,engine) {} TER doApply(); -}; \ No newline at end of file +}; + +// vim:ts=4 diff --git a/src/cpp/ripple/OfferCancelTransactor.h b/src/cpp/ripple/OfferCancelTransactor.h index 8ddd6a5c1..0f9a4eb6b 100644 --- a/src/cpp/ripple/OfferCancelTransactor.h +++ b/src/cpp/ripple/OfferCancelTransactor.h @@ -4,6 +4,8 @@ class OfferCancelTransactor : public Transactor { public: OfferCancelTransactor(const SerializedTransaction& txn,TransactionEngineParams params, TransactionEngine* engine) : Transactor(txn,params,engine) {} - + TER doApply(); -}; \ No newline at end of file +}; + +// vim:ts=4 diff --git a/src/cpp/ripple/OfferCreateTransactor.h b/src/cpp/ripple/OfferCreateTransactor.h index 02db25ca6..3310168c6 100644 --- a/src/cpp/ripple/OfferCreateTransactor.h +++ b/src/cpp/ripple/OfferCreateTransactor.h @@ -19,4 +19,4 @@ public: TER doApply(); }; - +// vim:ts=4 diff --git a/src/cpp/ripple/RegularKeySetTransactor.h b/src/cpp/ripple/RegularKeySetTransactor.h index 775bd0e01..705a7dbfe 100644 --- a/src/cpp/ripple/RegularKeySetTransactor.h +++ b/src/cpp/ripple/RegularKeySetTransactor.h @@ -8,3 +8,5 @@ public: TER checkFee(); TER doApply(); }; + +// vim:ts=4 diff --git a/src/cpp/ripple/TrustSetTransactor.h b/src/cpp/ripple/TrustSetTransactor.h index 69b09aa01..ec6cdcd1d 100644 --- a/src/cpp/ripple/TrustSetTransactor.h +++ b/src/cpp/ripple/TrustSetTransactor.h @@ -6,4 +6,6 @@ public: TrustSetTransactor(const SerializedTransaction& txn,TransactionEngineParams params, TransactionEngine* engine) : Transactor(txn,params,engine) {} TER doApply(); -}; \ No newline at end of file +}; + +// vim:ts=4 diff --git a/src/cpp/ripple/WalletAddTransactor.h b/src/cpp/ripple/WalletAddTransactor.h index 8bed5f0fe..7f6fef676 100644 --- a/src/cpp/ripple/WalletAddTransactor.h +++ b/src/cpp/ripple/WalletAddTransactor.h @@ -7,4 +7,6 @@ public: WalletAddTransactor(const SerializedTransaction& txn,TransactionEngineParams params, TransactionEngine* engine) : Transactor(txn,params,engine) {} TER doApply(); -}; \ No newline at end of file +}; + +// vim:ts=4 From a2abddff4f0cdec1f89c45a976654ce04d2e0c15 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 12 Jan 2013 21:39:24 -0800 Subject: [PATCH 355/525] Cosmetic. --- src/cpp/ripple/Contract.cpp | 2 +- src/cpp/ripple/Contract.h | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Contract.cpp b/src/cpp/ripple/Contract.cpp index 09c3a4ecf..b6db42831 100644 --- a/src/cpp/ripple/Contract.cpp +++ b/src/cpp/ripple/Contract.cpp @@ -32,4 +32,4 @@ void Contract::executeAccept() //interpreter.interpret(this,code); } - +// vim:ts=4 diff --git a/src/cpp/ripple/Contract.h b/src/cpp/ripple/Contract.h index 76d30dc54..9a708a75c 100644 --- a/src/cpp/ripple/Contract.h +++ b/src/cpp/ripple/Contract.h @@ -27,4 +27,6 @@ public: void executeAccept(); }; -#endif \ No newline at end of file +#endif + +// vim:ts=4 From 8f5f8bdb4e3270e033343c2ea7d091cd62746b9b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 21:44:38 -0800 Subject: [PATCH 356/525] It was my bug after all. Fix create after delete. --- src/cpp/ripple/LedgerEntrySet.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index d0affac0c..18780f1de 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -92,9 +92,7 @@ SLE::pointer LedgerEntrySet::entryCache(LedgerEntryType letType, const uint256& entryCache(sleEntry); } else if (action == taaDELETE) - { - assert(false); - } + sleEntry.reset(); } return sleEntry; } From e5c1b3e6f2eeedfd56ba6d1cceff46e7bf1c1c13 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 21:48:15 -0800 Subject: [PATCH 357/525] Remove a bogus assert. --- src/cpp/ripple/LedgerAcquire.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 9a71dcd24..8f5e744cb 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -331,7 +331,6 @@ void LedgerAcquire::trigger(Peer::ref peer) return; } - assert(mLedger); if (mLedger) tmGL.set_ledgerseq(mLedger->getLedgerSeq()); From 5a22118b25e10e1a9e74b35f761f8ef594cf59f0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 21:48:25 -0800 Subject: [PATCH 358/525] Remove operator== and operator!= on RangeSet. --- src/cpp/ripple/RangeSet.cpp | 8 -------- src/cpp/ripple/RangeSet.h | 3 --- 2 files changed, 11 deletions(-) diff --git a/src/cpp/ripple/RangeSet.cpp b/src/cpp/ripple/RangeSet.cpp index e9c4b38f9..cc9e6d9ab 100644 --- a/src/cpp/ripple/RangeSet.cpp +++ b/src/cpp/ripple/RangeSet.cpp @@ -115,13 +115,6 @@ BOOST_AUTO_TEST_CASE(RangeSet_test) RangeSet r1, r2; - if (r1 != r2) BOOST_FAIL("RangeSet fail"); - - r1.setValue(1); - if (r1 == r2) BOOST_FAIL("RangeSet fail"); - r2.setRange(1, 1); - if (r1 != r2) BOOST_FAIL("RangeSet fail"); - r1.clear(); r1.setRange(1,10); r1.clearValue(5); @@ -131,7 +124,6 @@ BOOST_AUTO_TEST_CASE(RangeSet_test) r2.setRange(1, 4); r2.setRange(6, 10); r2.setRange(10, 20); - if (r1 != r2) BOOST_FAIL("RangeSet fail"); if (r1.hasValue(5)) BOOST_FAIL("RangeSet fail"); if (!r2.hasValue(9)) BOOST_FAIL("RangeSet fail"); diff --git a/src/cpp/ripple/RangeSet.h b/src/cpp/ripple/RangeSet.h index 5ccf89f07..77ac65290 100644 --- a/src/cpp/ripple/RangeSet.h +++ b/src/cpp/ripple/RangeSet.h @@ -61,9 +61,6 @@ public: static uint32 upper(const_reverse_iterator& it) { return it->upper() - 1; } - bool operator!=(const RangeSet& r) const { return mRanges != r.mRanges; } - bool operator==(const RangeSet& r) const { return mRanges == r.mRanges; } - std::string toString() const; }; From e62aff72cb2b4251a903e82f04ffc91b8cf03b0c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 12 Jan 2013 21:51:57 -0800 Subject: [PATCH 359/525] Cosmetic. --- src/cpp/ripple/Interpreter.h | 7 ++----- src/cpp/ripple/Offer.cpp | 4 +++- src/cpp/ripple/Offer.h | 5 +++-- src/cpp/ripple/Operation.h | 6 ++++-- src/cpp/ripple/OrderBook.h | 4 ++-- src/cpp/ripple/ScriptData.cpp | 4 +++- src/cpp/ripple/ScriptData.h | 5 +++-- 7 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/cpp/ripple/Interpreter.h b/src/cpp/ripple/Interpreter.h index 5b43017bf..f544ab845 100644 --- a/src/cpp/ripple/Interpreter.h +++ b/src/cpp/ripple/Interpreter.h @@ -50,7 +50,7 @@ public: Interpreter(); - // returns a TransactionEngineResult + // returns a TransactionEngineResult TER interpret(Contract* contract,const SerializedTransaction& txn,std::vector& code); void stop(); @@ -67,16 +67,13 @@ public: bool startBlock(int offset); bool endBlock(); - Data::pointer getIntData(); Data::pointer getFloatData(); Data::pointer getUint160Data(); Data::pointer getAcceptData(int index); Data::pointer getContractData(int index); - - }; } // end namespace -#endif \ No newline at end of file +#endif diff --git a/src/cpp/ripple/Offer.cpp b/src/cpp/ripple/Offer.cpp index 5fe7add9f..126f6801b 100644 --- a/src/cpp/ripple/Offer.cpp +++ b/src/cpp/ripple/Offer.cpp @@ -13,4 +13,6 @@ Offer::Offer(SerializedLedgerEntry::pointer ledgerEntry) : AccountItem(ledgerEnt mTakerGets = mLedgerEntry->getFieldAmount(sfTakerGets); mTakerPays = mLedgerEntry->getFieldAmount(sfTakerPays); mSeq = mLedgerEntry->getFieldU32(sfSequence); -} \ No newline at end of file +} + +// vim:ts=4 diff --git a/src/cpp/ripple/Offer.h b/src/cpp/ripple/Offer.h index 75cc5dc57..94a4fe837 100644 --- a/src/cpp/ripple/Offer.h +++ b/src/cpp/ripple/Offer.h @@ -1,6 +1,5 @@ #include "AccountItems.h" - class Offer : public AccountItem { RippleAddress mAccount; @@ -20,4 +19,6 @@ public: RippleAddress getAccount(){ return(mAccount); } int getSeq(){ return(mSeq); } -}; \ No newline at end of file +}; + +// vim:ts=4 diff --git a/src/cpp/ripple/Operation.h b/src/cpp/ripple/Operation.h index 5c0c6b8d1..6e0c75043 100644 --- a/src/cpp/ripple/Operation.h +++ b/src/cpp/ripple/Operation.h @@ -305,7 +305,7 @@ public: bool work(Interpreter* interpreter) { Data::pointer index=interpreter->popStack(); - if(index->isInt32()) + if(index->isInt32()) { interpreter->pushStack( interpreter->getContractData(index->getInt())); return(true); @@ -315,4 +315,6 @@ public: } }; -} \ No newline at end of file +} + +// vim:ts=4 diff --git a/src/cpp/ripple/OrderBook.h b/src/cpp/ripple/OrderBook.h index 7042bb5fe..b4556f01d 100644 --- a/src/cpp/ripple/OrderBook.h +++ b/src/cpp/ripple/OrderBook.h @@ -30,6 +30,6 @@ public: // looks through the best offers to see how much it would cost to take the given amount STAmount& getTakePrice(STAmount& takeAmount); - +}; -}; \ No newline at end of file +// vim:ts=4 diff --git a/src/cpp/ripple/ScriptData.cpp b/src/cpp/ripple/ScriptData.cpp index 52442c0d1..51cb4caf0 100644 --- a/src/cpp/ripple/ScriptData.cpp +++ b/src/cpp/ripple/ScriptData.cpp @@ -1 +1,3 @@ -#include "ScriptData.h" \ No newline at end of file +#include "ScriptData.h" + +// vim:ts=4 diff --git a/src/cpp/ripple/ScriptData.h b/src/cpp/ripple/ScriptData.h index 0e84e8f92..480cc9f25 100644 --- a/src/cpp/ripple/ScriptData.h +++ b/src/cpp/ripple/ScriptData.h @@ -4,7 +4,7 @@ #include namespace Script { -class Data +class Data { public: typedef boost::shared_ptr pointer; @@ -89,5 +89,6 @@ public: } +#endif -#endif \ No newline at end of file +// vim:ts=4 From cced837600a0739c5f6e4260ffaa5986ef0a15e9 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 12 Jan 2013 22:01:21 -0800 Subject: [PATCH 360/525] Fixes for SConstruct on FreeBSD. --- SConstruct | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/SConstruct b/SConstruct index 0800c402b..53745565f 100644 --- a/SConstruct +++ b/SConstruct @@ -75,10 +75,21 @@ else: ] ) +# Apparently, only linux uses -ldl +if not FreeBSD: + env.Append( + LIBS = [ + 'dl', # dynamic linking for linux + ] + ) + +# Apparently, pkg-config --libs protobuf on bsd fails to provide this necessary include dir. +if FreeBSD: + env.Append(LINKFLAGS = ['-I/usr/local/include']) + env.Append( LIBS = [ 'protobuf', - 'dl', # dynamic linking 'z' ] ) From d47c637129035edb3cc435d693c5e3cad036886d Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 12 Jan 2013 22:05:20 -0800 Subject: [PATCH 361/525] Cosmetic. --- src/cpp/ripple/AccountItems.h | 8 +++++--- src/cpp/ripple/OrderBookDB.h | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/AccountItems.h b/src/cpp/ripple/AccountItems.h index fc4afe7c7..3382dff26 100644 --- a/src/cpp/ripple/AccountItems.h +++ b/src/cpp/ripple/AccountItems.h @@ -4,9 +4,9 @@ #include "Ledger.h" #include "SerializedLedger.h" -/* -Way to fetch ledger entries from an account's owner dir -*/ +// +// Fetch ledger entries from an account's owner dir. +// class AccountItem { protected: @@ -42,3 +42,5 @@ public: }; #endif + +// vim:ts=4 diff --git a/src/cpp/ripple/OrderBookDB.h b/src/cpp/ripple/OrderBookDB.h index 206898dad..ded3562ae 100644 --- a/src/cpp/ripple/OrderBookDB.h +++ b/src/cpp/ripple/OrderBookDB.h @@ -27,4 +27,6 @@ public: // returns the best rate we can find float getPrice(uint160& currencyIn,uint160& currencyOut); -}; \ No newline at end of file +}; + +// vim:ts=4 From 23aae75863e8018382400d0af377a925790c23a2 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 22:15:38 -0800 Subject: [PATCH 362/525] Get rid of clear. --- src/cpp/ripple/RangeSet.cpp | 2 -- src/cpp/ripple/RangeSet.h | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/cpp/ripple/RangeSet.cpp b/src/cpp/ripple/RangeSet.cpp index cc9e6d9ab..43d468807 100644 --- a/src/cpp/ripple/RangeSet.cpp +++ b/src/cpp/ripple/RangeSet.cpp @@ -115,12 +115,10 @@ BOOST_AUTO_TEST_CASE(RangeSet_test) RangeSet r1, r2; - r1.clear(); r1.setRange(1,10); r1.clearValue(5); r1.setRange(11, 20); - r2.clear(); r2.setRange(1, 4); r2.setRange(6, 10); r2.setRange(10, 20); diff --git a/src/cpp/ripple/RangeSet.h b/src/cpp/ripple/RangeSet.h index 77ac65290..12623ff02 100644 --- a/src/cpp/ripple/RangeSet.h +++ b/src/cpp/ripple/RangeSet.h @@ -43,8 +43,6 @@ public: void clearRange(uint32, uint32); - void clear() { mRanges.clear(); } - // iterator stuff iterator begin() { return mRanges.begin(); } iterator end() { return mRanges.end(); } From f9e402b9c4a7de3281988b7b113dc4a69d26bb78 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 22:20:56 -0800 Subject: [PATCH 363/525] Boost includes come after system includes. --- src/cpp/ripple/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index 73667e3e2..d9e828145 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -1,6 +1,7 @@ -#include + #include +#include #include #include #include From 7527437f1d3fa76eb5d8703bb063a3b8c32df83e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 22:26:12 -0800 Subject: [PATCH 364/525] Make ALPHABET simpler. --- src/cpp/ripple/Config.cpp | 7 +++---- src/cpp/ripple/RippleAddress.cpp | 2 -- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index 8d0656e3c..129f25965 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -60,7 +60,7 @@ #define DEFAULT_FEE_OPERATION 1 Config theConfig; -const char* ALPHABET = NULL; +const char* ALPHABET = "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz"; void Config::setup(const std::string& strConf, bool bTestNet, bool bQuiet) { @@ -89,9 +89,8 @@ void Config::setup(const std::string& strConf, bool bTestNet, bool bQuiet) SIGN_VALIDATION = TESTNET ? sHP_TestNetValidation : sHP_Validation; SIGN_PROPOSAL = TESTNET ? sHP_TestNetProposal : sHP_Proposal; - ALPHABET = TESTNET - ? "RPShNAF39wBUDnEGHJKLM4pQrsT7VWXYZ2bcdeCg65jkm8ofqi1tuvaxyz" - : "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz"; + if (TESTNET) + ALPHABET = "RPShNAF39wBUDnEGHJKLM4pQrsT7VWXYZ2bcdeCg65jkm8ofqi1tuvaxyz"; if (!strConf.empty()) { diff --git a/src/cpp/ripple/RippleAddress.cpp b/src/cpp/ripple/RippleAddress.cpp index 93fdf7b60..6f90d140a 100644 --- a/src/cpp/ripple/RippleAddress.cpp +++ b/src/cpp/ripple/RippleAddress.cpp @@ -758,8 +758,6 @@ bool RippleAddress::setSeedGeneric(const std::string& strText) bool bResult = true; uint128 uSeed; - ALPHABET = "rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz"; - if (strText.empty() || naTemp.setAccountID(strText) || naTemp.setAccountPublic(strText) From a0bfd579377a30d8849698d3dfa959676fd3c0ef Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 23:47:06 -0800 Subject: [PATCH 365/525] Fix an endless loop. --- src/cpp/ripple/LedgerAcquire.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 8f5e744cb..c023811eb 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -827,7 +827,10 @@ void LedgerAcquireMaster::sweep() while (it != mLedgers.end()) { if (it->second->getLastAction() > now) + { it->second->touch(); + ++it; + } else if ((it->second->getLastAction() + 60) < now) mLedgers.erase(it++); else From 9fd2b543e8f712923ec96be392c46fcfcd90c88a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 Jan 2013 23:54:23 -0800 Subject: [PATCH 366/525] Fix the reason we couldn't recover ledgers. Ledger base data must be stored in CAS. --- src/cpp/ripple/Ledger.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 9581a32d9..273d76515 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -378,6 +378,12 @@ void Ledger::saveAcceptedLedger(bool fromConsensus, LoadEvent::pointer event) assert (getAccountHash() == mAccountStateMap->getHash()); assert (getTransHash() == mTransactionMap->getHash()); + // Save the ledger header in the hashed object store + Serializer s(128); + s.add32(sHP_Ledger); + addRaw(s); + theApp->getHashedObjectStore().store(hotLEDGER, mLedgerSeq, s.peekData(), mHash); + { { ScopedLock sl(theApp->getLedgerDB()->getDBLock()); From 6f33155308af6b973001973922b8913946f0af54 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 13 Jan 2013 00:22:46 -0800 Subject: [PATCH 367/525] Makr ledgers we acquired to accept as closed. --- src/cpp/ripple/LedgerAcquire.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index c023811eb..02cf8ff62 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -216,7 +216,10 @@ void LedgerAcquire::done() if (isComplete() && !isFailed() && mLedger) { if (mAccept) + { + mLedger->setClosed(); mLedger->setAccepted(); + } theApp->getLedgerMaster().storeLedger(mLedger); } else From 9062a0b4ad879f90cdc5b96ba9215b241b041681 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 13 Jan 2013 01:09:39 -0800 Subject: [PATCH 368/525] Make the rippled-example.cfg better for others. --- rippled-example.cfg | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 377cf961a..966fe0779 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -157,7 +157,7 @@ 5005 [rpc_allow_remote] -1 +0 [websocket_ip] 0.0.0.0 @@ -174,12 +174,6 @@ time.apple.com time.nist.gov pool.ntp.org -[validation_seed] -shh1D4oj5czH3PUEjYES8c7Bay3tE - -[validators_file] -validators.txt - [ips] 23.21.167.100 51235 23.23.201.55 51235 From 78cb4ef84f1303a05c2cdceea1c017f0b29d8f1b Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 13 Jan 2013 16:09:09 -0800 Subject: [PATCH 369/525] Major update to exaple files. --- rippled-example.cfg | 156 ++++++++++++++++++++++++++--------------- validators-example.txt | 4 +- 2 files changed, 100 insertions(+), 60 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 966fe0779..94164faab 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -3,34 +3,48 @@ # # This file contains configuration information for rippled. # -# This file should be named rippled.cfg. This file is UTF-8 with Dos, UNIX, -# or Mac style end of lines. Blank lines and lines beginning with '#' are +# Rippled when launched attempts to find this file. For details, refer to the +# wiki page for --conf command line option: +# https://ripple.com/wiki/Rippled#--conf.3Dpath +# +# This file should be named rippled.cfg. This file is UTF-8 with Dos, UNIX, or +# Mac style end of lines. Blank lines and lines beginning with '#' are # ignored. Undefined sections are reserved. No escapes are currently defined. # -# When you launch rippled, it will attempt to find this file. For details, -# refer to the manual page for --conf command line option. -# # [debug_logfile] -# Specifies were a debug logfile is kept. By default, no debug log is kept +# Specifies were a debug logfile is kept. By default, no debug log is kept. +# Unless absolute, the path is relative the directory from which rippled is +# launched. # # Example: debug.log # -# [validators_site]: -# Specifies where to find validators.txt for UNL boostrapping and RPC command unl_network. +# [validators]: +# List of nodes to always accept as validators. Nodes are specified by domain +# or public key. # -# Example: ripple.com +# For domains, rippled will probe for https web servers at the specified +# domain in the following order: ripple.DOMAIN, www.DOMAIN, DOMAIN +# +# For public key entries, a comment may optionally be spcified after adding a +# space to the pulic key. +# +# Examples: +# ripple.com +# n9KorY8QtTdRx7TVDpwnG9NvyxsDwHUKUEeDLY3AkiGncVaSXZi5 +# n9MqiExBcoG19UXwoLjBJnhsxEhAZMuWwJDRdkyDz1EkEkwzQTNt John Doe # # [validators_file]: -# Specifies how to bootstrap the UNL list. The UNL list is based on a -# validators.txt file and is maintained in the databases. When rippled -# starts up, if the databases are missing or are obsolete due to an upgrade -# of rippled, rippled will reconstruct the UNL list as specified here. +# Path to file contain a list of nodes to always accept as validators. Use +# this to specify a file other than this file to manage your validators list. # -# If this entry is not present or empty, rippled will look for a validators.txt in the -# config directory. If not found there, it will attempt to retrieve the file -# from the Ripple foundation's web site. +# If this entry is not present or empty and no nodes from previous runs were +# found in the database, rippled will look for a validators.txt in the config +# directory. If not found there, it will attempt to retrieve the file from +# the [validators_site] web site. # -# This entry is also used by the RPC command unl_load. +# After specifying a different [validators_file] or changing the contents of +# the validators file, issue a RPC unl_load command to have rippled load the +# file. # # Specify the file by specifying its full path. # @@ -38,24 +52,19 @@ # C:/home/johndoe/ripple/validators.txt # /home/johndoe/ripple/validators.txt # -# [validators]: -# Only valid in "rippled.cfg", "ripple.txt", and the referered [validators_url]. -# List of nodes to accept as validators speficied by public key or domain. +# [validators_site]: +# Specifies where to find validators.txt for UNL boostrapping and RPC +# unl_network command. # -# For domains, rippled will probe for https web servers at the specied -# domain in the following order: ripple.DOMAIN, www.DOMAIN, DOMAIN -# -# Examples: -# ripple.com -# n9KorY8QtTdRx7TVDpwnG9NvyxsDwHUKUEeDLY3AkiGncVaSXZi5 -# n9MqiExBcoG19UXwoLjBJnhsxEhAZMuWwJDRdkyDz1EkEkwzQTNt John Doe +# Example: ripple.com # # [ips]: -# Only valid in "rippled.cfg", "ripple.txt", and the referered [ips_url]. -# List of ips where the Ripple protocol is avialable. Domain names are not -# allowed. One ipv4 or ipv6 address per line. A port may optionally be -# specified after adding a space to the address. By convention, if known, -# IPs are listed in from most to least trusted. +# List of ips where the Ripple protocol is served. For a starter list, you +# can copy entries from: https://ripple.com/ripple.txt +# +# Domain names are not allowed. One ipv4 or ipv6 address per line. A port +# may optionally be specified after adding a space to the address. By +# convention, if known, IPs are listed in from most to least trusted. # # Examples: # 192.168.0.1 @@ -63,8 +72,14 @@ # 2001:0db8:0100:f101:0210:a4ff:fee3:9566 # # [sntp_servers] -# IP address or domain of servers to use for time synchronization. -# The default time servers are suitable for servers located in the United States +# IP address or domain of NTP servers to use for time synchronization. +# +# These NTP servers are suitable for rippled servers located in the United +# States: +# time.windows.com +# time.apple.com +# time.nist.gov +# pool.ntp.org # # [peer_ip]: # IP address or domain to bind to allow external connections from peers. @@ -77,7 +92,7 @@ # # [peer_private]: # 0 or 1. -# 0: allow peers to broadcast your address. [default] +# 0: request peers to broadcast your address. [default] # 1: request peers not broadcast your address. # # [rpc_ip]: @@ -91,18 +106,28 @@ # 0 or 1. # 0: only allows RPC connections from 127.0.0.1. [default] # +# [websocket_public_ip]: +# IP address or domain to bind to allow untrusted connections from clients. +# In the future, this option will go away and the peer_ip will accept +# websocket client connections. +# +# Examples: 0.0.0.0 - Bind on all interfaces. +# 127.0.0.1 - Bind on localhost interface. Only local programs may connect. +# +# [websocket_public_port]: +# Port to bind to allow untrusted connections from clients. In the future, +# this option will go away and the peer_ip will accept websocket client +# connections. +# # [websocket_ip]: -# IP address or domain to bind to allow client connections. +# IP address or domain to bind to allow trusted ADMIN connections from backend +# applications. # # Examples: 0.0.0.0 - Bind on all interfaces. # 127.0.0.1 - Bind on localhost interface. Only local programs may connect. # # [websocket_port]: -# Port to bind to allow client connections. -# -# [websocket_ssl]: -# 0 or 1. -# Enable websocket SSL. +# Port to bind to allow trusted ADMIN connections from backend applications. # # [websocket_ssl_key]: # Specify the filename holding the SSL key in PEM format. @@ -116,17 +141,18 @@ # The chain may include the end certificate. # # [validation_seed]: -# To perform validation, this section should contain either a validation seed or key. -# The validation seed is used to generate the validation public/private key pair. -# To obtain a validation seed, use the validation_create command. +# To perform validation, this section should contain either a validation seed +# or key. The validation seed is used to generate the validation +# public/private key pair. To obtain a validation seed, use the +# validation_create command. # # Examples: RASH BUSH MILK LOOK BAD BRIM AVID GAFF BAIT ROT POD LOVE # shfArahZT9Q9ckTf3s1psJ7C7qzVN # # [node_seed]: -# To force a particular node seed or key, the key can be set here. -# The format is the same as the validation_seed field. The need is used for clustering. -# Node seeds start with an 's'. +# To force a particular node seed or key, the key can be set here. The +# format is the same as the validation_seed field. The need is used for +# clustering. Node seeds start with an 's'. # # [cluster_nodes]: # To extend full trust to other nodes, place their node public keys here. @@ -134,22 +160,41 @@ # Node public keys start with an 'n'. # # [ledger_history]: -# To serve clients, servers need historical ledger data. This sets the number of -# past ledgers to acquire on server startup and the minimum to maintain while -# running. Servers that don't need to serve clients can set this to "none". -# Servers that want complete history can set this to "full". -# The default is 256 ledgers. +# The number of past ledgers to acquire on server startup and the minimum to +# maintain while running. +# +# To serve clients, servers need historical ledger data. Servers that don't +# need to serve clients can set this to "none". Servers that want complete +# history can set this to "full". +# +# The default is: 256 # # [database_path]: # Full path of database directory. # +# Allow other peers to connect to this server. [peer_ip] 0.0.0.0 [peer_port] 51235 +# Allow untrusted clients to connect to this server. +[websocket_public_ip] +0.0.0.0 + +[websocket_public_port] +5006 + +# Provide trusted websocket ADMIN access. +[websocket_ip] +127.0.0.1 + +[websocket_port] +6006 + +# Provide trusted json-rpc ADMIN access. [rpc_ip] 127.0.0.1 @@ -159,12 +204,6 @@ [rpc_allow_remote] 0 -[websocket_ip] -0.0.0.0 - -[websocket_port] -5006 - [debug_logfile] log/debug.log @@ -174,6 +213,7 @@ time.apple.com time.nist.gov pool.ntp.org +# Where to find some other servers speaking the Ripple protocol. [ips] 23.21.167.100 51235 23.23.201.55 51235 diff --git a/validators-example.txt b/validators-example.txt index cde2a6711..033ad8c48 100644 --- a/validators-example.txt +++ b/validators-example.txt @@ -2,7 +2,7 @@ # Default validators.txt # # A list of domains to bootstrap a nodes UNLs or for clients to indirectly -# locate IPs to contact the Newcoin network. +# locate IPs to contact the Ripple network. # # This file is UTF-8 with Dos, UNIX, or Mac style end of lines. # Blank lines and lines starting with a '#' are ignored. @@ -11,7 +11,7 @@ # [validators]: # List of nodes to accept as validators specified by public key or domain. # -# For domains, newcoind will probe for https web servers at the specified +# For domains, rippled will probe for https web servers at the specified # domain in the following order: ripple.DOMAIN, www.DOMAIN, DOMAIN # # Examples: redstem.com From b49c5dc80dbcbfa0d9171b407ce5e8037cee2695 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 13 Jan 2013 16:17:28 -0800 Subject: [PATCH 370/525] Whitespace. --- src/cpp/ripple/Suppression.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cpp/ripple/Suppression.cpp b/src/cpp/ripple/Suppression.cpp index 5eee0ab7f..1bd594d40 100644 --- a/src/cpp/ripple/Suppression.cpp +++ b/src/cpp/ripple/Suppression.cpp @@ -1,4 +1,3 @@ - #include "Suppression.h" #include @@ -116,4 +115,4 @@ bool SuppressionTable::swapSet(const uint256& index, std::set& peers, in s.setFlag(flag); return true; -} \ No newline at end of file +} From 3b905588b50156c71ac81d872bfb25b6d783aec3 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 13 Jan 2013 17:47:29 -0800 Subject: [PATCH 371/525] Make create after delete officially legal. --- src/cpp/ripple/LedgerEntrySet.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 18780f1de..5b6b926d6 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -135,16 +135,17 @@ void LedgerEntrySet::entryCreate(SLE::ref sle) return; } - assert(it->second.mSeq == mSeq); - switch (it->second.mAction) { - case taaMODIFY: - throw std::runtime_error("Create after modify"); case taaDELETE: - throw std::runtime_error("Create after delete"); // We could make this a modify + it->second.mEntry = sle; + it->second.mAction = taaMODIFY; + it->second.mSeq = mSeq; + break; + case taaMODIFY: + throw std::runtime_error("Create after modify"); case taaCREATE: throw std::runtime_error("Create after create"); // We could make this work @@ -154,6 +155,8 @@ void LedgerEntrySet::entryCreate(SLE::ref sle) default: throw std::runtime_error("Unknown taa"); } + + assert(it->second.mSeq == mSeq); } void LedgerEntrySet::entryModify(SLE::ref sle) @@ -173,6 +176,8 @@ void LedgerEntrySet::entryModify(SLE::ref sle) case taaCACHED: it->second.mAction = taaMODIFY; fallthru(); + + case taaCREATE: case taaMODIFY: it->second.mSeq = mSeq; it->second.mEntry = sle; @@ -181,11 +186,6 @@ void LedgerEntrySet::entryModify(SLE::ref sle) case taaDELETE: throw std::runtime_error("Modify after delete"); - case taaCREATE: - it->second.mSeq = mSeq; - it->second.mEntry = sle; - break; - default: throw std::runtime_error("Unknown taa"); } From 87ecbdf653f488ba7ea7548928317219721355ad Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 13 Jan 2013 19:53:20 -0800 Subject: [PATCH 372/525] UT: Fix crossing own offer test. --- test/offer-test.js | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/test/offer-test.js b/test/offer-test.js index 2d59657b1..1e347fd13 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -68,7 +68,7 @@ buster.testCase("Offer tests", { // console.log("result: error=%s", error); buster.refute(error); - if (error) done(); + done(); }); }, @@ -78,6 +78,8 @@ buster.testCase("Offer tests", { async.waterfall([ function (callback) { + self.what = "Create first offer."; + self.remote.transaction() .offer_create("root", "500/BTC/root", "100/USD/root") .on('proposed', function (m) { @@ -85,16 +87,11 @@ buster.testCase("Offer tests", { callback(m.result !== 'tesSUCCESS'); }) - .on('final', function (m) { - // console.log("FINAL: offer_create: %s", JSON.stringify(m)); - - buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult); - - callback(); - }) .submit(); }, function (callback) { + self.what = "Create crossing offer."; + self.remote.transaction() .offer_create("root", "100/USD/root", "500/BTC/root") .on('proposed', function (m) { @@ -102,20 +99,12 @@ buster.testCase("Offer tests", { callback(m.result !== 'tesSUCCESS'); }) - .on('final', function (m) { - // console.log("FINAL: offer_create: %s", JSON.stringify(m)); - - buster.assert.equals('tesSUCCESS', m.metadata.TransactionResult); - - callback(); - }) .submit(); } ], function (error) { // console.log("result: error=%s", error); - buster.refute(error); - - if (error) done(); + buster.refute(error, self.what); + done(); }); }, From a12a56613979fff9fdff69615655585e16987445 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 13 Jan 2013 21:11:37 -0800 Subject: [PATCH 373/525] Make ripple_path_find work for command line. --- src/cpp/ripple/CallRPC.cpp | 16 +++++++++++++++- src/cpp/ripple/CallRPC.h | 1 + src/cpp/ripple/RPCHandler.cpp | 28 ++++++++++++++-------------- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 2affdb290..1f498a047 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -270,6 +270,20 @@ Json::Value RPCParser::parseAccountItems(const Json::Value& jvParams) return jvRequest; } +// ripple_path_find json +Json::Value RPCParser::parseRipplePathFind(const Json::Value& jvParams) +{ + Json::Value txJSON; + Json::Reader reader; + + cLog(lsTRACE) << "RPC json:" << jvParams[0u]; + if (reader.parse(jvParams[0u].asString(), txJSON)) + { + return txJSON; + } + + return rpcError(rpcINVALID_PARAMS); +} // submit any transaction to the network // submit private_key json @@ -444,7 +458,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) { "peers", &RPCParser::parseAsIs, 0, 0 }, // { "profile", &RPCParser::parseProfile, 1, 9 }, { "random", &RPCParser::parseAsIs, 0, 0 }, -// { "ripple_path_find", &RPCParser::parseRipplePathFind, -1, -1 }, + { "ripple_path_find", &RPCParser::parseRipplePathFind, 1, 1 }, { "submit", &RPCParser::parseSubmit, 2, 2 }, { "server_info", &RPCParser::parseAsIs, 0, 0 }, { "stop", &RPCParser::parseAsIs, 0, 0 }, diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index 99c34ddf7..4c893256c 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -29,6 +29,7 @@ protected: Json::Value parseLogLevel(const Json::Value& jvParams); Json::Value parseOwnerInfo(const Json::Value& jvParams); Json::Value parseRandom(const Json::Value& jvParams); + Json::Value parseRipplePathFind(const Json::Value& jvParams); Json::Value parseSubmit(const Json::Value& jvParams); Json::Value parseTx(const Json::Value& jvParams); Json::Value parseTxHistory(const Json::Value& jvParams); diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index e1b5df434..3791bf946 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -725,23 +725,23 @@ Json::Value RPCHandler::doRipplePathFind(Json::Value jvRequest) RippleAddress raDst; STAmount saDstAmount; - if ( - // Parse raSrc. - !jvRequest.isMember("source_account") - || !jvRequest["source_account"].isString() - || !raSrc.setAccountID(jvRequest["source_account"].asString())) + if (!jvRequest.isMember("source_account")) { - cLog(lsINFO) << "Bad source_account."; - jvResult = rpcError(rpcINVALID_PARAMS); + jvResult = rpcError(rpcSRC_ACT_MISSING); } - else if ( - // Parse raDst. - !jvRequest.isMember("destination_account") - || !jvRequest["destination_account"].isString() - || !raDst.setAccountID(jvRequest["destination_account"].asString())) + else if (!jvRequest["source_account"].isString() + || !raSrc.setAccountID(jvRequest["source_account"].asString())) { - cLog(lsINFO) << "Bad destination_account."; - jvResult = rpcError(rpcINVALID_PARAMS); + jvResult = rpcError(rpcSRC_ACT_MALFORMED); + } + else if (!jvRequest.isMember("destination_account")) + { + jvResult = rpcError(rpcDST_ACT_MISSING); + } + else if (!jvRequest["destination_account"].isString() + || !raDst.setAccountID(jvRequest["destination_account"].asString())) + { + jvResult = rpcError(rpcDST_ACT_MALFORMED); } else if ( // Parse saDstAmount. From fc78cb38ede74ce30a740e80bc061b0c15c58d73 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 13 Jan 2013 21:40:46 -0800 Subject: [PATCH 374/525] Don't favor (for acquire) peers that come earlier in the peer vector. --- src/cpp/ripple/LedgerAcquire.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 02cf8ff62..7af4122b2 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -172,9 +172,17 @@ void LedgerAcquire::addPeers() { std::vector peerList = theApp->getConnectionPool().getPeerVector(); + int vSize = peerList.size(); + if (vSize == 0) + return; + + // We traverse the peer list in random order so as not to favor any particular peer + int firstPeer = rand() & vSize; + bool found = false; - BOOST_FOREACH(Peer::ref peer, peerList) + for (int i = 0; i < vSize; ++i) { + Peer::ref peer = peerList[(i + firstPeer) % vSize]; if (peer->hasLedger(getHash())) { found = true; @@ -183,10 +191,8 @@ void LedgerAcquire::addPeers() } if (!found) - { - BOOST_FOREACH(Peer::ref peer, peerList) - peerHas(peer); - } + for (int i = 0; i < vSize; ++i) + peerHas(peerList[(i + firstPeer) % vSize]); } boost::weak_ptr LedgerAcquire::pmDowncast() From 5fa43cc770fddbd9a6d56974ff33fdd74a60f737 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 13 Jan 2013 22:46:42 -0800 Subject: [PATCH 375/525] Make a simple way to extend the RPC command set without modifying core server code. This makes it easy to add self-contained modules that can be controlled and is also useful for one-off and troubleshooting commands. --- src/cpp/ripple/CallRPC.cpp | 20 +++++++++++++++++++- src/cpp/ripple/CallRPC.h | 1 + src/cpp/ripple/RPCHandler.cpp | 33 +++++++++++++++++++++++++++++++++ src/cpp/ripple/RPCHandler.h | 27 +++++++++++++++++++++++++++ 4 files changed, 80 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 1f498a047..e9737daa5 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -53,7 +53,23 @@ std::string EncodeBase64(const std::string& s) Json::Value RPCParser::parseAsIs(const Json::Value& jvParams) { - return Json::Value(Json::objectValue); + Json::Value v(Json::objectValue); + if (jvParams.isArray() && (jvParams.size() > 0)) + v["params"] = jvParams; + return v; +} + +Json::Value RPCParser::parseInternal(const Json::Value& jvParams) +{ + Json::Value v(Json::objectValue); + v["internal_command"] = jvParams[0u]; + + Json::Value params(Json::arrayValue); + for (unsigned i = 1; i < jvParams.size(); ++i) + params.append(jvParams[i]); + v["params"] = params; + + return v; } // account_info || @@ -481,6 +497,8 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) { "wallet_propose", &RPCParser::parseWalletPropose, 0, 1 }, { "wallet_seed", &RPCParser::parseWalletSeed, 0, 1 }, + { "internal", &RPCParser::parseInternal, 1, -1 }, + #if ENABLE_INSECURE // XXX Unnecessary commands which should be removed. { "login", &RPCParser::parseLogin, 2, 2 }, diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index 4c893256c..47f0537ff 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -23,6 +23,7 @@ protected: Json::Value parseEvented(const Json::Value& jvParams); Json::Value parseGetCounts(const Json::Value& jvParams); Json::Value parseLedger(const Json::Value& jvParams); + Json::Value parseInternal(const Json::Value& jvParams); #if ENABLE_INSECURE Json::Value parseLogin(const Json::Value& jvParams); #endif diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 3791bf946..938642fde 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2432,6 +2432,13 @@ Json::Value RPCHandler::doRpcCommand(const std::string& strMethod, Json::Value& return jvResult; } +Json::Value RPCHandler::doInternal(Json::Value jvRequest) +{ // Used for debug or special-purpose RPC commands + if (!jvRequest.isMember("internal_command")) + return rpcError(rpcINVALID_PARAMS); + return RPCInternalHandler::runHandler(jvRequest["internal_command"].asString(), jvRequest["params"]); +} + Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { if (!jvRequest.isMember("command")) @@ -2460,6 +2467,7 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { "account_tx", &RPCHandler::doAccountTransactions, false, optNetwork }, { "connect", &RPCHandler::doConnect, true, optNone }, { "get_counts", &RPCHandler::doGetCounts, true, optNone }, + { "internal", &RPCHandler::doInternal, true, optNone }, { "ledger", &RPCHandler::doLedger, false, optNetwork }, { "ledger_accept", &RPCHandler::doLedgerAccept, true, optCurrent }, { "ledger_closed", &RPCHandler::doLedgerClosed, false, optClosed }, @@ -2571,4 +2579,29 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) } } +RPCInternalHandler* RPCInternalHandler::sHeadHandler = NULL; + +RPCInternalHandler::RPCInternalHandler(const std::string& name, handler_t Handler) : mName(name), mHandler(Handler) +{ + mNextHandler = sHeadHandler; + sHeadHandler = this; +} + +Json::Value RPCInternalHandler::runHandler(const std::string& name, const Json::Value& params) +{ + RPCInternalHandler* h = sHeadHandler; + while (h != NULL) + { + if (name == h->mName) + { + cLog(lsWARNING) << "Internal command " << name << ": " << params; + Json::Value ret = h->mHandler(params); + cLog(lsWARNING) << "Internal command returns: " << ret; + return ret; + } + h = h->mNextHandler; + } + return rpcError(rpcBAD_SYNTAX); +} + // vim:ts=4 diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index bfd99ba1a..d5c2d6e69 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -1,8 +1,17 @@ #ifndef __RPCHANDLER__ #define __RPCHANDLER__ +#include + +#include "../json/value.h" + +#include "RippleAddress.h" +#include "SerializedTypes.h" +#include "Ledger.h" + // used by the RPCServer or WSDoor to carry out these RPC commands class NetworkOPs; +class InfoSub; class RPCHandler { @@ -46,6 +55,7 @@ class RPCHandler Json::Value doDataStore(Json::Value params); #endif Json::Value doGetCounts(Json::Value params); + Json::Value doInternal(Json::Value params); Json::Value doLedger(Json::Value params); Json::Value doLogLevel(Json::Value params); Json::Value doLogRotate(Json::Value params); @@ -106,5 +116,22 @@ public: Json::Value doRpcCommand(const std::string& strCommand, Json::Value& jvParams, int iRole); }; +class RPCInternalHandler +{ +public: + typedef Json::Value (*handler_t)(const Json::Value&); + +protected: + static RPCInternalHandler* sHeadHandler; + + RPCInternalHandler* mNextHandler; + std::string mName; + handler_t mHandler; + +public: + RPCInternalHandler(const std::string& name, handler_t handler); + static Json::Value runHandler(const std::string& name, const Json::Value& params); +}; + #endif // vim:ts=4 From 61c07696a79950ab8590a84a7102ab68f992ae13 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 14 Jan 2013 02:12:03 -0800 Subject: [PATCH 376/525] Stop a crash that can happen during shutdown. --- src/cpp/ripple/Application.cpp | 2 ++ src/cpp/ripple/InstanceCounter.h | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 6e9043be6..5be04fc9b 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -54,6 +54,7 @@ Application::Application() : extern const char *RpcDBInit[], *TxnDBInit[], *LedgerDBInit[], *WalletDBInit[], *HashNodeDBInit[], *NetNodeDBInit[]; extern int RpcDBCount, TxnDBCount, LedgerDBCount, WalletDBCount, HashNodeDBCount, NetNodeDBCount; +bool Instance::running = true; void Application::stop() { @@ -65,6 +66,7 @@ void Application::stop() mAuxService.stop(); cLog(lsINFO) << "Stopped: " << mIOService.stopped(); + Instance::shutdown(); } static void InitDB(DatabaseCon** dbCon, const char *fileName, const char *dbInit[], int dbCount) diff --git a/src/cpp/ripple/InstanceCounter.h b/src/cpp/ripple/InstanceCounter.h index aaec9efcd..48f82d033 100644 --- a/src/cpp/ripple/InstanceCounter.h +++ b/src/cpp/ripple/InstanceCounter.h @@ -86,11 +86,13 @@ public: class Instance { protected: + static bool running; InstanceType& mType; public: Instance(InstanceType& t) : mType(t) { mType.addInstance(); } - ~Instance() { mType.decInstance(); } + ~Instance() { if (running) mType.decInstance(); } + static void shutdown() { running = false; } }; #endif From 8afbc33706841ac3d6a05c9e4f477babad028100 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 14 Jan 2013 02:12:30 -0800 Subject: [PATCH 377/525] Some LedgerAcquire improvements. --- src/cpp/ripple/LedgerAcquire.cpp | 74 +++++++++++++++++++++++++++++--- src/cpp/ripple/LedgerAcquire.h | 6 ++- 2 files changed, 72 insertions(+), 8 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 7af4122b2..b54cf0dfb 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -18,7 +18,7 @@ DECLARE_INSTANCE(LedgerAcquire); #define TRUST_NETWORK PeerSet::PeerSet(const uint256& hash, int interval) : mHash(hash), mTimerInterval(interval), mTimeouts(0), - mComplete(false), mFailed(false), mProgress(true), mTimer(theApp->getIOService()) + mComplete(false), mFailed(false), mProgress(true), mAggressive(true), mTimer(theApp->getIOService()) { mLastAction = time(NULL); assert((mTimerInterval > 10) && (mTimerInterval < 30000)); @@ -94,9 +94,18 @@ bool LedgerAcquire::tryLocal() { // return value: true = no more work to do HashedObject::pointer node = theApp->getHashedObjectStore().retrieve(mHash); if (!node) - return false; - - mLedger = boost::make_shared(strCopy(node->getData()), true); + { + mLedger = theApp->getLedgerMaster().getLedgerByHash(mHash); + if (!mLedger) + { + cLog(lsDEBUG) << "root ledger node not local"; + return false; + } + } + else + { + mLedger = boost::make_shared(strCopy(node->getData()), true); + } if (mLedger->getHash() != mHash) { // We know for a fact the ledger can never be acquired cLog(lsWARNING) << mHash << " cannot be a ledger"; @@ -106,15 +115,22 @@ bool LedgerAcquire::tryLocal() mHaveBase = true; if (!mLedger->getTransHash()) + { + cLog(lsDEBUG) << "No TXNs to fetch"; mHaveTransactions = true; + } else { try { mLedger->peekTransactionMap()->fetchRoot(mLedger->getTransHash()); + cLog(lsDEBUG) << "Got root txn map locally"; std::vector h = mLedger->peekTransactionMap()->getNeededHashes(1); if (h.empty()) + { + cLog(lsDEBUG) << "Had full txn map locally"; mHaveTransactions = true; + } } catch (SHAMapMissingNode&) { @@ -128,9 +144,13 @@ bool LedgerAcquire::tryLocal() try { mLedger->peekAccountStateMap()->fetchRoot(mLedger->getAccountHash()); + cLog(lsDEBUG) << "Got root AS map locally"; std::vector h = mLedger->peekAccountStateMap()->getNeededHashes(1); if (h.empty()) + { + cLog(lsDEBUG) << "Had full AS map locally"; mHaveState = true; + } } catch (SHAMapMissingNode&) { @@ -138,7 +158,10 @@ bool LedgerAcquire::tryLocal() } if (mHaveTransactions && mHaveState) + { + cLog(lsDEBUG) << "Had everything locally"; mComplete = true; + } return mComplete; } @@ -158,6 +181,7 @@ void LedgerAcquire::onTimer(bool progress) if (!progress) { + mAggressive = true; cLog(lsDEBUG) << "No progress for ledger " << mHash; if (!getPeerCount()) addPeers(); @@ -328,6 +352,7 @@ void LedgerAcquire::trigger(Peer::ref peer) mHaveBase = true; mHaveTransactions = true; mHaveState = true; + mComplete = true; } } } @@ -374,7 +399,8 @@ void LedgerAcquire::trigger(Peer::ref peer) } else { - filterNodes(nodeIDs, nodeHashes, mRecentTXNodes, 128, !isProgress()); + if (!mAggressive) + filterNodes(nodeIDs, nodeHashes, mRecentTXNodes, 128, !isProgress()); if (!nodeIDs.empty()) { tmGL.set_itype(ripple::liTX_NODE); @@ -421,7 +447,8 @@ void LedgerAcquire::trigger(Peer::ref peer) } else { - filterNodes(nodeIDs, nodeHashes, mRecentASNodes, 128, !isProgress()); + if (!mAggressive) + filterNodes(nodeIDs, nodeHashes, mRecentASNodes, 128, !isProgress()); if (!nodeIDs.empty()) { tmGL.set_itype(ripple::liAS_NODE); @@ -693,6 +720,8 @@ LedgerAcquire::pointer LedgerAcquireMaster::findCreate(const uint256& hash) ptr->addPeers(); ptr->setTimer(); // Cannot call in constructor } + else + cLog(lsINFO) << "LedgerAcquireMaster acquiring ledger we already have"; return ptr; } @@ -732,6 +761,39 @@ std::vector LedgerAcquire::getNeededHashes() return ret; } +Json::Value LedgerAcquire::getJson(int) +{ + Json::Value ret(Json::objectValue); + ret["hash"] = mHash.GetHex(); + if (mComplete) + ret["complete"] = true; + if (mFailed) + ret["failed"] = true; + ret["have_base"] = mHaveBase; + ret["have_state"] = mHaveState; + ret["have_transactions"] = mHaveTransactions; + if (mAborted) + ret["aborted"] = true; + ret["timeouts"] = getTimeouts(); + if (mHaveBase && !mHaveState) + { + Json::Value hv(Json::arrayValue); + std::vector v = mLedger->peekAccountStateMap()->getNeededHashes(16); + BOOST_FOREACH(const uint256& h, v) + hv.append(h.GetHex()); + ret["needed_state_hashes"] = hv; + } + if (mHaveBase && !mHaveTransactions) + { + Json::Value hv(Json::arrayValue); + std::vector v = mLedger->peekTransactionMap()->getNeededHashes(16); + BOOST_FOREACH(const uint256& h, v) + hv.append(h.GetHex()); + ret["needed_transaction_hashes"] = hv; + } + return ret; +} + bool LedgerAcquireMaster::hasLedger(const uint256& hash) { assert(hash.isNonZero()); diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index 805c84c09..0f2c6abd2 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -31,7 +31,7 @@ class PeerSet protected: uint256 mHash; int mTimerInterval, mTimeouts; - bool mComplete, mFailed, mProgress; + bool mComplete, mFailed, mProgress, mAggressive; time_t mLastAction; boost::recursive_mutex mLock; @@ -51,7 +51,7 @@ public: int getTimeouts() const { return mTimeouts; } bool isActive(); - void progress() { mProgress = true; } + void progress() { mProgress = true; mAggressive = false; } bool isProgress() { return mProgress; } void touch() { mLastAction = time(NULL); } time_t getLastAction() { return mLastAction; } @@ -129,6 +129,8 @@ public: static void filterNodes(std::vector& nodeIDs, std::vector& nodeHashes, std::set& recentNodes, int max, bool aggressive); + + Json::Value getJson(int); }; class LedgerAcquireMaster From f3a28d65b78ac528bf17ee7b3409488282d6b612 Mon Sep 17 00:00:00 2001 From: jed Date: Mon, 14 Jan 2013 12:57:37 -0800 Subject: [PATCH 378/525] windows --- newcoin.vcxproj | 10 ++++++---- newcoin.vcxproj.filters | 6 +++--- src/cpp/ripple/KeyCache.h | 2 +- src/cpp/ripple/LedgerAcquire.cpp | 6 +++--- src/cpp/ripple/TaggedCache.h | 2 +- src/cpp/ripple/UniqueNodeList.cpp | 2 +- src/js/sjcl | 2 +- 7 files changed, 16 insertions(+), 14 deletions(-) diff --git a/newcoin.vcxproj b/newcoin.vcxproj index 8f29a10d6..21e988982 100644 --- a/newcoin.vcxproj +++ b/newcoin.vcxproj @@ -76,14 +76,14 @@ true true BOOST_TEST_ALTERNATIVE_INIT_API;BOOST_TEST_NO_MAIN;_CRT_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0501;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - ..\OpenSSL\include;..\boost_1_47_0;..\protobuf-2.4.1\src + .\;..\OpenSSL\include;..\boost_1_52_0;..\protobuf\src Console true true true - ..\OpenSSL\lib\VC;..\boost_1_47_0\stage\lib;..\protobuf-2.4.1\vsprojects\Release + ..\OpenSSL\lib\VC;..\boost_1_52_0\stage\lib;..\protobuf\vsprojects\Release libprotobuf.lib;ssleay32MD.lib;libeay32MD.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) @@ -91,7 +91,6 @@ - @@ -158,6 +157,7 @@ + @@ -322,8 +322,10 @@ Document - /code/protobuf/protoc -I=..\newcoin --cpp_out=\code\newcoin\ ..\newcoin/src/cpp/ripple/ripple.proto + "../protobuf/protoc" -I=..\newcoin --cpp_out=..\newcoin\ ..\newcoin/src/cpp/ripple/ripple.proto \code\newcoin\src\ripple.pb.h + /code/protobuf/protoc -I=..\newcoin --cpp_out=\code\newcoin\ ..\newcoin/src/cpp/ripple/ripple.proto + \code\newcoin\src\ripple.pb.h diff --git a/newcoin.vcxproj.filters b/newcoin.vcxproj.filters index 535986aa0..796adfdd7 100644 --- a/newcoin.vcxproj.filters +++ b/newcoin.vcxproj.filters @@ -42,9 +42,6 @@ Source Files\database - - Source Files\database - Source Files\json @@ -363,6 +360,9 @@ Source Files + + Source Files + diff --git a/src/cpp/ripple/KeyCache.h b/src/cpp/ripple/KeyCache.h index e4a1d8727..95b0277b6 100644 --- a/src/cpp/ripple/KeyCache.h +++ b/src/cpp/ripple/KeyCache.h @@ -17,7 +17,7 @@ protected: const std::string mName; boost::mutex mNCLock; map_type mCache; - int mTargetSize, mTargetAge; + unsigned int mTargetSize, mTargetAge; public: diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index b54cf0dfb..5d133645e 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -522,9 +522,9 @@ void LedgerAcquire::filterNodes(std::vector& nodeIDs, std::vector duplicates; duplicates.reserve(nodeIDs.size()); - int dupCount; + int dupCount=0; - for (int i = 0; i < nodeIDs.size(); ++i) + for (unsigned int i = 0; i < nodeIDs.size(); ++i) { bool isDup = recentNodes.count(nodeIDs[i]) != 0; duplicates.push_back(isDup); @@ -544,7 +544,7 @@ void LedgerAcquire::filterNodes(std::vector& nodeIDs, std::vector 0) { // some, but not all, duplicates int insertPoint = 0; - for (int i = 0; i < nodeIDs.size(); ++i) + for (unsigned int i = 0; i < nodeIDs.size(); ++i) if (!duplicates[i]) { // Keep this node if (insertPoint != i) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index e294e0591..12ac56b76 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -45,7 +45,7 @@ protected: mutable boost::recursive_mutex mLock; std::string mName; // Used for logging - int mTargetSize; // Desired number of cache entries (0 = ignore) + unsigned int mTargetSize; // Desired number of cache entries (0 = ignore) int mTargetAge; // Desired maximum cache age cache_type mCache; // Hold strong reference to recent objects diff --git a/src/cpp/ripple/UniqueNodeList.cpp b/src/cpp/ripple/UniqueNodeList.cpp index 393503965..c0f4d8016 100644 --- a/src/cpp/ripple/UniqueNodeList.cpp +++ b/src/cpp/ripple/UniqueNodeList.cpp @@ -1625,7 +1625,7 @@ void UniqueNodeList::nodeBootstrap() cLog(lsINFO) << boost::str(boost::format("Bootstrapping UNL: loading from '%s'.") % theConfig.CONFIG_FILE); - if (processValidators("local", theConfig.CONFIG_FILE.native(), naInvalid, vsConfig, &theConfig.VALIDATORS)) + if (processValidators("local", theConfig.CONFIG_FILE.string(), naInvalid, vsConfig, &theConfig.VALIDATORS)) bLoaded = true; } diff --git a/src/js/sjcl b/src/js/sjcl index dbdef434e..d04d0bdcc 160000 --- a/src/js/sjcl +++ b/src/js/sjcl @@ -1 +1 @@ -Subproject commit dbdef434e76c3f16835f3126a7ff1c717b1ce8af +Subproject commit d04d0bdccd986e434b98fe393e1e01286c10fc36 From cd06c0b00b096996d23d6b617e30e2e499d31cb3 Mon Sep 17 00:00:00 2001 From: jed Date: Mon, 14 Jan 2013 13:19:27 -0800 Subject: [PATCH 379/525] update deploy --- .gitignore | 4 + deploy/newcoind.cfg | 149 ------------------ deploy/{cointoss.nsi => rippled.nsi} | 14 +- .../{start CoinToss.bat => start rippled.bat} | 0 newcoin.vcxproj | 2 + newcoin2012.sln | 51 ++++++ 6 files changed, 64 insertions(+), 156 deletions(-) delete mode 100644 deploy/newcoind.cfg rename deploy/{cointoss.nsi => rippled.nsi} (73%) rename deploy/{start CoinToss.bat => start rippled.bat} (100%) create mode 100644 newcoin2012.sln diff --git a/.gitignore b/.gitignore index 8a9dbd0da..c7a5cec4b 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,10 @@ tmp db/*.db db/*.db-journal +# Ignore obj files +Debug/*.* +Release/*.* + # Ignore customized configs rippled.cfg validators.txt diff --git a/deploy/newcoind.cfg b/deploy/newcoind.cfg deleted file mode 100644 index ee991ea67..000000000 --- a/deploy/newcoind.cfg +++ /dev/null @@ -1,149 +0,0 @@ -# -# Sample newcoind.cfg -# -# This file should be named newcoind.cfg. This file is UTF-8 with Dos, UNIX, -# or Mac style end of lines. Blank lines and lines beginning with '#' are -# ignored. Undefined sections are reserved. No escapes are currently defined. -# -# When you launch newcoind, it will attempt to find this file. -# -# --conf=: -# You may specify the location of this file with --conf=. The config -# directory is the directory containing this file. The data directory is a -# the subdirectory named "dbs". -# -# Windows and no --conf: -# The config directory is the same directory as the newcoind program. The -# data directory is a the subdirectory named "dbs". -# -# Other OSes and no --conf: -# This file will be looked for in these places in the following order: -# ./newcoind.cfg -# $XDG_CONFIG_HOME/newcoin/newcoind.cfg -# -# If newcoind.cfg, is found in the current working directory, the directory -# will be used as the config directory. The data directory is a the -# subdirectory named "dbs". -# -# Otherwise, the data directory data is: -# $XDG_DATA_HOME/newcoin/ -# -# Note: $XDG_CONFIG_HOME defaults to $HOME/.config -# $XDG_DATA_HOME defaults to $HOME/.local/share -# -# [debug_logfile] -# Specifies were a debug logfile is kept. By default, no debug log is kept -# -# Example: debug.log -# -# [validators_site]: -# Specifies where to find validators.txt for UNL boostrapping and RPC command unl_network. -# During alpha testing, this defaults to: redstem.com -# -# Example: newcoin.org -# -# [unl_default]: -# XXX This should be called: [validators_file] -# Specifies how to bootstrap the UNL list. The UNL list is based on a -# validators.txt file and is maintained in the databases. When newcoind -# starts up, if the databases are missing or are obsolete due to an upgrade -# of newcoind, newcoind will reconstruct the UNL list as specified here. -# -# If this entry is not present or empty, newcoind will look for a validators.txt in the -# config directory. If not found there, it will attempt to retrieve the file -# from the newcoin foundation's web site. -# -# This entry is also used by the RPC command unl_load. -# -# Specify the file by specifying its full path. -# -# Examples: -# C:/home/johndoe/newcoin/validators.txt -# /home/johndoe/newcoin/validators.txt -# -# [validators]: -# Only valid in "newcoind.cfg", "newcoin.txt", and the referered [validators_url]. -# List of nodes to accept as validators speficied by public key or domain. -# -# For domains, newcoind will probe for https web servers at the specied -# domain in the following order: newcoin.DOMAIN, www.DOMAIN, DOMAIN -# -# Examples: -# redstem.com -# n9KorY8QtTdRx7TVDpwnG9NvyxsDwHUKUEeDLY3AkiGncVaSXZi5 -# n9MqiExBcoG19UXwoLjBJnhsxEhAZMuWwJDRdkyDz1EkEkwzQTNt John Doe -# -# [ips]: -# Only valid in "newcoind.cfg", "newcoin.txt", and the referered [ips_url]. -# List of ips where the Newcoin protocol is avialable. -# One ipv4 or ipv6 address per line. -# A port may optionally be specified after adding a space to the address. -# By convention, if known, IPs are listed in from most to least trusted. -# -# Examples: -# 192.168.0.1 -# 192.168.0.1 3939 -# 2001:0db8:0100:f101:0210:a4ff:fee3:9566 -# -# [peer_ip]: -# IP address or domain to bind to allow external connections from peers. -# Defaults to not allow external connections from peers. -# -# Examples: 0.0.0.0 - Bind on all interfaces. -# -# [peer_port]: -# Port to bind to allow external connections from peers. -# -# [rpc_ip]: -# IP address or domain to bind to allow insecure RPC connections. -# Defaults to not allow RPC connections. -# -# [rpc_port]: -# Port to bind to if allowing insecure RPC connections. -# -# [rpc_allow_remote]: -# 0 or 1. 0 only allows RPC connections from 127.0.0.1. [default 0] -# -# [websocket_ip]: -# IP address or domain to bind to allow client connections. -# -# Examples: 0.0.0.0 - Bind on all interfaces. -# 127.0.0.1 - Bind on localhost interface. Only local programs may connect. -# -# [websocket_port]: -# Port to bind to allow client connections. -# -# [validation_seed]: -# To perform validation, this section should contain either a validation seed or key. -# The validation seed is used to generate the validation public/private key pair. -# To obtain a validation seed, use the validation_create command. -# -# Examples: RASH BUSH MILK LOOK BAD BRIM AVID GAFF BAIT ROT POD LOVE -# shfArahZT9Q9ckTf3s1psJ7C7qzVN -# - -[peer_ip] -0.0.0.0 - -[peer_port] -51235 - -[rpc_ip] -127.0.0.1 - -[rpc_port] -5005 - -[rpc_allow_remote] -1 - -[debug_logfile] -debug.log - -[unl_default] -validators.txt - -[ips] -23.21.167.100 51235 -23.23.201.55 51235 -107.21.116.214 51235 diff --git a/deploy/cointoss.nsi b/deploy/rippled.nsi similarity index 73% rename from deploy/cointoss.nsi rename to deploy/rippled.nsi index 1f3656ba7..f77f8bc68 100644 --- a/deploy/cointoss.nsi +++ b/deploy/rippled.nsi @@ -1,10 +1,10 @@ -Name "CoinToss" +Name "Rippled" ; The file to write -OutFile "toss install.exe" +OutFile "ripple install.exe" ; The default installation directory -InstallDir "$PROGRAMFILES\CoinToss" +InstallDir "$PROGRAMFILES\Rippled" ; Request application privileges for Windows Vista RequestExecutionLevel user @@ -25,12 +25,12 @@ Section "" ;No components page, name is not important SetOutPath $INSTDIR ; Put file there - File ..\Release\newcoin.exe + File ..\Release\rippled.exe File ..\*.dll - File "start CoinToss.bat" - File newcoind.cfg + ;File "start rippled.bat" + File rippled.cfg File validators.txt - File /r /x .git ..\..\nc-client\*.* + ;File /r /x .git ..\..\nc-client\*.* CreateDirectory $INSTDIR\db diff --git a/deploy/start CoinToss.bat b/deploy/start rippled.bat similarity index 100% rename from deploy/start CoinToss.bat rename to deploy/start rippled.bat diff --git a/newcoin.vcxproj b/newcoin.vcxproj index 21e988982..737324e65 100644 --- a/newcoin.vcxproj +++ b/newcoin.vcxproj @@ -41,9 +41,11 @@ true + rippled false + rippled diff --git a/newcoin2012.sln b/newcoin2012.sln new file mode 100644 index 000000000..cf41ac0bf --- /dev/null +++ b/newcoin2012.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "newcoin", "newcoin.vcxproj", "{19465545-42EE-42FA-9CC8-F8975F8F1CC7}" + ProjectSection(ProjectDependencies) = postProject + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30} = {3E283F37-A4ED-41B7-A3E6-A2D89D131A30} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libprotobuf", "..\protobuf\vsprojects\libprotobuf.vcxproj", "{3E283F37-A4ED-41B7-A3E6-A2D89D131A30}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + FlashDebug|Win32 = FlashDebug|Win32 + FlashDebug|x64 = FlashDebug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseD|Win32 = ReleaseD|Win32 + ReleaseD|x64 = ReleaseD|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.Debug|Win32.ActiveCfg = Debug|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.Debug|Win32.Build.0 = Debug|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.Debug|x64.ActiveCfg = Debug|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.FlashDebug|Win32.ActiveCfg = Debug|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.FlashDebug|Win32.Build.0 = Debug|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.FlashDebug|x64.ActiveCfg = Debug|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.Release|Win32.ActiveCfg = Release|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.Release|Win32.Build.0 = Release|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.Release|x64.ActiveCfg = Release|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.ReleaseD|Win32.ActiveCfg = Release|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.ReleaseD|Win32.Build.0 = Release|Win32 + {19465545-42EE-42FA-9CC8-F8975F8F1CC7}.ReleaseD|x64.ActiveCfg = Release|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.Debug|Win32.ActiveCfg = Debug|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.Debug|Win32.Build.0 = Debug|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.Debug|x64.ActiveCfg = Debug|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.FlashDebug|Win32.ActiveCfg = Debug|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.FlashDebug|Win32.Build.0 = Debug|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.FlashDebug|x64.ActiveCfg = Debug|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.Release|Win32.ActiveCfg = Release|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.Release|Win32.Build.0 = Release|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.Release|x64.ActiveCfg = Release|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.ReleaseD|Win32.ActiveCfg = Release|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.ReleaseD|Win32.Build.0 = Release|Win32 + {3E283F37-A4ED-41B7-A3E6-A2D89D131A30}.ReleaseD|x64.ActiveCfg = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal From 2b70d3f750bdcf99abc0681dd0f391856fd01d4f Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 14 Jan 2013 14:28:23 -0800 Subject: [PATCH 380/525] Output fee information in server_info. --- src/cpp/ripple/NetworkOPs.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index cc5287983..b589567df 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1127,7 +1127,17 @@ Json::Value NetworkOPs::getServerInfo() if (mConsensus) info["consensus"] = mConsensus->getJson(); - info["load"] = theApp->getJobQueue().getJson(); + info["load"] = theApp->getJobQueue().getJson(); + info["load_base"] = theApp->getFeeTrack().getLoadBase(); + info["load_fee"] = theApp->getFeeTrack().getLoadFactor(); + + Ledger::pointer lpClosed = getClosedLedger(); + + if (lpClosed) + { + info["reserve_base"] = Json::UInt(lpClosed->getReserve(0)); + info["reserve_inc"] = Json::UInt(lpClosed->getReserveInc()); + } return info; } @@ -1468,15 +1478,16 @@ void NetworkOPs::unsubAccountChanges(InfoSub* ispListener) // <-- bool: true=added, false=already there bool NetworkOPs::subLedger(InfoSub* ispListener, Json::Value& jvResult) { - Ledger::pointer closedLgr = getClosedLedger(); - jvResult["ledger_index"] = closedLgr->getLedgerSeq(); - jvResult["ledger_hash"] = closedLgr->getHash().ToString(); - jvResult["ledger_time"] = Json::Value::UInt(utFromSeconds(closedLgr->getCloseTimeNC())); + Ledger::pointer lpClosed = getClosedLedger(); - jvResult["fee_ref"] = Json::UInt(closedLgr->getReferenceFeeUnits()); - jvResult["fee_base"] = Json::UInt(closedLgr->getBaseFee()); - jvResult["reserve_base"] = Json::UInt(closedLgr->getReserve(0)); - jvResult["reserve_inc"] = Json::UInt(closedLgr->getReserveInc()); + jvResult["ledger_index"] = lpClosed->getLedgerSeq(); + jvResult["ledger_hash"] = lpClosed->getHash().ToString(); + jvResult["ledger_time"] = Json::Value::UInt(utFromSeconds(lpClosed->getCloseTimeNC())); + + jvResult["fee_ref"] = Json::UInt(lpClosed->getReferenceFeeUnits()); + jvResult["fee_base"] = Json::UInt(lpClosed->getBaseFee()); + jvResult["reserve_base"] = Json::UInt(lpClosed->getReserve(0)); + jvResult["reserve_inc"] = Json::UInt(lpClosed->getReserveInc()); return mSubLedger.insert(ispListener).second; } From f2337b81dbf411cadfa8880f0fc74d38289a8889 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 14 Jan 2013 16:58:14 -0800 Subject: [PATCH 381/525] Have strUnhex report malformed hex. --- src/cpp/ripple/utils.cpp | 42 ++++++++++++++++++++++++++++++++++++---- src/cpp/ripple/utils.h | 2 +- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/utils.cpp b/src/cpp/ripple/utils.cpp index 760ea7a6b..8dc565924 100644 --- a/src/cpp/ripple/utils.cpp +++ b/src/cpp/ripple/utils.cpp @@ -75,14 +75,48 @@ int charUnHex(char cDigit) : -1; } -void strUnHex(std::string& strDst, const std::string& strSrc) +int strUnHex(std::string& strDst, const std::string& strSrc) { - int iBytes = strSrc.size()/2; + int iBytes = (strSrc.size()+1)/2; strDst.resize(iBytes); - for (int i=0; i != iBytes; i++) - strDst[i] = (charUnHex(strSrc[i*2]) << 4) | charUnHex(strSrc[i*2+1]); + const char* pSrc = &strSrc[0]; + char* pDst = &strDst[0]; + + if (strSrc.size() & 1) + { + int c = charUnHex(*pSrc++); + + if (c < 0) + { + iBytes = -1; + } + else + { + *pDst++ = c; + } + } + + for (int i=0; iBytes >= 0 && i != iBytes; i++) + { + int cHigh = charUnHex(*pSrc++); + int cLow = charUnHex(*pSrc++); + + if (cHigh < 0 || cLow < 0) + { + iBytes = -1; + } + else + { + strDst[i] = (cHigh << 4) | cLow; + } + } + + if (iBytes < 0) + strDst.clear(); + + return iBytes; } std::vector strUnHex(const std::string& strSrc) diff --git a/src/cpp/ripple/utils.h b/src/cpp/ripple/utils.h index c5790bc85..77ae2f26f 100644 --- a/src/cpp/ripple/utils.h +++ b/src/cpp/ripple/utils.h @@ -198,7 +198,7 @@ bool isZero(Iterator first, int iSize) } int charUnHex(char cDigit); -void strUnHex(std::string& strDst, const std::string& strSrc); +int strUnHex(std::string& strDst, const std::string& strSrc); uint64_t uintFromHex(const std::string& strSrc); From 88c702a95754d007d6710b9a930964fde71603d7 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 14 Jan 2013 16:59:06 -0800 Subject: [PATCH 382/525] Make actual submitting optional for submitTransactionSync --- src/cpp/ripple/NetworkOPs.cpp | 5 +++-- src/cpp/ripple/NetworkOPs.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index b589567df..d093891a0 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -165,7 +165,7 @@ void NetworkOPs::submitTransaction(Job&, SerializedTransaction::pointer iTrans, // Sterilize transaction through serialization. // This is fully synchronous and deprecated -Transaction::pointer NetworkOPs::submitTransactionSync(const Transaction::pointer& tpTrans) +Transaction::pointer NetworkOPs::submitTransactionSync(const Transaction::pointer& tpTrans, bool bSubmit) { Serializer s; tpTrans->getSTransaction()->add(s); @@ -179,7 +179,8 @@ Transaction::pointer NetworkOPs::submitTransactionSync(const Transaction::pointe } else if (tpTransNew->getSTransaction()->isEquivalent(*tpTrans->getSTransaction())) { - (void) NetworkOPs::processTransaction(tpTransNew); + if (bSubmit) + (void) NetworkOPs::processTransaction(tpTransNew); } else { diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 66d757ffa..3101880dd 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -160,7 +160,7 @@ public: // typedef boost::function stCallback; // must complete immediately void submitTransaction(Job&, SerializedTransaction::pointer, stCallback callback = stCallback()); - Transaction::pointer submitTransactionSync(const Transaction::pointer& tpTrans); + Transaction::pointer submitTransactionSync(const Transaction::pointer& tpTrans, bool bSubmit=true); void runTransactionQueue(); Transaction::pointer processTransaction(Transaction::pointer, stCallback); From 4e06e0ffa5f4c951b14e439e5192594581f00a14 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 14 Jan 2013 16:59:47 -0800 Subject: [PATCH 383/525] Add server support for sign and submit tx_blobs. --- src/cpp/ripple/RPCErr.cpp | 1 + src/cpp/ripple/RPCErr.h | 1 + src/cpp/ripple/RPCHandler.cpp | 523 ++++++++++++++++++++-------------- src/cpp/ripple/RPCHandler.h | 2 + 4 files changed, 317 insertions(+), 210 deletions(-) diff --git a/src/cpp/ripple/RPCErr.cpp b/src/cpp/ripple/RPCErr.cpp index 57eb4dadd..9ab952080 100644 --- a/src/cpp/ripple/RPCErr.cpp +++ b/src/cpp/ripple/RPCErr.cpp @@ -18,6 +18,7 @@ Json::Value rpcError(int iError, Json::Value jvResult) { rpcACT_EXISTS, "actExists", "Account already exists." }, { rpcACT_MALFORMED, "actMalformed", "Account malformed." }, { rpcACT_NOT_FOUND, "actNotFound", "Account not found." }, + { rpcBAD_BLOB, "badBlob", "Blob must be a non-empty hex string." }, { rpcBAD_SEED, "badSeed", "Disallowed seed." }, { rpcBAD_SYNTAX, "badSyntax", "Syntax error." }, { rpcDST_ACT_MALFORMED, "dstActMalformed", "Destination account is malformed." }, diff --git a/src/cpp/ripple/RPCErr.h b/src/cpp/ripple/RPCErr.h index 858c3f9b5..fa62c0e62 100644 --- a/src/cpp/ripple/RPCErr.h +++ b/src/cpp/ripple/RPCErr.h @@ -43,6 +43,7 @@ enum { // Bad parameter rpcACT_MALFORMED, rpcQUALITY_MALFORMED, + rpcBAD_BLOB, rpcBAD_SEED, rpcDST_ACT_MALFORMED, rpcDST_ACT_MISSING, diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 3791bf946..8ad6ec135 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -37,6 +37,292 @@ RPCHandler::RPCHandler(NetworkOPs* netOps, InfoSub* infoSub) mInfoSub = infoSub; } +Json::Value RPCHandler::transactionSign(Json::Value jvRequest, bool bSubmit) +{ + Json::Value jvResult; + RippleAddress naSeed; + RippleAddress raSrcAddressID; + + cLog(lsDEBUG) + << boost::str(boost::format("transactionSign: %s") + % jvRequest); + + if (!jvRequest.isMember("secret") || !jvRequest.isMember("tx_json")) + { + return rpcError(rpcINVALID_PARAMS); + } + + Json::Value txJSON = jvRequest["tx_json"]; + + if (!txJSON.isObject()) + { + return rpcError(rpcINVALID_PARAMS); + } + if (!naSeed.setSeedGeneric(jvRequest["secret"].asString())) + { + return rpcError(rpcBAD_SEED); + } + if (!txJSON.isMember("Account")) + { + return rpcError(rpcSRC_ACT_MISSING); + } + if (!raSrcAddressID.setAccountID(txJSON["Account"].asString())) + { + return rpcError(rpcSRC_ACT_MALFORMED); + } + if (!txJSON.isMember("TransactionType")) + { + return rpcError(rpcINVALID_PARAMS); + } + + AccountState::pointer asSrc = mNetOps->getAccountState(mNetOps->getCurrentLedger(), raSrcAddressID); + if (!asSrc) + { + cLog(lsDEBUG) << boost::str(boost::format("transactionSign: Failed to find source account in current ledger: %s") + % raSrcAddressID.humanAccountID()); + + return rpcError(rpcSRC_ACT_NOT_FOUND); + } + + if ("Payment" == txJSON["TransactionType"].asString()) + { + + RippleAddress dstAccountID; + + if (!txJSON.isMember("Destination")) + { + return rpcError(rpcDST_ACT_MISSING); + } + if (!dstAccountID.setAccountID(txJSON["Destination"].asString())) + { + return rpcError(rpcDST_ACT_MALFORMED); + } + + if (!txJSON.isMember("Fee")) + { + txJSON["Fee"] = (int) theConfig.FEE_DEFAULT; + } + + if (txJSON.isMember("Paths") && jvRequest.isMember("build_path")) + { + // Asking to build a path when providing one is an error. + return rpcError(rpcINVALID_PARAMS); + } + + if (!txJSON.isMember("Paths") && txJSON.isMember("Amount") && jvRequest.isMember("build_path")) + { + // Need a ripple path. + STPathSet spsPaths; + uint160 uSrcCurrencyID; + uint160 uSrcIssuerID; + + STAmount saSendMax; + STAmount saSend; + + if (!txJSON.isMember("Amount") // Amount required. + || !saSend.bSetJson(txJSON["Amount"])) // Must be valid. + return rpcError(rpcDST_AMT_MALFORMED); + + if (txJSON.isMember("SendMax")) + { + if (!saSendMax.bSetJson(txJSON["SendMax"])) + return rpcError(rpcINVALID_PARAMS); + } + else + { + // If no SendMax, default to Amount with sender as issuer. + saSendMax = saSend; + saSendMax.setIssuer(raSrcAddressID.getAccountID()); + } + + if (saSendMax.isNative() && saSend.isNative()) + { + // Asking to build a path for XRP to XRP is an error. + return rpcError(rpcINVALID_PARAMS); + } + + Pathfinder pf(raSrcAddressID, dstAccountID, saSendMax.getCurrency(), saSendMax.getIssuer(), saSend); + + if (!pf.findPaths(5, 3, spsPaths)) + { + cLog(lsDEBUG) << "payment: build_path: No paths found."; + + return rpcError(rpcNO_PATH); + } + else + { + cLog(lsDEBUG) << "payment: build_path: " << spsPaths.getJson(0); + } + + if (!spsPaths.isEmpty()) + { + txJSON["Paths"]=spsPaths.getJson(0); + } + } + } + + if (!txJSON.isMember("Fee") + && ( + "AccountSet" == txJSON["TransactionType"].asString() + || "OfferCreate" == txJSON["TransactionType"].asString() + || "OfferCancel" == txJSON["TransactionType"].asString() + || "TrustSet" == txJSON["TransactionType"].asString())) + { + txJSON["Fee"] = (int) theConfig.FEE_DEFAULT; + } + + if (!txJSON.isMember("Sequence")) txJSON["Sequence"] = asSrc->getSeq(); + if (!txJSON.isMember("Flags")) txJSON["Flags"] = 0; + + Ledger::pointer lpCurrent = mNetOps->getCurrentLedger(); + SLE::pointer sleAccountRoot = mNetOps->getSLE(lpCurrent, Ledger::getAccountRootIndex(raSrcAddressID.getAccountID())); + + if (!sleAccountRoot) + { + // XXX Ignore transactions for accounts not created. + return rpcError(rpcSRC_ACT_NOT_FOUND); + } + + bool bHaveAuthKey = false; + RippleAddress naAuthorizedPublic; + + RippleAddress naSecret = RippleAddress::createSeedGeneric(jvRequest["secret"].asString()); + RippleAddress naMasterGenerator = RippleAddress::createGeneratorPublic(naSecret); + + // Find the index of Account from the master generator, so we can generate the public and private keys. + RippleAddress naMasterAccountPublic; + unsigned int iIndex = 0; + bool bFound = false; + + // Don't look at ledger entries to determine if the account exists. Don't want to leak to thin server that these accounts are + // related. + while (!bFound && iIndex != theConfig.ACCOUNT_PROBE_MAX) + { + naMasterAccountPublic.setAccountPublic(naMasterGenerator, iIndex); + + cLog(lsWARNING) << "authorize: " << iIndex << " : " << naMasterAccountPublic.humanAccountID() << " : " << raSrcAddressID.humanAccountID(); + + bFound = raSrcAddressID.getAccountID() == naMasterAccountPublic.getAccountID(); + if (!bFound) + ++iIndex; + } + + if (!bFound) + { + return rpcError(rpcSRC_ACT_NOT_FOUND); + } + + // Use the generator to determine the associated public and private keys. + RippleAddress naGenerator = RippleAddress::createGeneratorPublic(naSecret); + RippleAddress naAccountPublic = RippleAddress::createAccountPublic(naGenerator, iIndex); + RippleAddress naAccountPrivate = RippleAddress::createAccountPrivate(naGenerator, naSecret, iIndex); + + if (bHaveAuthKey + // The generated pair must match authorized... + && naAuthorizedPublic.getAccountID() != naAccountPublic.getAccountID() + // ... or the master key must have been used. + && raSrcAddressID.getAccountID() != naAccountPublic.getAccountID()) + { + // std::cerr << "iIndex: " << iIndex << std::endl; + // std::cerr << "sfAuthorizedKey: " << strHex(asSrc->getAuthorizedKey().getAccountID()) << std::endl; + // std::cerr << "naAccountPublic: " << strHex(naAccountPublic.getAccountID()) << std::endl; + + return rpcError(rpcSRC_ACT_NOT_FOUND); + } + + std::auto_ptr sopTrans; + + try + { + sopTrans = STObject::parseJson(txJSON); + } + catch (std::exception& e) + { + jvResult["error"] = "malformedTransaction"; + jvResult["error_exception"] = e.what(); + + return jvResult; + } + + sopTrans->setFieldVL(sfSigningPubKey, naAccountPublic.getAccountPublic()); + + SerializedTransaction::pointer stpTrans; + + try + { + stpTrans = boost::make_shared(*sopTrans); + } + catch (std::exception& e) + { + jvResult["error"] = "invalidTransaction"; + jvResult["error_exception"] = e.what(); + + return jvResult; + } + + // FIXME: For performance, transactions should not be signed in this code path. + stpTrans->sign(naAccountPrivate); + + Transaction::pointer tpTrans; + + try + { + tpTrans = boost::make_shared(stpTrans, false); + } + catch (std::exception& e) + { + jvResult["error"] = "internalTransaction"; + jvResult["error_exception"] = e.what(); + + return jvResult; + } + + try + { + tpTrans = mNetOps->submitTransactionSync(tpTrans, bSubmit); // FIXME: For performance, should use asynch interface + + if (!tpTrans) { + jvResult["error"] = "invalidTransaction"; + jvResult["error_exception"] = "Unable to sterilize transaction."; + + return jvResult; + } + } + catch (std::exception& e) + { + jvResult["error"] = "internalSubmit"; + jvResult["error_exception"] = e.what(); + + return jvResult; + } + + try + { + jvResult["tx_json"] = tpTrans->getJson(0); + jvResult["tx_blob"] = strHex(tpTrans->getSTransaction()->getSerializer().peekData()); + + if (temUNCERTAIN != tpTrans->getResult()) + { + std::string sToken; + std::string sHuman; + + transResultInfo(tpTrans->getResult(), sToken, sHuman); + + jvResult["engine_result"] = sToken; + jvResult["engine_result_code"] = tpTrans->getResult(); + jvResult["engine_result_message"] = sHuman; + } + return jvResult; + } + catch (std::exception& e) + { + jvResult["error"] = "internalJson"; + jvResult["error_exception"] = e.what(); + + return jvResult; + } +} + // Look up the master public generator for a regular seed so we may index source accounts ids. // --> naRegularSeed // <-- naMasterGenerator @@ -916,234 +1202,52 @@ Json::Value RPCHandler::doRipplePathFind(Json::Value jvRequest) return jvResult; } +// { +// tx_json: , +// secret: +// } +Json::Value RPCHandler::doSign(Json::Value jvRequest) +{ + return transactionSign(jvRequest, false); +} + // { // tx_json: , // secret: // } Json::Value RPCHandler::doSubmit(Json::Value jvRequest) { - Json::Value jvResult; - RippleAddress naSeed; - RippleAddress raSrcAddressID; + if (!jvRequest.isMember("tx_blob")) + { + return transactionSign(jvRequest, true); + } - cLog(lsDEBUG) - << boost::str(boost::format("doSubmit: %s") - % jvRequest); + Json::Value jvResult; - if (!jvRequest.isMember("secret") || !jvRequest.isMember("tx_json")) + std::vector vucBlob(strUnHex(jvRequest["tx_blob"].asString())); + + if (!vucBlob.size()) { return rpcError(rpcINVALID_PARAMS); } - Json::Value txJSON = jvRequest["tx_json"]; - - if (!txJSON.isObject()) - { - return rpcError(rpcINVALID_PARAMS); - } - if (!naSeed.setSeedGeneric(jvRequest["secret"].asString())) - { - return rpcError(rpcBAD_SEED); - } - if (!txJSON.isMember("Account")) - { - return rpcError(rpcSRC_ACT_MISSING); - } - if (!raSrcAddressID.setAccountID(txJSON["Account"].asString())) - { - return rpcError(rpcSRC_ACT_MALFORMED); - } - if (!txJSON.isMember("TransactionType")) - { - return rpcError(rpcINVALID_PARAMS); - } - - AccountState::pointer asSrc = mNetOps->getAccountState(mNetOps->getCurrentLedger(), raSrcAddressID); - if (!asSrc) - { - cLog(lsDEBUG) << boost::str(boost::format("doSubmit: Failed to find source account in current ledger: %s") - % raSrcAddressID.humanAccountID()); - - return rpcError(rpcSRC_ACT_NOT_FOUND); - } - - if ("Payment" == txJSON["TransactionType"].asString()) - { - - RippleAddress dstAccountID; - - if (!txJSON.isMember("Destination")) - { - return rpcError(rpcDST_ACT_MISSING); - } - if (!dstAccountID.setAccountID(txJSON["Destination"].asString())) - { - return rpcError(rpcDST_ACT_MALFORMED); - } - - if (!txJSON.isMember("Fee")) - { - txJSON["Fee"] = (int) theConfig.FEE_DEFAULT; - } - - if (txJSON.isMember("Paths") && jvRequest.isMember("build_path")) - { - // Asking to build a path when providing one is an error. - return rpcError(rpcINVALID_PARAMS); - } - - if (!txJSON.isMember("Paths") && txJSON.isMember("Amount") && jvRequest.isMember("build_path")) - { - // Need a ripple path. - STPathSet spsPaths; - uint160 uSrcCurrencyID; - uint160 uSrcIssuerID; - - STAmount saSendMax; - STAmount saSend; - - if (!txJSON.isMember("Amount") // Amount required. - || !saSend.bSetJson(txJSON["Amount"])) // Must be valid. - return rpcError(rpcDST_AMT_MALFORMED); - - if (txJSON.isMember("SendMax")) - { - if (!saSendMax.bSetJson(txJSON["SendMax"])) - return rpcError(rpcINVALID_PARAMS); - } - else - { - // If no SendMax, default to Amount with sender as issuer. - saSendMax = saSend; - saSendMax.setIssuer(raSrcAddressID.getAccountID()); - } - - if (saSendMax.isNative() && saSend.isNative()) - { - // Asking to build a path for XRP to XRP is an error. - return rpcError(rpcINVALID_PARAMS); - } - - Pathfinder pf(raSrcAddressID, dstAccountID, saSendMax.getCurrency(), saSendMax.getIssuer(), saSend); - - if (!pf.findPaths(5, 3, spsPaths)) - { - cLog(lsDEBUG) << "payment: build_path: No paths found."; - - return rpcError(rpcNO_PATH); - } - else - { - cLog(lsDEBUG) << "payment: build_path: " << spsPaths.getJson(0); - } - - if (!spsPaths.isEmpty()) - { - txJSON["Paths"]=spsPaths.getJson(0); - } - } - } - - if (!txJSON.isMember("Fee") - && ( - "AccountSet" == txJSON["TransactionType"].asString() - || "OfferCreate" == txJSON["TransactionType"].asString() - || "OfferCancel" == txJSON["TransactionType"].asString() - || "TrustSet" == txJSON["TransactionType"].asString())) - { - txJSON["Fee"] = (int) theConfig.FEE_DEFAULT; - } - - if (!txJSON.isMember("Sequence")) txJSON["Sequence"] = asSrc->getSeq(); - if (!txJSON.isMember("Flags")) txJSON["Flags"] = 0; - - Ledger::pointer lpCurrent = mNetOps->getCurrentLedger(); - SLE::pointer sleAccountRoot = mNetOps->getSLE(lpCurrent, Ledger::getAccountRootIndex(raSrcAddressID.getAccountID())); - - if (!sleAccountRoot) - { - // XXX Ignore transactions for accounts not created. - return rpcError(rpcSRC_ACT_NOT_FOUND); - } - - bool bHaveAuthKey = false; - RippleAddress naAuthorizedPublic; - - RippleAddress naSecret = RippleAddress::createSeedGeneric(jvRequest["secret"].asString()); - RippleAddress naMasterGenerator = RippleAddress::createGeneratorPublic(naSecret); - - // Find the index of Account from the master generator, so we can generate the public and private keys. - RippleAddress naMasterAccountPublic; - unsigned int iIndex = 0; - bool bFound = false; - - // Don't look at ledger entries to determine if the account exists. Don't want to leak to thin server that these accounts are - // related. - while (!bFound && iIndex != theConfig.ACCOUNT_PROBE_MAX) - { - naMasterAccountPublic.setAccountPublic(naMasterGenerator, iIndex); - - cLog(lsWARNING) << "authorize: " << iIndex << " : " << naMasterAccountPublic.humanAccountID() << " : " << raSrcAddressID.humanAccountID(); - - bFound = raSrcAddressID.getAccountID() == naMasterAccountPublic.getAccountID(); - if (!bFound) - ++iIndex; - } - - if (!bFound) - { - return rpcError(rpcSRC_ACT_NOT_FOUND); - } - - // Use the generator to determine the associated public and private keys. - RippleAddress naGenerator = RippleAddress::createGeneratorPublic(naSecret); - RippleAddress naAccountPublic = RippleAddress::createAccountPublic(naGenerator, iIndex); - RippleAddress naAccountPrivate = RippleAddress::createAccountPrivate(naGenerator, naSecret, iIndex); - - if (bHaveAuthKey - // The generated pair must match authorized... - && naAuthorizedPublic.getAccountID() != naAccountPublic.getAccountID() - // ... or the master key must have been used. - && raSrcAddressID.getAccountID() != naAccountPublic.getAccountID()) - { - // std::cerr << "iIndex: " << iIndex << std::endl; - // std::cerr << "sfAuthorizedKey: " << strHex(asSrc->getAuthorizedKey().getAccountID()) << std::endl; - // std::cerr << "naAccountPublic: " << strHex(naAccountPublic.getAccountID()) << std::endl; - - return rpcError(rpcSRC_ACT_NOT_FOUND); - } - - std::auto_ptr sopTrans; - - try - { - sopTrans = STObject::parseJson(txJSON); - } - catch (std::exception& e) - { - jvResult["error"] = "malformedTransaction"; - jvResult["error_exception"] = e.what(); - return jvResult; - } - - sopTrans->setFieldVL(sfSigningPubKey, naAccountPublic.getAccountPublic()); + Serializer sTrans(vucBlob); + SerializerIterator sitTrans(sTrans); SerializedTransaction::pointer stpTrans; try { - stpTrans = boost::make_shared(*sopTrans); + stpTrans = boost::make_shared(boost::ref(sitTrans)); } catch (std::exception& e) { jvResult["error"] = "invalidTransaction"; jvResult["error_exception"] = e.what(); + return jvResult; } - // FIXME: Transactions should not be signed in this code path - stpTrans->sign(naAccountPrivate); - Transaction::pointer tpTrans; try @@ -1154,29 +1258,26 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) { jvResult["error"] = "internalTransaction"; jvResult["error_exception"] = e.what(); + return jvResult; } try { - tpTrans = mNetOps->submitTransactionSync(tpTrans); // FIXME: Should use asynch interface - - if (!tpTrans) { - jvResult["error"] = "invalidTransaction"; - jvResult["error_exception"] = "Unable to sterilize transaction."; - return jvResult; - } + (void) mNetOps->processTransaction(tpTrans); } catch (std::exception& e) { jvResult["error"] = "internalSubmit"; jvResult["error_exception"] = e.what(); + return jvResult; } try { jvResult["tx_json"] = tpTrans->getJson(0); + jvResult["tx_blob"] = strHex(tpTrans->getSTransaction()->getSerializer().peekData()); if (temUNCERTAIN != tpTrans->getResult()) { @@ -1195,6 +1296,7 @@ Json::Value RPCHandler::doSubmit(Json::Value jvRequest) { jvResult["error"] = "internalJson"; jvResult["error_exception"] = e.what(); + return jvResult; } } @@ -2474,6 +2576,7 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) // { "profile", &RPCHandler::doProfile, false, optCurrent }, { "random", &RPCHandler::doRandom, false, optNone }, { "ripple_path_find", &RPCHandler::doRipplePathFind, false, optCurrent }, + { "sign", &RPCHandler::doSign, false, optCurrent }, { "submit", &RPCHandler::doSubmit, false, optCurrent }, { "server_info", &RPCHandler::doServerInfo, true, optNone }, { "stop", &RPCHandler::doStop, true, optNone }, diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index bfd99ba1a..8c4727f3b 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -21,6 +21,7 @@ class RPCHandler // Utilities void addSubmitPath(Json::Value& txJSON); boost::unordered_set parseAccountIds(const Json::Value& jvArray); + Json::Value transactionSign(Json::Value jvRequest, bool bSubmit); Json::Value lookupLedger(Json::Value jvRequest, Ledger::pointer& lpLedger); @@ -59,6 +60,7 @@ class RPCHandler Json::Value doSessionClose(Json::Value params); Json::Value doSessionOpen(Json::Value params); Json::Value doStop(Json::Value params); + Json::Value doSign(Json::Value params); Json::Value doSubmit(Json::Value params); Json::Value doTx(Json::Value params); Json::Value doTxHistory(Json::Value params); From 104613a0a6b9a874f9f7c2b3d19ec852fa8c3277 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 14 Jan 2013 17:00:09 -0800 Subject: [PATCH 384/525] Add command line support for sign. --- src/cpp/ripple/CallRPC.cpp | 23 +++++++++++++++++++---- src/cpp/ripple/CallRPC.h | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 1f498a047..2b6ffff98 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -285,14 +285,28 @@ Json::Value RPCParser::parseRipplePathFind(const Json::Value& jvParams) return rpcError(rpcINVALID_PARAMS); } -// submit any transaction to the network +// sign/submit any transaction to the network +// +// sign private_key json // submit private_key json -Json::Value RPCParser::parseSubmit(const Json::Value& jvParams) +// submit tx_blob +Json::Value RPCParser::parseSignSubmit(const Json::Value& jvParams) { Json::Value txJSON; Json::Reader reader; - if (reader.parse(jvParams[1u].asString(), txJSON)) + if (1 == jvParams.size()) + { + // Submitting tx_blob + + Json::Value jvRequest; + + jvRequest["tx_blob"] = jvParams[0u].asString(); + + return jvRequest; + } + // Submitting tx_json. + else if (reader.parse(jvParams[1u].asString(), txJSON)) { Json::Value jvRequest; @@ -459,7 +473,8 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) // { "profile", &RPCParser::parseProfile, 1, 9 }, { "random", &RPCParser::parseAsIs, 0, 0 }, { "ripple_path_find", &RPCParser::parseRipplePathFind, 1, 1 }, - { "submit", &RPCParser::parseSubmit, 2, 2 }, + { "sign", &RPCParser::parseSignSubmit, 2, 2 }, + { "submit", &RPCParser::parseSignSubmit, 1, 2 }, { "server_info", &RPCParser::parseAsIs, 0, 0 }, { "stop", &RPCParser::parseAsIs, 0, 0 }, // { "transaction_entry", &RPCParser::parseTransactionEntry, -1, -1 }, diff --git a/src/cpp/ripple/CallRPC.h b/src/cpp/ripple/CallRPC.h index 4c893256c..1d6c4d2c7 100644 --- a/src/cpp/ripple/CallRPC.h +++ b/src/cpp/ripple/CallRPC.h @@ -30,7 +30,7 @@ protected: Json::Value parseOwnerInfo(const Json::Value& jvParams); Json::Value parseRandom(const Json::Value& jvParams); Json::Value parseRipplePathFind(const Json::Value& jvParams); - Json::Value parseSubmit(const Json::Value& jvParams); + Json::Value parseSignSubmit(const Json::Value& jvParams); Json::Value parseTx(const Json::Value& jvParams); Json::Value parseTxHistory(const Json::Value& jvParams); Json::Value parseUnlAdd(const Json::Value& jvParams); From 9dea6df56b20d44f05e957eb97e3fe04dd2a9b98 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 14 Jan 2013 18:16:47 -0800 Subject: [PATCH 385/525] Tuning. --- src/cpp/ripple/LedgerMaster.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 116bfd313..86e690b2e 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -194,7 +194,7 @@ bool LedgerMaster::acquireMissingLedger(Ledger::ref origLedger, const uint256& l theApp->getIOService().post(boost::bind(&LedgerMaster::missingAcquireComplete, this, mMissingLedger)); } - if (theApp->getMasterLedgerAcquire().getFetchCount() < 3) + if (theApp->getMasterLedgerAcquire().getFetchCount() < 4) { int count = 0; typedef std::pair u_pair; @@ -202,7 +202,7 @@ bool LedgerMaster::acquireMissingLedger(Ledger::ref origLedger, const uint256& l std::vector vec = origLedger->getLedgerHashes(); BOOST_REVERSE_FOREACH(const u_pair& it, vec) { - if ((count < 2) && (it.first < ledgerSeq) && + if ((count < 3) && (it.first < ledgerSeq) && !mCompleteLedgers.hasValue(it.first) && !theApp->getMasterLedgerAcquire().find(it.second)) { ++count; From 5c052ebdf4934b41bb12ea31669411572058ebd6 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 14 Jan 2013 20:18:34 -0800 Subject: [PATCH 386/525] Temporarily turn off admin checking for subscribe. --- src/cpp/ripple/RPCHandler.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 9af8b1d30..85a50fb00 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2305,8 +2305,11 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) if (jvRequest.isMember("url")) { +// Temporarily off. +#if 0 if (mRole != ADMIN) return rpcError(rpcNO_PERMISSION); +#endif std::string strUrl = jvRequest["url"].asString(); std::string strUsername = jvRequest.isMember("username") ? jvRequest["username"].asString() : ""; From 9c6d073d89af82858edada7252abded36d65791c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 14 Jan 2013 21:21:22 -0800 Subject: [PATCH 387/525] More logging for RPC subscribe. --- src/cpp/ripple/RPCSub.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cpp/ripple/RPCSub.cpp b/src/cpp/ripple/RPCSub.cpp index c4ecc609c..cc043a9f7 100644 --- a/src/cpp/ripple/RPCSub.cpp +++ b/src/cpp/ripple/RPCSub.cpp @@ -55,9 +55,11 @@ void RPCSub::sendThread() // Send outside of the lock. if (bSend) { - // Drop result. try { + cLog(lsDEBUG) << boost::str(boost::format("callRPC calling: %s") % mIp); + + // Drop result. (void) callRPC(mIp, mPort, mUsername, mPassword, mPath, "event", jvEvent); } catch (const std::exception& e) @@ -76,9 +78,12 @@ void RPCSub::send(const Json::Value& jvObj) { // Drop the previous event. + cLog(lsDEBUG) << boost::str(boost::format("callRPC drop")); mDeque.pop_back(); } + cLog(lsDEBUG) << boost::str(boost::format("callRPC push: %s") % jvObj); + mDeque.push_back(std::make_pair(mSeq++, jvObj)); if (!mSending) @@ -86,6 +91,7 @@ void RPCSub::send(const Json::Value& jvObj) // Start a sending thread. mSending = true; + cLog(lsDEBUG) << boost::str(boost::format("callRPC start"); boost::thread(boost::bind(&RPCSub::sendThread, this)).detach(); } } From af0e39f11c6ba09b42239594d0adcdeb81599c69 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 14 Jan 2013 21:25:36 -0800 Subject: [PATCH 388/525] Typo --- src/cpp/ripple/RPCSub.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/RPCSub.cpp b/src/cpp/ripple/RPCSub.cpp index cc043a9f7..d4cb4d4b6 100644 --- a/src/cpp/ripple/RPCSub.cpp +++ b/src/cpp/ripple/RPCSub.cpp @@ -91,7 +91,7 @@ void RPCSub::send(const Json::Value& jvObj) // Start a sending thread. mSending = true; - cLog(lsDEBUG) << boost::str(boost::format("callRPC start"); + cLog(lsDEBUG) << boost::str(boost::format("callRPC start")); boost::thread(boost::bind(&RPCSub::sendThread, this)).detach(); } } From ca432d5a9c11394e5c59bd348ef448ed11eb39a3 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 14 Jan 2013 21:39:40 -0800 Subject: [PATCH 389/525] More debugging. --- src/cpp/ripple/RPCSub.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cpp/ripple/RPCSub.cpp b/src/cpp/ripple/RPCSub.cpp index d4cb4d4b6..e85d8ffe2 100644 --- a/src/cpp/ripple/RPCSub.cpp +++ b/src/cpp/ripple/RPCSub.cpp @@ -21,6 +21,9 @@ RPCSub::RPCSub(const std::string& strUrl, const std::string& strUsername, const } mSeq = 1; + + if (mPort < 0) + mPort = 80; } void RPCSub::sendThread() From 026f2a7fc738b5291b69c42882f467db9a48b22b Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 14 Jan 2013 21:45:54 -0800 Subject: [PATCH 390/525] More debugging. --- src/cpp/ripple/CallRPC.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 17fe7cad2..2cf58d8dd 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -659,7 +659,12 @@ Json::Value callRPC(const std::string& strIp, const int iPort, const std::string { // Connect to localhost if (!theConfig.QUIET) + { std::cerr << "Connecting to: " << strIp << ":" << iPort << std::endl; + std::cerr << "Username: " << strUsername << ":" << strPassword << std::endl; + std::cerr << "Path: " << strPassword << std::endl; + std::cerr << "Method: " << strMethod << std::endl; + } boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string(strIp), iPort); @@ -668,18 +673,21 @@ Json::Value callRPC(const std::string& strIp, const int iPort, const std::string if (stream.fail()) throw std::runtime_error("couldn't connect to server"); +cLog(lsDEBUG) << "connected" << std::endl; // HTTP basic authentication std::string strUserPass64 = EncodeBase64(strUsername + ":" + strPassword); std::map mapRequestHeaders; mapRequestHeaders["Authorization"] = std::string("Basic ") + strUserPass64; +cLog(lsDEBUG) << "requesting" << std::endl; // Send request std::string strRequest = JSONRPCRequest(strMethod, params, Json::Value(1)); - cLog(lsDEBUG) << "send request " << strMethod << " : " << strRequest << std::endl; +cLog(lsDEBUG) << "send request " << strMethod << " : " << strRequest << std::endl; + std::string strPost = createHTTPPost(strPath, strRequest, mapRequestHeaders); stream << strPost << std::flush; - // std::cerr << "post " << strPost << std::endl; +std::cerr << "post " << strPost << std::endl; // Receive reply std::map mapHeaders; From 33b2a20024e86c582eef2bb881c3c7189e700f4c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 14 Jan 2013 23:30:13 -0800 Subject: [PATCH 391/525] Correctly track direction and privilege of peer connections, pass to load tracking. --- src/cpp/ripple/ConnectionPool.cpp | 4 ++-- src/cpp/ripple/Peer.cpp | 11 ++++++++++- src/cpp/ripple/Peer.h | 10 +++++++--- src/cpp/ripple/PeerDoor.cpp | 2 +- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/ConnectionPool.cpp b/src/cpp/ripple/ConnectionPool.cpp index 3bac3246b..ae727e332 100644 --- a/src/cpp/ripple/ConnectionPool.cpp +++ b/src/cpp/ripple/ConnectionPool.cpp @@ -312,8 +312,8 @@ Peer::pointer ConnectionPool::peerConnect(const std::string& strIp, int iPort) if ((it = mIpMap.find(pipPeer)) == mIpMap.end()) { - Peer::pointer ppNew(Peer::create(theApp->getIOService(), - theApp->getPeerDoor().getSSLContext(), ++mLastPeer)); + Peer::pointer ppNew(Peer::create(theApp->getIOService(), theApp->getPeerDoor().getSSLContext(), + ++mLastPeer, false)); // Did not find it. Not already connecting or connected. ppNew->connect(strIp, iPort); diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index a2bb2dc96..c2be4ca4d 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -24,10 +24,12 @@ DECLARE_INSTANCE(Peer); // Node has this long to verify its identity from connection accepted or connection attempt. #define NODE_VERIFY_SECONDS 15 -Peer::Peer(boost::asio::io_service& io_service, boost::asio::ssl::context& ctx, uint64 peerID) : +Peer::Peer(boost::asio::io_service& io_service, boost::asio::ssl::context& ctx, uint64 peerID, bool inbound) : + mInbound(inbound), mHelloed(false), mDetaching(false), mActive(true), + mCluster(false), mPeerId(peerID), mSocketSsl(io_service, ctx), mActivityTimer(io_service) @@ -684,6 +686,13 @@ void Peer::recvHello(ripple::TMHello& packet) << "Peer speaks version " << (packet.protoversion() >> 16) << "." << (packet.protoversion() & 0xFF); mHello = packet; + if (theApp->getUNL().nodeInCluster(mNodePublic)) + { + mCluster = true; + mLoad.setPrivileged(); + } + if (isOutbound()) + mLoad.setOutbound(); if (mClientConnect) { diff --git a/src/cpp/ripple/Peer.h b/src/cpp/ripple/Peer.h index 49749ddd0..954fa5f62 100644 --- a/src/cpp/ripple/Peer.h +++ b/src/cpp/ripple/Peer.h @@ -33,10 +33,12 @@ public: void handleConnect(const boost::system::error_code& error, boost::asio::ip::tcp::resolver::iterator it); private: + bool mInbound; // Connection is inbound bool mClientConnect; // In process of connecting as client. bool mHelloed; // True, if hello accepted. bool mDetaching; // True, if detaching. bool mActive; + bool mCluster; // Node in our cluster RippleAddress mNodePublic; // Node public key of peer. ipPort mIpPort; ipPort mIpPortConnect; @@ -65,7 +67,7 @@ protected: ripple::TMStatusChange mLastStatus; ripple::TMHello mHello; - Peer(boost::asio::io_service& io_service, boost::asio::ssl::context& ctx, uint64 peerId); + Peer(boost::asio::io_service& io_service, boost::asio::ssl::context& ctx, uint64 peerId, bool inbound); void handleShutdown(const boost::system::error_code& error) { ; } void handleWrite(const boost::system::error_code& error, size_t bytes_transferred); @@ -117,9 +119,9 @@ public: void setIpPort(const std::string& strIP, int iPort); - static pointer create(boost::asio::io_service& io_service, boost::asio::ssl::context& ctx, uint64 id) + static pointer create(boost::asio::io_service& io_service, boost::asio::ssl::context& ctx, uint64 id, bool inbound) { - return pointer(new Peer(io_service, ctx, id)); + return pointer(new Peer(io_service, ctx, id, inbound)); } boost::asio::ssl::stream::lowest_layer_type& getSocket() @@ -144,6 +146,8 @@ public: Json::Value getJson(); bool isConnected() const { return mHelloed && !mDetaching; } + bool isInbound() const { return mInbound; } + bool isOutbound() const { return !mInbound; } uint256 getClosedLedgerHash() const { return mClosedLedgerHash; } bool hasLedger(const uint256& hash) const; diff --git a/src/cpp/ripple/PeerDoor.cpp b/src/cpp/ripple/PeerDoor.cpp index e65e72d7e..9ce77f45e 100644 --- a/src/cpp/ripple/PeerDoor.cpp +++ b/src/cpp/ripple/PeerDoor.cpp @@ -43,7 +43,7 @@ PeerDoor::PeerDoor(boost::asio::io_service& io_service) : void PeerDoor::startListening() { Peer::pointer new_connection = Peer::create(mAcceptor.get_io_service(), mCtx, - theApp->getConnectionPool().assignPeerId()); + theApp->getConnectionPool().assignPeerId(), true); mAcceptor.async_accept(new_connection->getSocket(), boost::bind(&PeerDoor::handleConnect, this, new_connection, From a79b6e0a15b3876e6ec33b5257f211b166c215ca Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 14 Jan 2013 23:48:51 -0800 Subject: [PATCH 392/525] Add new fields to peer Json output. --- src/cpp/ripple/Peer.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index c2be4ca4d..d45e7edb6 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1779,6 +1779,10 @@ Json::Value Peer::getJson() //ret["port"] = mIpPortConnect.second; ret["port"] = mIpPort.second; + if (mInbound) + ret["inbound"] = true; + if (mCluster) + ret["cluster"] = true; if (mHello.has_fullversion()) ret["version"] = mHello.fullversion(); From c24cda7847cccc00714fcd8f112af306feeb51b8 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 02:00:56 -0800 Subject: [PATCH 393/525] Use a more human-friendly numeric format. --- src/cpp/json/json_writer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/json/json_writer.cpp b/src/cpp/json/json_writer.cpp index 2a9f0dba3..5ab619d7b 100644 --- a/src/cpp/json/json_writer.cpp +++ b/src/cpp/json/json_writer.cpp @@ -67,9 +67,9 @@ std::string valueToString( double value ) { char buffer[32]; #if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__) // Use secure version with visual studio 2005 to avoid warning. - sprintf_s(buffer, sizeof(buffer), "%#.16g", value); + sprintf_s(buffer, sizeof(buffer), "%#f", value); #else - sprintf(buffer, "%#.16g", value); + sprintf(buffer, "%#f", value); #endif char* ch = buffer + strlen(buffer) - 1; if (*ch != '0') return buffer; // nothing to truncate, so save time From 88437c9cabf76b5d559178f23b605e21f80b89ec Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 02:01:07 -0800 Subject: [PATCH 394/525] Cleanup. --- src/cpp/ripple/Peer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Peer.h b/src/cpp/ripple/Peer.h index 954fa5f62..2d3fb9527 100644 --- a/src/cpp/ripple/Peer.h +++ b/src/cpp/ripple/Peer.h @@ -154,7 +154,7 @@ public: bool hasTxSet(const uint256& hash) const; uint64 getPeerId() const { return mPeerId; } - RippleAddress getNodePublic() const { return mNodePublic; } + const RippleAddress& getNodePublic() const { return mNodePublic; } void cycleStatus() { mPreviousLedgerHash = mClosedLedgerHash; mClosedLedgerHash.zero(); } }; From 343d9edb5113ee33757a45a153ddc0e365f5cebf Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 02:01:24 -0800 Subject: [PATCH 395/525] make server_info more friendly. --- src/cpp/ripple/NetworkOPs.cpp | 53 ++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index d093891a0..3fdebeb7e 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1102,42 +1102,49 @@ Json::Value NetworkOPs::getServerInfo() switch (mMode) { - case omDISCONNECTED: info["serverState"] = "disconnected"; break; - case omCONNECTED: info["serverState"] = "connected"; break; - case omTRACKING: info["serverState"] = "tracking"; break; - case omFULL: info["serverState"] = "validating"; break; - default: info["serverState"] = "unknown"; + case omDISCONNECTED: info["server_state"] = "disconnected"; break; + case omCONNECTED: info["server_state"] = "connected"; break; + case omTRACKING: info["server_state"] = "tracking"; break; + case omFULL: info["server_state"] = "validating"; break; + default: info["server_state"] = "unknown"; } - - if (!theConfig.VALIDATION_PUB.isValid()) - info["serverState"] = "none"; - else - info["validationPKey"] = theConfig.VALIDATION_PUB.humanNodePublic(); - if (mNeedNetworkLedger) - info["networkLedger"] = "waiting"; + info["network_ledger"] = "waiting"; - info["completeLedgers"] = theApp->getLedgerMaster().getCompleteLedgers(); + if (theConfig.VALIDATION_PUB.isValid()) + info["pubkey_validator"] = theConfig.VALIDATION_PUB.humanNodePublic(); + info["pubkey_node"] = theApp->getWallet().getNodePublic().humanNodePublic(); + + + info["complete_ledgers"] = theApp->getLedgerMaster().getCompleteLedgers(); info["peers"] = theApp->getConnectionPool().getPeerCount(); Json::Value lastClose = Json::objectValue; lastClose["proposers"] = theApp->getOPs().getPreviousProposers(); - lastClose["convergeTime"] = theApp->getOPs().getPreviousConvergeTime(); - info["lastClose"] = lastClose; + lastClose["converge_time"] = static_cast(theApp->getOPs().getPreviousConvergeTime()) / 1000.0; + info["last_close"] = lastClose; - if (mConsensus) - info["consensus"] = mConsensus->getJson(); +// if (mConsensus) +// info["consensus"] = mConsensus->getJson(); - info["load"] = theApp->getJobQueue().getJson(); - info["load_base"] = theApp->getFeeTrack().getLoadBase(); - info["load_fee"] = theApp->getFeeTrack().getLoadFactor(); + info["load"] = theApp->getJobQueue().getJson(); + info["load_factor"] = + static_cast(theApp->getFeeTrack().getLoadBase()) / theApp->getFeeTrack().getLoadFactor(); Ledger::pointer lpClosed = getClosedLedger(); - if (lpClosed) { - info["reserve_base"] = Json::UInt(lpClosed->getReserve(0)); - info["reserve_inc"] = Json::UInt(lpClosed->getReserveInc()); + uint64 baseFee = lpClosed->getBaseFee(); + uint64 baseRef = lpClosed->getReferenceFeeUnits(); + Json::Value l(Json::objectValue); + l["seq"] = Json::UInt(lpClosed->getLedgerSeq()); + l["hash"] = lpClosed->getHash().GetHex(); + l["base_fee"] = static_cast(Json::UInt(baseFee)) / SYSTEM_CURRENCY_PARTS; + l["reserve_base"] = + static_cast(Json::UInt(lpClosed->getReserve(0) * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; + l["reserve_inc"] = + static_cast(Json::UInt(lpClosed->getReserveInc() * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; + info["closed_ledger"] = l; } return info; From 90010b88706001e0a00c0ac25bcddc6250a01d5a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 10:20:41 -0800 Subject: [PATCH 396/525] Cleanups. Remove some unneeded filters. --- src/cpp/ripple/LedgerAcquire.cpp | 38 +++++++++++++++----------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 5d133645e..27470c888 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -97,24 +97,21 @@ bool LedgerAcquire::tryLocal() { mLedger = theApp->getLedgerMaster().getLedgerByHash(mHash); if (!mLedger) - { - cLog(lsDEBUG) << "root ledger node not local"; return false; - } } else - { mLedger = boost::make_shared(strCopy(node->getData()), true); - } + if (mLedger->getHash() != mHash) { // We know for a fact the ledger can never be acquired cLog(lsWARNING) << mHash << " cannot be a ledger"; mFailed = true; return true; } + mHaveBase = true; - if (!mLedger->getTransHash()) + if (mLedger->getTransHash().isZero()) { cLog(lsDEBUG) << "No TXNs to fetch"; mHaveTransactions = true; @@ -137,7 +134,7 @@ bool LedgerAcquire::tryLocal() } } - if (!mLedger->getAccountHash()) + if (mLedger->getAccountHash().isZero()) mHaveState = true; else { @@ -230,18 +227,18 @@ void LedgerAcquire::done() return; mSignaled = true; touch(); + #ifdef LA_DEBUG cLog(lsTRACE) << "Done acquiring ledger " << mHash; #endif - std::vector< boost::function > triggers; assert(isComplete() || isFailed()); + std::vector< boost::function > triggers; { boost::recursive_mutex::scoped_lock sl(mLock); - triggers = mOnComplete; + triggers.swap(mOnComplete); } - mOnComplete.clear(); if (isComplete() && !isFailed() && mLedger) { @@ -384,8 +381,7 @@ void LedgerAcquire::trigger(Peer::ref peer) std::vector nodeHashes; nodeIDs.reserve(256); nodeHashes.reserve(256); - TransactionStateSF tFilter(mLedger->getHash(), mLedger->getLedgerSeq()); - mLedger->peekTransactionMap()->getMissingNodes(nodeIDs, nodeHashes, 256, &tFilter); + mLedger->peekTransactionMap()->getMissingNodes(nodeIDs, nodeHashes, 256, NULL); if (nodeIDs.empty()) { if (!mLedger->peekTransactionMap()->isValid()) @@ -432,8 +428,7 @@ void LedgerAcquire::trigger(Peer::ref peer) std::vector nodeHashes; nodeIDs.reserve(256); nodeHashes.reserve(256); - AccountStateSF aFilter(mLedger->getHash(), mLedger->getLedgerSeq()); - mLedger->peekAccountStateMap()->getMissingNodes(nodeIDs, nodeHashes, 256, &aFilter); + mLedger->peekAccountStateMap()->getMissingNodes(nodeIDs, nodeHashes, 256, NULL); if (nodeIDs.empty()) { if (!mLedger->peekAccountStateMap()->isValid()) @@ -606,10 +601,12 @@ bool LedgerAcquire::takeBase(const std::string& data) // data must not have hash bool LedgerAcquire::takeTxNode(const std::list& nodeIDs, const std::list< std::vector >& data, SMAddNode& san) { - if (!mHaveBase) return false; + if (!mHaveBase) + return false; + std::list::const_iterator nodeIDit = nodeIDs.begin(); std::list< std::vector >::const_iterator nodeDatait = data.begin(); - TransactionStateSF tFilter(mLedger->getHash(), mLedger->getLedgerSeq()); + TransactionStateSF tFilter(mLedger->getLedgerSeq()); while (nodeIDit != nodeIDs.end()) { if (nodeIDit->isRoot()) @@ -653,7 +650,7 @@ bool LedgerAcquire::takeAsNode(const std::list& nodeIDs, std::list::const_iterator nodeIDit = nodeIDs.begin(); std::list< std::vector >::const_iterator nodeDatait = data.begin(); - AccountStateSF tFilter(mLedger->getHash(), mLedger->getLedgerSeq()); + AccountStateSF tFilter(mLedger->getLedgerSeq()); while (nodeIDit != nodeIDs.end()) { if (nodeIDit->isRoot()) @@ -690,7 +687,7 @@ bool LedgerAcquire::takeAsRootNode(const std::vector& data, SMAdd { if (!mHaveBase) return false; - AccountStateSF tFilter(mLedger->getHash(), mLedger->getLedgerSeq()); + AccountStateSF tFilter(mLedger->getLedgerSeq()); return san.combine( mLedger->peekAccountStateMap()->addRootNode(mLedger->getAccountHash(), data, snfWIRE, &tFilter)); } @@ -699,7 +696,7 @@ bool LedgerAcquire::takeTxRootNode(const std::vector& data, SMAdd { if (!mHaveBase) return false; - TransactionStateSF tFilter(mLedger->getHash(), mLedger->getLedgerSeq()); + TransactionStateSF tFilter(mLedger->getLedgerSeq()); return san.combine( mLedger->peekTransactionMap()->addRootNode(mLedger->getTransHash(), data, snfWIRE, &tFilter)); } @@ -847,7 +844,8 @@ SMAddNode LedgerAcquireMaster::gotLedgerData(ripple::TMLedgerData& packet, Peer: { cLog(lsWARNING) << "Included TXbase invalid"; } - ledger->trigger(peer); + if (!san.isInvalid()) + ledger->trigger(peer); return san; } From dded68afb968063866e4b7cd8076e2740e8e4a34 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 10:21:07 -0800 Subject: [PATCH 397/525] Tiny cleanup. --- src/cpp/ripple/SHAMapNodes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/SHAMapNodes.cpp b/src/cpp/ripple/SHAMapNodes.cpp index 0cfa10b53..35ad313c7 100644 --- a/src/cpp/ripple/SHAMapNodes.cpp +++ b/src/cpp/ripple/SHAMapNodes.cpp @@ -355,7 +355,7 @@ bool SHAMapTreeNode::updateHash() if(!empty) { nh = Serializer::getPrefixHash(sHP_InnerNode, reinterpret_cast(mHashes), sizeof(mHashes)); -#ifdef DEBUG +#ifdef PARANOID Serializer s; s.add32(sHP_InnerNode); for(int i = 0; i < 16; ++i) From bdd953076ace99b74f68b3a960dacccf4c02faaf Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 10:21:16 -0800 Subject: [PATCH 398/525] Avoid a needless allocate/copy/free in addRootNode. --- src/cpp/ripple/SHAMapSync.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 7b16fbeee..5d99399b0 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -193,7 +193,7 @@ SMAddNode SHAMap::addRootNode(const std::vector& rootNode, SHANod return SMAddNode::okay(); } - SHAMapTreeNode::pointer node = boost::make_shared(SHAMapNode(), rootNode, 0, format, uint256()); + SHAMapTreeNode::pointer node = boost::make_shared(SHAMapNode(), rootNode, mSeq, format, uint256()); if (!node) return SMAddNode::invalid(); @@ -201,8 +201,6 @@ SMAddNode SHAMap::addRootNode(const std::vector& rootNode, SHANod node->dump(); #endif - returnNode(root, true); - root = node; mTNByID[*root] = root; if (root->getNodeHash().isZero()) @@ -233,11 +231,10 @@ SMAddNode SHAMap::addRootNode(const uint256& hash, const std::vector(SHAMapNode(), rootNode, 0, format, uint256()); + SHAMapTreeNode::pointer node = boost::make_shared(SHAMapNode(), rootNode, mSeq, format, uint256()); if (!node || node->getNodeHash() != hash) return SMAddNode::invalid(); - returnNode(root, true); root = node; mTNByID[*root] = root; if (root->getNodeHash().isZero()) @@ -305,7 +302,7 @@ SMAddNode SHAMap::addKnownNode(const SHAMapNode& node, const std::vectorgetChildHash(branch); - if (!hash) + if (hash.isZero()) { cLog(lsWARNING) << "AddKnownNode for empty branch"; return SMAddNode::invalid(); @@ -351,6 +348,7 @@ SMAddNode SHAMap::addKnownNode(const SHAMapNode& node, const std::vectorisFullBelow()) clearSynching(); + return SMAddNode::useful(); } From d3069f7fbcbda81389a32438a8f2bfb07f64829f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 10:21:46 -0800 Subject: [PATCH 399/525] Get rid of an unneeded member. Add some comments. --- src/cpp/ripple/SHAMapSync.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/SHAMapSync.h b/src/cpp/ripple/SHAMapSync.h index 1431ccc12..7c3eae345 100644 --- a/src/cpp/ripple/SHAMapSync.h +++ b/src/cpp/ripple/SHAMapSync.h @@ -7,6 +7,7 @@ // Sync filters allow low-level SHAMapSync code to interact correctly with // higher-level structures such as caches and transaction stores +// This class is needed on both add and check functions class ConsensusTransSetSF : public SHAMapSyncFilter { // sync filter for transaction sets during consensus building public: @@ -24,14 +25,14 @@ public: } }; +// This class is only needed on add functions class AccountStateSF : public SHAMapSyncFilter { // sync filter for account state nodes during ledger sync protected: - uint256 mLedgerHash; uint32 mLedgerSeq; public: - AccountStateSF(const uint256& ledgerHash, uint32 ledgerSeq) : mLedgerHash(ledgerHash), mLedgerSeq(ledgerSeq) + AccountStateSF(uint32 ledgerSeq) : mLedgerSeq(ledgerSeq) { ; } virtual void gotNode(const SHAMapNode& id, const uint256& nodeHash, @@ -45,14 +46,14 @@ public: } }; +// This class is only needed on add functions class TransactionStateSF : public SHAMapSyncFilter { // sync filter for transactions tree during ledger sync protected: - uint256 mLedgerHash; uint32 mLedgerSeq; public: - TransactionStateSF(const uint256& ledgerHash, uint32 ledgerSeq) : mLedgerHash(ledgerHash), mLedgerSeq(ledgerSeq) + TransactionStateSF(uint32 ledgerSeq) : mLedgerSeq(ledgerSeq) { ; } virtual void gotNode(const SHAMapNode& id, const uint256& nodeHash, From b61e201667c229193335f6164cad6b58e05c2d0e Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 15 Jan 2013 15:43:52 -0800 Subject: [PATCH 400/525] Get rid of chatty debug. --- src/cpp/ripple/CallRPC.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 2cf58d8dd..b64f94ab6 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -661,9 +661,9 @@ Json::Value callRPC(const std::string& strIp, const int iPort, const std::string if (!theConfig.QUIET) { std::cerr << "Connecting to: " << strIp << ":" << iPort << std::endl; - std::cerr << "Username: " << strUsername << ":" << strPassword << std::endl; - std::cerr << "Path: " << strPassword << std::endl; - std::cerr << "Method: " << strMethod << std::endl; +// std::cerr << "Username: " << strUsername << ":" << strPassword << std::endl; +// std::cerr << "Path: " << strPath << std::endl; +// std::cerr << "Method: " << strMethod << std::endl; } boost::asio::ip::tcp::endpoint @@ -673,21 +673,23 @@ Json::Value callRPC(const std::string& strIp, const int iPort, const std::string if (stream.fail()) throw std::runtime_error("couldn't connect to server"); -cLog(lsDEBUG) << "connected" << std::endl; + // cLog(lsDEBUG) << "connected" << std::endl; + // HTTP basic authentication std::string strUserPass64 = EncodeBase64(strUsername + ":" + strPassword); std::map mapRequestHeaders; mapRequestHeaders["Authorization"] = std::string("Basic ") + strUserPass64; -cLog(lsDEBUG) << "requesting" << std::endl; + // Log(lsDEBUG) << "requesting" << std::endl; + // Send request std::string strRequest = JSONRPCRequest(strMethod, params, Json::Value(1)); -cLog(lsDEBUG) << "send request " << strMethod << " : " << strRequest << std::endl; + // cLog(lsDEBUG) << "send request " << strMethod << " : " << strRequest << std::endl; std::string strPost = createHTTPPost(strPath, strRequest, mapRequestHeaders); stream << strPost << std::flush; -std::cerr << "post " << strPost << std::endl; + // std::cerr << "post " << strPost << std::endl; // Receive reply std::map mapHeaders; From 940cc9059c70ada0d97651e13243f45aca19b94f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 16:21:53 -0800 Subject: [PATCH 401/525] Peer::handleWrite grabs the wrong lock. --- src/cpp/ripple/Peer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index d45e7edb6..c41125210 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -44,7 +44,7 @@ void Peer::handleWrite(const boost::system::error_code& error, size_t bytes_tran // std::cerr << "Peer::handleWrite bytes: "<< bytes_transferred << std::endl; #endif - boost::recursive_mutex::scoped_lock sl(theApp->getMasterLock()); + boost::recursive_mutex::scoped_lock sl(ioMutex); mSendingPacket.reset(); From 6001be0f3b0860f310c111798dff9694c8434e02 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 15 Jan 2013 16:50:45 -0800 Subject: [PATCH 402/525] UT: Add test for nexus customer to customer with and without transfer fee --- test/send-test.js | 112 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/test/send-test.js b/test/send-test.js index c47b054f1..b77cdd866 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -495,6 +495,118 @@ buster.testCase("Sending future", { // Ripple with one-way credit path. }); +buster.testCase("Nexus", { + // 'setUp' : testutils.build_setup({ verbose: true }), + 'setUp' : testutils.build_setup(), + 'tearDown' : testutils.build_teardown(), + + "customer to customer with and without transfer fee" : + function (done) { + var self = this; + + // self.remote.set_trace(); + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "mtgox"], callback); + }, + function (callback) { + self.what = "Set credit limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "100/AUD/mtgox", + "bob" : "100/AUD/mtgox", + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "mtgox" : [ "1/AUD/alice" ], + }, + callback); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : "1/AUD/mtgox", + "mtgox" : "-1/AUD/alice", + }, + callback); + }, + function (callback) { + self.what = "Alice sends Bob 1 AUD"; + + self.remote.transaction() + .payment("alice", "bob", "1/AUD/mtgox") + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances 2."; + + testutils.verify_balances(self.remote, + { + "alice" : "0/AUD/mtgox", + "bob" : "1/AUD/mtgox", + "mtgox" : "-1/AUD/bob", + }, + callback); + }, + function (callback) { + self.what = "Set transfer rate."; + + self.remote.transaction() + .account_set("mtgox") + .transfer_rate(1e9*1.1) + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Bob sends Alice 0.5 AUD"; + + self.remote.transaction() + .payment("bob", "alice", "0.5/AUD/mtgox") + .send_max("0.55/AUD/mtgox") // !!! Very important. + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances 3."; + + testutils.verify_balances(self.remote, + { + "alice" : "0.5/AUD/mtgox", + "bob" : "0.45/AUD/mtgox", + "mtgox" : [ "-0.5/AUD/alice","-0.45/AUD/bob" ], + }, + callback); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, +}); + buster.testCase("Indirect ripple", { // 'setUp' : testutils.build_setup({ verbose: true }), 'setUp' : testutils.build_setup(), From d398c5bb02ac82332e846b3abb6c6d54826fa93c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 17:03:00 -0800 Subject: [PATCH 403/525] Don't show our validation key in non-admin server_info. --- src/cpp/ripple/NetworkOPs.cpp | 11 ++++++++--- src/cpp/ripple/NetworkOPs.h | 2 +- src/cpp/ripple/RPCHandler.cpp | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 3fdebeb7e..f0020b0b6 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1093,7 +1093,7 @@ bool NetworkOPs::recvValidation(const SerializedValidation::pointer& val) return theApp->getValidations().addValidation(val); } -Json::Value NetworkOPs::getServerInfo() +Json::Value NetworkOPs::getServerInfo(bool admin) { Json::Value info = Json::objectValue; @@ -1111,8 +1111,13 @@ Json::Value NetworkOPs::getServerInfo() if (mNeedNetworkLedger) info["network_ledger"] = "waiting"; - if (theConfig.VALIDATION_PUB.isValid()) - info["pubkey_validator"] = theConfig.VALIDATION_PUB.humanNodePublic(); + if (admin) + { + if (theConfig.VALIDATION_PUB.isValid()) + info["pubkey_validator"] = theConfig.VALIDATION_PUB.humanNodePublic(); + else + info["pubkey_validator"] = "none"; + } info["pubkey_node"] = theApp->getWallet().getNodePublic().humanNodePublic(); diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 3101880dd..ffaeb3873 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -243,7 +243,7 @@ public: int getPreviousConvergeTime() { return mLastCloseConvergeTime; } uint32 getLastCloseTime() { return mLastCloseTime; } void setLastCloseTime(uint32 t) { mLastCloseTime = t; } - Json::Value getServerInfo(); + Json::Value getServerInfo(bool admin); uint32 acceptLedger(); boost::unordered_map >& peekStoredProposals() { return mStoredProposals; } diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 85a50fb00..5a41eb5f8 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1305,7 +1305,7 @@ Json::Value RPCHandler::doServerInfo(Json::Value) { Json::Value ret(Json::objectValue); - ret["info"] = theApp->getOPs().getServerInfo(); + ret["info"] = theApp->getOPs().getServerInfo(mRole == ADMIN); return ret; } From fb3e2e8af4e5925d3df0e26154e919cae67ba791 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 17:09:57 -0800 Subject: [PATCH 404/525] Fix a crash bug Arthur reported. --- src/cpp/ripple/LedgerMaster.cpp | 1 + src/cpp/ripple/LedgerMaster.h | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 86e690b2e..60b5b464c 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -128,6 +128,7 @@ TER LedgerMaster::doTransaction(const SerializedTransaction& txn, TransactionEng bool LedgerMaster::haveLedgerRange(uint32 from, uint32 to) { + boost::recursive_mutex::scoped_lock sl(mLock); uint32 prevMissing = mCompleteLedgers.prevMissing(to + 1); return (prevMissing == RangeSet::RangeSetAbsent) || (prevMissing < from); } diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index ebb10d227..35b1d0acd 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -82,7 +82,11 @@ public: void switchLedgers(Ledger::ref lastClosed, Ledger::ref newCurrent); - std::string getCompleteLedgers() { return mCompleteLedgers.toString(); } + std::string getCompleteLedgers() + { + boost::recursive_mutex::scoped_lock sl(mLock); + return mCompleteLedgers.toString(); + } Ledger::pointer closeLedger(bool recoverHeldTransactions); @@ -108,7 +112,11 @@ public: return mLedgerHistory.getLedgerByHash(hash); } - void setLedgerRangePresent(uint32 minV, uint32 maxV) { mCompleteLedgers.setRange(minV, maxV); } + void setLedgerRangePresent(uint32 minV, uint32 maxV) + { + boost::recursive_mutex::scoped_lock sl(mLock); + mCompleteLedgers.setRange(minV, maxV); + } void addHeldTransaction(const Transaction::pointer& trans); void fixMismatch(Ledger::ref ledger); From 01b3e9e0ae44f3c57f4a3153df26ed9a2c7bf77e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:05:30 -0800 Subject: [PATCH 405/525] Add 'getValidatedLedger' to get the last fully-validated ledger. We should probably audit calls to 'getClosedLedger' to see if they should use this instead. --- src/cpp/ripple/LedgerMaster.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 35b1d0acd..514b05551 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -67,10 +67,13 @@ public: ScopedLock getLock() { return ScopedLock(mLock); } // The current ledger is the ledger we believe new transactions should go in - Ledger::ref getCurrentLedger() { return mCurrentLedger; } + Ledger::ref getCurrentLedger() { return mCurrentLedger; } // The finalized ledger is the last closed/accepted ledger - Ledger::ref getClosedLedger() { return mFinalizedLedger; } + Ledger::ref getClosedLedger() { return mFinalizedLedger; } + + // The published ledger is the last fully validated ledger + Ledger::ref getValidatedLedger() { return mPubLedger; } TER doTransaction(const SerializedTransaction& txn, TransactionEngineParams params); From 8191153dce70361684fb65b25c0f4d5521600da4 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:16:20 -0800 Subject: [PATCH 406/525] Split into server_info (for humans) and server_state (for machines). Allow either without admin privileges, filter information out from non-admins. Cleanup and improve data in all cases. --- src/cpp/ripple/CallRPC.cpp | 1 + src/cpp/ripple/NetworkOPs.cpp | 55 ++++++++++++++++++++++++++--------- src/cpp/ripple/NetworkOPs.h | 3 +- src/cpp/ripple/RPCHandler.cpp | 14 +++++++-- src/cpp/ripple/RPCHandler.h | 3 +- 5 files changed, 59 insertions(+), 17 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index b64f94ab6..424f64a73 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -492,6 +492,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) { "sign", &RPCParser::parseSignSubmit, 2, 2 }, { "submit", &RPCParser::parseSignSubmit, 1, 2 }, { "server_info", &RPCParser::parseAsIs, 0, 0 }, + { "server_state", &RPCParser::parseAsIs, 0, 0 }, { "stop", &RPCParser::parseAsIs, 0, 0 }, // { "transaction_entry", &RPCParser::parseTransactionEntry, -1, -1 }, { "tx", &RPCParser::parseTx, 1, 1 }, diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index f0020b0b6..e74374df9 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1093,7 +1093,7 @@ bool NetworkOPs::recvValidation(const SerializedValidation::pointer& val) return theApp->getValidations().addValidation(val); } -Json::Value NetworkOPs::getServerInfo(bool admin) +Json::Value NetworkOPs::getServerInfo(bool human, bool admin) { Json::Value info = Json::objectValue; @@ -1126,29 +1126,58 @@ Json::Value NetworkOPs::getServerInfo(bool admin) Json::Value lastClose = Json::objectValue; lastClose["proposers"] = theApp->getOPs().getPreviousProposers(); - lastClose["converge_time"] = static_cast(theApp->getOPs().getPreviousConvergeTime()) / 1000.0; + if (human) + lastClose["converge_time_s"] = static_cast(theApp->getOPs().getPreviousConvergeTime()) / 1000.0; + else + lastClose["converge_time"] = Json::Int(theApp->getOPs().getPreviousConvergeTime()); info["last_close"] = lastClose; // if (mConsensus) // info["consensus"] = mConsensus->getJson(); - info["load"] = theApp->getJobQueue().getJson(); - info["load_factor"] = - static_cast(theApp->getFeeTrack().getLoadBase()) / theApp->getFeeTrack().getLoadFactor(); + if (admin) + info["load"] = theApp->getJobQueue().getJson(); + + if (!human) + { + info["load_base"] = theApp->getFeeTrack().getLoadBase(); + info["load_factor"] = theApp->getFeeTrack().getLoadFactor(); + } + else + info["load_factor"] = + static_cast(theApp->getFeeTrack().getLoadBase()) / theApp->getFeeTrack().getLoadFactor(); + + bool valid = false; + Ledger::pointer lpClosed = getValidatedLedger(); + if (lpClosed) + valid = true; + else + lpClosed = getClosedLedger(); - Ledger::pointer lpClosed = getClosedLedger(); if (lpClosed) { uint64 baseFee = lpClosed->getBaseFee(); uint64 baseRef = lpClosed->getReferenceFeeUnits(); Json::Value l(Json::objectValue); - l["seq"] = Json::UInt(lpClosed->getLedgerSeq()); - l["hash"] = lpClosed->getHash().GetHex(); - l["base_fee"] = static_cast(Json::UInt(baseFee)) / SYSTEM_CURRENCY_PARTS; - l["reserve_base"] = - static_cast(Json::UInt(lpClosed->getReserve(0) * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; - l["reserve_inc"] = - static_cast(Json::UInt(lpClosed->getReserveInc() * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; + l["seq"] = Json::UInt(lpClosed->getLedgerSeq()); + l["hash"] = lpClosed->getHash().GetHex(); + l["validated"] = valid; + if (!human) + { + l["base_fee"] = Json::Value::UInt(baseFee); + l["reserve_base"] = Json::Value::UInt(lpClosed->getReserve(0)); + l["reserve_inc"] = Json::Value::UInt(lpClosed->getReserveInc()); + l["close_time"] = Json::Value::UInt(lpClosed->getCloseTimeNC()); + } + else + { + l["base_fee_xrp"] = static_cast(Json::UInt(baseFee)) / SYSTEM_CURRENCY_PARTS; + l["reserve_base_xrp"] = + static_cast(Json::UInt(lpClosed->getReserve(0) * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; + l["reserve_inc_xrp"] = + static_cast(Json::UInt(lpClosed->getReserveInc() * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; + l["age"] = static_cast(lpClosed->getCloseTimeNC()) - getCloseTimeNC(); + } info["closed_ledger"] = l; } diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index ffaeb3873..764dec483 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -141,6 +141,7 @@ public: std::string strOperatingMode(); Ledger::ref getClosedLedger() { return mLedgerMaster->getClosedLedger(); } + Ledger::ref getValidatedLedger() { return mLedgerMaster->getValidatedLedger(); } Ledger::ref getCurrentLedger() { return mLedgerMaster->getCurrentLedger(); } Ledger::pointer getLedgerByHash(const uint256& hash) { return mLedgerMaster->getLedgerByHash(hash); } Ledger::pointer getLedgerBySeq(const uint32 seq) { return mLedgerMaster->getLedgerBySeq(seq); } @@ -243,7 +244,7 @@ public: int getPreviousConvergeTime() { return mLastCloseConvergeTime; } uint32 getLastCloseTime() { return mLastCloseTime; } void setLastCloseTime(uint32 t) { mLastCloseTime = t; } - Json::Value getServerInfo(bool admin); + Json::Value getServerInfo(bool human, bool admin); uint32 acceptLedger(); boost::unordered_map >& peekStoredProposals() { return mStoredProposals; } diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 5a41eb5f8..13138a338 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1305,7 +1305,16 @@ Json::Value RPCHandler::doServerInfo(Json::Value) { Json::Value ret(Json::objectValue); - ret["info"] = theApp->getOPs().getServerInfo(mRole == ADMIN); + ret["info"] = theApp->getOPs().getServerInfo(true, mRole == ADMIN); + + return ret; +} + +Json::Value RPCHandler::doServerState(Json::Value) +{ + Json::Value ret(Json::objectValue); + + ret["info"] = theApp->getOPs().getServerInfo(false, mRole == ADMIN); return ret; } @@ -2589,7 +2598,8 @@ Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) { "ripple_path_find", &RPCHandler::doRipplePathFind, false, optCurrent }, { "sign", &RPCHandler::doSign, false, optCurrent }, { "submit", &RPCHandler::doSubmit, false, optCurrent }, - { "server_info", &RPCHandler::doServerInfo, true, optNone }, + { "server_info", &RPCHandler::doServerInfo, false, optNone }, + { "server_state", &RPCHandler::doServerState, false, optNone }, { "stop", &RPCHandler::doStop, true, optNone }, { "transaction_entry", &RPCHandler::doTransactionEntry, false, optCurrent }, { "tx", &RPCHandler::doTx, false, optNetwork }, diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index a1d891700..5c3365e01 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -66,7 +66,8 @@ class RPCHandler Json::Value doProfile(Json::Value params); Json::Value doRandom(Json::Value jvRequest); Json::Value doRipplePathFind(Json::Value jvRequest); - Json::Value doServerInfo(Json::Value params); + Json::Value doServerInfo(Json::Value params); // for humans + Json::Value doServerState(Json::Value params); // for machines Json::Value doSessionClose(Json::Value params); Json::Value doSessionOpen(Json::Value params); Json::Value doStop(Json::Value params); From 1af14e07c7c838324a5501276abf17d84ac3a272 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:19:33 -0800 Subject: [PATCH 407/525] Tiny cosmetic tweak. --- src/cpp/ripple/RPCHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 13138a338..2948b52e2 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -1314,7 +1314,7 @@ Json::Value RPCHandler::doServerState(Json::Value) { Json::Value ret(Json::objectValue); - ret["info"] = theApp->getOPs().getServerInfo(false, mRole == ADMIN); + ret["state"] = theApp->getOPs().getServerInfo(false, mRole == ADMIN); return ret; } From 1c48f6948d66d921d1daa9e7a60b0fb1bbe8fe57 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:21:24 -0800 Subject: [PATCH 408/525] Fix "age". --- src/cpp/ripple/NetworkOPs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index e74374df9..89c0d0240 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1176,7 +1176,7 @@ Json::Value NetworkOPs::getServerInfo(bool human, bool admin) static_cast(Json::UInt(lpClosed->getReserve(0) * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; l["reserve_inc_xrp"] = static_cast(Json::UInt(lpClosed->getReserveInc() * baseFee / baseRef)) / SYSTEM_CURRENCY_PARTS; - l["age"] = static_cast(lpClosed->getCloseTimeNC()) - getCloseTimeNC(); + l["age"] = Json::UInt(getCloseTimeNC() - lpClosed->getCloseTimeNC()); } info["closed_ledger"] = l; } From 40e508540fecd654fa5ef427d56417bd361be58b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:26:52 -0800 Subject: [PATCH 409/525] load_fee -> load_factor --- src/cpp/ripple/NetworkOPs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 89c0d0240..d907ad963 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1008,7 +1008,7 @@ void NetworkOPs::pubServer() jvObj["type"] = "serverStatus"; jvObj["server_status"] = strOperatingMode(); jvObj["load_base"] = theApp->getFeeTrack().getLoadBase(); - jvObj["load_fee"] = theApp->getFeeTrack().getLoadFactor(); + jvObj["load_factor"] = theApp->getFeeTrack().getLoadFactor(); BOOST_FOREACH(InfoSub* ispListener, mSubServer) { @@ -1555,7 +1555,7 @@ bool NetworkOPs::subServer(InfoSub* ispListener, Json::Value& jvResult) jvResult["random"] = uRandom.ToString(); jvResult["server_status"] = strOperatingMode(); jvResult["load_base"] = theApp->getFeeTrack().getLoadBase(); - jvResult["load_fee"] = theApp->getFeeTrack().getLoadFactor(); + jvResult["load_factor"] = theApp->getFeeTrack().getLoadFactor(); return mSubServer.insert(ispListener).second; } From 5846951d22d61ef157605ec89c25b3a1ddd337c5 Mon Sep 17 00:00:00 2001 From: jed Date: Tue, 15 Jan 2013 19:32:18 -0800 Subject: [PATCH 410/525] windows --- ripple2010.vcxproj | 15 +++++++++------ ripple2010.vcxproj.filters | 21 ++++++++++++--------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/ripple2010.vcxproj b/ripple2010.vcxproj index c09787f99..a7f8d1599 100644 --- a/ripple2010.vcxproj +++ b/ripple2010.vcxproj @@ -57,6 +57,7 @@ true ..\OpenSSL\lib\VC;..\boost_1_52_0\stage\lib;..\protobuf\vsprojects\Debug ssleay32MDd.lib;libeay32MTd.lib;libprotobuf.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)rippled.exe @@ -81,18 +82,19 @@ true true true - ..\OpenSSL\lib\VC;..\boost_1_47_0\stage\lib;..\protobuf-2.4.1\vsprojects\Release + ..\OpenSSL\lib\VC;..\boost_1_52_0\stage\lib;..\protobuf\vsprojects\Release libprotobuf.lib;ssleay32MD.lib;libeay32MD.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)rippled.exe - + @@ -122,11 +124,13 @@ + + @@ -147,13 +151,13 @@ - + @@ -181,7 +185,6 @@ - @@ -298,8 +301,8 @@ Document - /code/protobuf/protoc -I=..\newcoin --cpp_out=\code\newcoin\ ..\newcoin/src/cpp/ripple/ripple.proto - \code\newcoin\src\ripple.pb.h + "../protobuf/protoc" -I=..\newcoin --cpp_out=..\newcoin\ ..\newcoin/src/cpp/ripple/ripple.proto + ..\newcoin\src\ripple.pb.h diff --git a/ripple2010.vcxproj.filters b/ripple2010.vcxproj.filters index 2c8ed95fc..2ac1549e3 100644 --- a/ripple2010.vcxproj.filters +++ b/ripple2010.vcxproj.filters @@ -39,9 +39,6 @@ Source Files\database - - Source Files\database - Source Files\json @@ -189,9 +186,6 @@ Source Files - - Source Files - Source Files @@ -279,9 +273,6 @@ Source Files - - Source Files - Source Files @@ -354,6 +345,18 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + From 56571602b0956e5b2267d4a81ae71943f21e1d46 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:46:58 -0800 Subject: [PATCH 411/525] Reduce a debug message to debug level. --- src/cpp/ripple/LedgerAcquire.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 27470c888..d97a60f9d 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -718,7 +718,7 @@ LedgerAcquire::pointer LedgerAcquireMaster::findCreate(const uint256& hash) ptr->setTimer(); // Cannot call in constructor } else - cLog(lsINFO) << "LedgerAcquireMaster acquiring ledger we already have"; + cLog(lsDEBUG) << "LedgerAcquireMaster acquiring ledger we already have"; return ptr; } From 7f18a8ffc3907c45ea8c9767e6d19d94bf667727 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 19:47:20 -0800 Subject: [PATCH 412/525] Reduce debug levels. --- src/cpp/ripple/Peer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index c41125210..7c0590dbf 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -1392,7 +1392,7 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) logMe += "LedgerHash:"; logMe += ledgerhash.GetHex(); ledger = theApp->getLedgerMaster().getLedgerByHash(ledgerhash); - tLog(!ledger, lsINFO) << "Don't have ledger " << ledgerhash; + tLog(!ledger, lsDEBUG) << "Don't have ledger " << ledgerhash; if (!ledger && (packet.has_querytype() && !packet.has_requestcookie())) { std::vector peerList = theApp->getConnectionPool().getPeerVector(); @@ -1417,7 +1417,7 @@ void Peer::recvGetLedger(ripple::TMGetLedger& packet) else if (packet.has_ledgerseq()) { ledger = theApp->getLedgerMaster().getLedgerBySeq(packet.ledgerseq()); - tLog(!ledger, lsINFO) << "Don't have ledger " << packet.ledgerseq(); + tLog(!ledger, lsDEBUG) << "Don't have ledger " << packet.ledgerseq(); } else if (packet.has_ltype() && (packet.ltype() == ripple::ltCURRENT)) ledger = theApp->getLedgerMaster().getCurrentLedger(); From ffd32cc66c17abc3b38784eb5dd82efcae872c12 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 15 Jan 2013 19:55:57 -0800 Subject: [PATCH 413/525] Make specific generic uses of temINVALID. --- src/cpp/ripple/PaymentTransactor.cpp | 16 ++++++++++------ src/cpp/ripple/TransactionErr.cpp | 4 ++++ src/cpp/ripple/TransactionErr.h | 4 ++++ src/cpp/ripple/Transactor.cpp | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index ac4a7a42c..74e376393 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -64,13 +64,17 @@ TER PaymentTransactor::doApply() return temREDUNDANT; } - else if (bMax - && ((saMaxAmount == saDstAmount && saMaxAmount.getCurrency() == saDstAmount.getCurrency()) - || (saDstAmount.isNative() && saMaxAmount.isNative()))) + else if (bMax && saMaxAmount == saDstAmount && saMaxAmount.getCurrency() == saDstAmount.getCurrency()) { - cLog(lsINFO) << "Payment: Malformed transaction: bad SendMax."; + cLog(lsINFO) << "Payment: Malformed transaction: Redundant SendMax."; - return temINVALID; + return temREDUNDANT_SEND_MAX; + } + else if (bMax && (saDstAmount.isNative() && saMaxAmount.isNative())) + { + cLog(lsINFO) << "Payment: Malformed transaction: SendMax not allowed for XRP."; + + return temBAD_SEND_MAX_XRP; } SLE::pointer sleDst = mEngine->entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(uDstAccountID)); @@ -103,7 +107,7 @@ TER PaymentTransactor::doApply() { cLog(lsINFO) << "Payment: Malformed transaction: DestinationTag required."; - return temINVALID; + return temDST_TAG_NEEDED; } else { diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index 5b8020ad3..dcf5f2df2 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -49,14 +49,18 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temBAD_PATH, "temBAD_PATH", "Malformed: Bad path." }, { temBAD_PATH_LOOP, "temBAD_PATH_LOOP", "Malformed: Loop in path." }, { temBAD_PUBLISH, "temBAD_PUBLISH", "Malformed: Bad publish." }, + { temBAD_SIGNATURE, "temBAD_SIGNATURE", "Malformed: Bad signature." }, + { temBAD_SRC_ACCOUNT, "temBAD_SRC_ACCOUNT", "Malformed: Bad source account." }, { temBAD_TRANSFER_RATE, "temBAD_TRANSFER_RATE", "Malformed: Transfer rate must be >= 1.0" }, { temBAD_SEQUENCE, "temBAD_SEQUENCE", "Malformed: Sequence is not in the past." }, + { temBAD_SEND_MAX_XRP, "temBAD_SEND_MAX_XRP", "Malformed: Send max is not allowed for XRP." }, { temDST_IS_SRC, "temDST_IS_SRC", "Destination may not be source." }, { temDST_NEEDED, "temDST_NEEDED", "Destination not specified." }, { temDST_TAG_NEEDED, "temDST_TAG_NEEDED", "Destination tag required." }, { temINVALID, "temINVALID", "The transaction is ill-formed." }, { temINVALID_FLAG, "temINVALID_FLAG", "The transaction has an invalid flag." }, { temREDUNDANT, "temREDUNDANT", "Sends same currency to self." }, + { temREDUNDANT_SEND_MAX, "temREDUNDANT_SEND_MAX", "Send max is redundant." }, { temRIPPLE_EMPTY, "temRIPPLE_EMPTY", "PathSet with no paths." }, { temUNCERTAIN, "temUNCERTAIN", "In process of determining result. Never returned." }, { temUNKNOWN, "temUNKNOWN", "The transactions requires logic not implemented yet." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 9de5fe065..7fb0e3215 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -36,6 +36,9 @@ enum TER // aka TransactionEngineResult temBAD_PATH_LOOP, temBAD_PUBLISH, temBAD_TRANSFER_RATE, + temBAD_SEND_MAX_XRP, + temBAD_SIGNATURE, + temBAD_SRC_ACCOUNT, temBAD_SEQUENCE, temDST_IS_SRC, temDST_NEEDED, @@ -43,6 +46,7 @@ enum TER // aka TransactionEngineResult temINVALID, temINVALID_FLAG, temREDUNDANT, + temREDUNDANT_SEND_MAX, temRIPPLE_EMPTY, temUNCERTAIN, // An intermediate result used internally, should never be returned. temUNKNOWN, diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index 22a19c670..a85d63f59 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -157,7 +157,7 @@ TER Transactor::preCheck() { cLog(lsWARNING) << "applyTransaction: bad source id"; - return temINVALID; + return temBAD_SRC_ACCOUNT; } // Extract signing key From 271bf901eca717dae3a19be82db93f9b7e391043 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 15 Jan 2013 23:47:42 -0800 Subject: [PATCH 414/525] Support for compiling on 32-bit platforms. The main issue was BN_ULONG size and not using 'long' where 'long long' or 'uint64' should be used. --- src/cpp/ripple/Amount.cpp | 98 ++++++++++++++++++----------- src/cpp/ripple/BigNum64.h | 22 +++++++ src/cpp/ripple/SerializedObject.cpp | 2 +- src/cpp/ripple/base58.h | 4 +- src/cpp/ripple/bignum.h | 90 ++++++++++++++++---------- 5 files changed, 142 insertions(+), 74 deletions(-) create mode 100644 src/cpp/ripple/BigNum64.h diff --git a/src/cpp/ripple/Amount.cpp b/src/cpp/ripple/Amount.cpp index 8a3038fc2..862613719 100644 --- a/src/cpp/ripple/Amount.cpp +++ b/src/cpp/ripple/Amount.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -15,8 +16,16 @@ SETUP_LOG(); uint64 STAmount::uRateOne = STAmount::getRate(STAmount(1), STAmount(1)); -static const uint64_t tenTo14 = 100000000000000ul; -static const uint64_t tenTo17 = 100000000000000000ul; +static const uint64 tenTo14 = 100000000000000ull; +static const uint64 tenTo17 = tenTo14 * 1000; + +#if (ULONG_MAX > UINT_MAX) +#define BN_add_word64(bn, word) BN_add_word(bn, word) +#define BN_mul_word64(bn, word) BN_mul_word(bn, word) +#define BN_div_word64(bn, word) BN_div_word(bn, word) +#else +#include "BigNum64.h" +#endif bool STAmount::issuerFromString(uint160& uDstIssuer, const std::string& sIssuer) { @@ -901,9 +910,9 @@ STAmount STAmount::divide(const STAmount& num, const STAmount& den, const uint16 // Compute (numerator * 10^17) / denominator CBigNum v; - if ((BN_add_word(&v, numVal) != 1) || - (BN_mul_word(&v, tenTo17) != 1) || - (BN_div_word(&v, denVal) == ((BN_ULONG) -1))) + if ((BN_add_word64(&v, numVal) != 1) || + (BN_mul_word64(&v, tenTo17) != 1) || + (BN_div_word64(&v, denVal) == ((uint64) -1))) { throw std::runtime_error("internal bn error"); } @@ -911,7 +920,7 @@ STAmount STAmount::divide(const STAmount& num, const STAmount& den, const uint16 // 10^16 <= quotient <= 10^18 assert(BN_num_bytes(&v) <= 64); - return STAmount(uCurrencyID, uIssuerID, v.getulong() + 5, + return STAmount(uCurrencyID, uIssuerID, v.getuint64() + 5, numOffset - denOffset - 17, num.mIsNegative != den.mIsNegative); } @@ -924,9 +933,9 @@ STAmount STAmount::multiply(const STAmount& v1, const STAmount& v2, const uint16 { uint64 minV = (v1.getSNValue() < v2.getSNValue()) ? v1.getSNValue() : v2.getSNValue(); uint64 maxV = (v1.getSNValue() < v2.getSNValue()) ? v2.getSNValue() : v1.getSNValue(); - if (minV > 3000000000) // sqrt(cMaxNative) + if (minV > 3000000000ull) // sqrt(cMaxNative) throw std::runtime_error("Native value overflow"); - if (((maxV >> 32) * minV) > 2095475792) // cMaxNative / 2^32 + if (((maxV >> 32) * minV) > 2095475792ull) // cMaxNative / 2^32 throw std::runtime_error("Native value overflow"); return STAmount(v1.getFName(), minV * maxV); } @@ -955,9 +964,9 @@ STAmount STAmount::multiply(const STAmount& v1, const STAmount& v2, const uint16 // Compute (numerator * denominator) / 10^14 with rounding // 10^16 <= result <= 10^18 CBigNum v; - if ((BN_add_word(&v, value1) != 1) || - (BN_mul_word(&v, value2) != 1) || - (BN_div_word(&v, tenTo14) == ((BN_ULONG) -1))) + if ((BN_add_word64(&v, value1) != 1) || + (BN_mul_word64(&v, value2) != 1) || + (BN_div_word64(&v, tenTo14) == ((uint64) -1))) { throw std::runtime_error("internal bn error"); } @@ -965,7 +974,7 @@ STAmount STAmount::multiply(const STAmount& v1, const STAmount& v2, const uint16 // 10^16 <= product <= 10^18 assert(BN_num_bytes(&v) <= 64); - return STAmount(uCurrencyID, uIssuerID, v.getulong() + 7, offset1 + offset2 + 14, + return STAmount(uCurrencyID, uIssuerID, v.getuint64() + 7, offset1 + offset2 + 14, v1.mIsNegative != v2.mIsNegative); } @@ -1119,13 +1128,13 @@ uint64 STAmount::muldiv(uint64 a, uint64 b, uint64 c) if ((a == 0) || (b == 0)) return 0; CBigNum v; - if ((BN_add_word(&v, a * 10 + 5) != 1) || - (BN_mul_word(&v, b * 10 + 5) != 1) || - (BN_div_word(&v, c) == ((BN_ULONG) -1)) || - (BN_div_word(&v, 100) == ((BN_ULONG) -1))) + if ((BN_add_word64(&v, a * 10 + 5) != 1) || + (BN_mul_word64(&v, b * 10 + 5) != 1) || + (BN_div_word64(&v, c) == ((uint64) -1)) || + (BN_div_word64(&v, 100) == ((uint64) -1))) throw std::runtime_error("muldiv error"); - return v.getulong(); + return v.getuint64(); } uint64 STAmount::convertToDisplayAmount(const STAmount& internalAmount, uint64 totalNow, uint64 totalInit) @@ -1239,7 +1248,6 @@ BOOST_AUTO_TEST_CASE( NativeCurrency_test ) { STAmount zero, one(1), hundred(100); - if (sizeof(BN_ULONG) < (64 / 8)) BOOST_FAIL("BN too small"); if (serdes(zero) != zero) BOOST_FAIL("STAmount fail"); if (serdes(one) != one) BOOST_FAIL("STAmount fail"); if (serdes(hundred) != hundred) BOOST_FAIL("STAmount fail"); @@ -1385,13 +1393,13 @@ BOOST_AUTO_TEST_CASE( CustomCurrency_test ) if (STAmount(CURRENCY_ONE, ACCOUNT_ONE, 31,-2).getText() != "0.31") BOOST_FAIL("STAmount fail"); if (STAmount::multiply(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 20), STAmount(3), CURRENCY_ONE, ACCOUNT_ONE).getText() != "60") - BOOST_FAIL("STAmount multiply fail"); + BOOST_FAIL("STAmount multiply fail 1"); if (STAmount::multiply(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 20), STAmount(3), uint160(), ACCOUNT_XRP).getText() != "60") - BOOST_FAIL("STAmount multiply fail"); + BOOST_FAIL("STAmount multiply fail 2"); if (STAmount::multiply(STAmount(20), STAmount(3), CURRENCY_ONE, ACCOUNT_ONE).getText() != "60") - BOOST_FAIL("STAmount multiply fail"); + BOOST_FAIL("STAmount multiply fail 3"); if (STAmount::multiply(STAmount(20), STAmount(3), uint160(), ACCOUNT_XRP).getText() != "60") - BOOST_FAIL("STAmount multiply fail"); + BOOST_FAIL("STAmount multiply fail 4"); if (STAmount::divide(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 60), STAmount(3), CURRENCY_ONE, ACCOUNT_ONE).getText() != "20") { cLog(lsFATAL) << "60/3 = " << @@ -1466,25 +1474,39 @@ static void mulTest(int a, int b) BOOST_AUTO_TEST_CASE( CurrencyMulDivTests ) { + CBigNum b; + for (int i = 0; i < 16; ++i) + { + uint64 r = rand(); + r <<= 32; + r |= rand(); + b.setuint64(r); + if (b.getuint64() != r) + { + cLog(lsFATAL) << r << " != " << b.getuint64() << " " << b.ToString(16); + BOOST_FAIL("setull64/getull64 failure"); + } + } + // Test currency multiplication and division operations such as // convertToDisplayAmount, convertToInternalAmount, getRate, getClaimed, and getNeeded - if (STAmount::getRate(STAmount(1), STAmount(10)) != (((100ul-14)<<(64-8))|1000000000000000ul)) - BOOST_FAIL("STAmount getRate fail"); - if (STAmount::getRate(STAmount(10), STAmount(1)) != (((100ul-16)<<(64-8))|1000000000000000ul)) - BOOST_FAIL("STAmount getRate fail"); - if (STAmount::getRate(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 1), STAmount(CURRENCY_ONE, ACCOUNT_ONE, 10)) != (((100ul-14)<<(64-8))|1000000000000000ul)) - BOOST_FAIL("STAmount getRate fail"); - if (STAmount::getRate(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 10), STAmount(CURRENCY_ONE, ACCOUNT_ONE, 1)) != (((100ul-16)<<(64-8))|1000000000000000ul)) - BOOST_FAIL("STAmount getRate fail"); - if (STAmount::getRate(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 1), STAmount(10)) != (((100ul-14)<<(64-8))|1000000000000000ul)) - BOOST_FAIL("STAmount getRate fail"); - if (STAmount::getRate(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 10), STAmount(1)) != (((100ul-16)<<(64-8))|1000000000000000ul)) - BOOST_FAIL("STAmount getRate fail"); - if (STAmount::getRate(STAmount(1), STAmount(CURRENCY_ONE, ACCOUNT_ONE, 10)) != (((100ul-14)<<(64-8))|1000000000000000ul)) - BOOST_FAIL("STAmount getRate fail"); - if (STAmount::getRate(STAmount(10), STAmount(CURRENCY_ONE, ACCOUNT_ONE, 1)) != (((100ul-16)<<(64-8))|1000000000000000ul)) - BOOST_FAIL("STAmount getRate fail"); + if (STAmount::getRate(STAmount(1), STAmount(10)) != (((100ull-14)<<(64-8))|1000000000000000ull)) + BOOST_FAIL("STAmount getRate fail 1"); + if (STAmount::getRate(STAmount(10), STAmount(1)) != (((100ull-16)<<(64-8))|1000000000000000ull)) + BOOST_FAIL("STAmount getRate fail 2"); + if (STAmount::getRate(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 1), STAmount(CURRENCY_ONE, ACCOUNT_ONE, 10)) != (((100ull-14)<<(64-8))|1000000000000000ull)) + BOOST_FAIL("STAmount getRate fail 3"); + if (STAmount::getRate(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 10), STAmount(CURRENCY_ONE, ACCOUNT_ONE, 1)) != (((100ull-16)<<(64-8))|1000000000000000ull)) + BOOST_FAIL("STAmount getRate fail 4"); + if (STAmount::getRate(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 1), STAmount(10)) != (((100ull-14)<<(64-8))|1000000000000000ull)) + BOOST_FAIL("STAmount getRate fail 5"); + if (STAmount::getRate(STAmount(CURRENCY_ONE, ACCOUNT_ONE, 10), STAmount(1)) != (((100ull-16)<<(64-8))|1000000000000000ull)) + BOOST_FAIL("STAmount getRate fail 6"); + if (STAmount::getRate(STAmount(1), STAmount(CURRENCY_ONE, ACCOUNT_ONE, 10)) != (((100ull-14)<<(64-8))|1000000000000000ull)) + BOOST_FAIL("STAmount getRate fail 7"); + if (STAmount::getRate(STAmount(10), STAmount(CURRENCY_ONE, ACCOUNT_ONE, 1)) != (((100ull-16)<<(64-8))|1000000000000000ull)) + BOOST_FAIL("STAmount getRate fail 8"); roundTest(1, 3, 3); roundTest(2, 3, 9); roundTest(1, 7, 21); roundTest(1, 2, 4); roundTest(3, 9, 18); roundTest(7, 11, 44); diff --git a/src/cpp/ripple/BigNum64.h b/src/cpp/ripple/BigNum64.h new file mode 100644 index 000000000..9150a25ca --- /dev/null +++ b/src/cpp/ripple/BigNum64.h @@ -0,0 +1,22 @@ + +// Support 64-bit word operations on 32-bit platforms + +static int BN_add_word64(BIGNUM *a, uint64 w) +{ + CBigNum bn(w); + return BN_add(a, &bn, a); +} + +static int BN_mul_word64(BIGNUM *a, uint64 w) +{ + CBigNum bn(w); + CAutoBN_CTX ctx; + return BN_mul(a, &bn, a, ctx); +} + +static uint64 BN_div_word64(BIGNUM *a, uint64 w) +{ + CBigNum bn(w); + CAutoBN_CTX ctx; + return (BN_div(a, NULL, a, &bn, ctx) == 1) ? 0 : ((uint64)-1); +} diff --git a/src/cpp/ripple/SerializedObject.cpp b/src/cpp/ripple/SerializedObject.cpp index bc20aaf1a..fc5e710c2 100644 --- a/src/cpp/ripple/SerializedObject.cpp +++ b/src/cpp/ripple/SerializedObject.cpp @@ -1039,7 +1039,7 @@ std::auto_ptr STObject::parseJson(const Json::Value& object, SField::r if (value.isString()) data.push_back(new STUInt32(field, lexical_cast_st(value.asString()))); else if (value.isInt()) - data.push_back(new STUInt32(field, range_check_cast(value.asInt(), 0, 4294967295))); + data.push_back(new STUInt32(field, range_check_cast(value.asInt(), 0, 4294967295u))); else if (value.isUInt()) data.push_back(new STUInt32(field, static_cast(value.asUInt()))); else diff --git a/src/cpp/ripple/base58.h b/src/cpp/ripple/base58.h index 733216faa..e2fa1c367 100644 --- a/src/cpp/ripple/base58.h +++ b/src/cpp/ripple/base58.h @@ -51,7 +51,7 @@ inline std::string EncodeBase58(const unsigned char* pbegin, const unsigned char if (!BN_div(&dv, &rem, &bn, &bn58, pctx)) throw bignum_error("EncodeBase58 : BN_div failed"); bn = dv; - unsigned int c = rem.getulong(); + unsigned int c = rem.getuint(); str += ALPHABET[c]; } @@ -91,7 +91,7 @@ inline bool DecodeBase58(const char* psz, std::vector& vchRet) return false; break; } - bnChar.setulong(p1 - ALPHABET); + bnChar.setuint(p1 - ALPHABET); if (!BN_mul(&bn, &bn, &bn58, pctx)) throw bignum_error("DecodeBase58 : BN_mul failed"); bn += bnChar; diff --git a/src/cpp/ripple/bignum.h b/src/cpp/ripple/bignum.h index a9a08eda2..87e1d892c 100644 --- a/src/cpp/ripple/bignum.h +++ b/src/cpp/ripple/bignum.h @@ -89,7 +89,6 @@ public: CBigNum(unsigned char n) { BN_init(this); setulong(n); } CBigNum(unsigned short n) { BN_init(this); setulong(n); } CBigNum(unsigned int n) { BN_init(this); setulong(n); } - CBigNum(unsigned long n) { BN_init(this); setulong(n); } CBigNum(uint64 n) { BN_init(this); setuint64(n); } explicit CBigNum(uint256 n) { BN_init(this); setuint256(n); } @@ -99,15 +98,9 @@ public: setvch(vch); } - void setulong(unsigned long n) + void setuint(unsigned int n) { - if (!BN_set_word(this, n)) - throw bignum_error("CBigNum conversion from unsigned long : BN_set_word failed"); - } - - unsigned long getulong() const - { - return BN_get_word(this); + setulong(static_cast(n)); } unsigned int getuint() const @@ -159,31 +152,46 @@ public: BN_mpi2bn(pch, p - pch, this); } + uint64 getuint64() const + { +#if (ULONG_MAX > UINT_MAX) + return static_cast(getulong()); +#else + int len = BN_num_bytes(this); + if (len > 9) + throw std::runtime_error("BN getuint64 overflow"); + + unsigned char buf[9]; + memset(buf, 0, sizeof(buf)); + BN_bn2bin(this, buf + 9 - len); + if (buf[0] != 0) + throw std::runtime_error("BN getuint64 overflow"); + + return + static_cast(buf[1]) << 56 | static_cast(buf[2]) << 48 | + static_cast(buf[3]) << 40 | static_cast(buf[4]) << 32 | + static_cast(buf[5]) << 24 | static_cast(buf[6]) << 16 | + static_cast(buf[7]) << 8 | static_cast(buf[8]); +#endif + } + void setuint64(uint64 n) { - unsigned char pch[sizeof(n) + 6]; - unsigned char* p = pch + 4; - bool fLeadingZeroes = true; - for (int i = 0; i < 8; i++) - { - unsigned char c = (n >> 56) & 0xff; - n <<= 8; - if (fLeadingZeroes) - { - if (c == 0) - continue; - if (c & 0x80) - *p++ = 0; - fLeadingZeroes = false; - } - *p++ = c; - } - unsigned int nSize = p - (pch + 4); - pch[0] = (nSize >> 24) & 0xff; - pch[1] = (nSize >> 16) & 0xff; - pch[2] = (nSize >> 8) & 0xff; - pch[3] = (nSize) & 0xff; - BN_mpi2bn(pch, p - pch, this); +#if (ULONG_MAX > UINT_MAX) + setulong(static_cast(n)); +#else + unsigned char buf[9]; + buf[0] = 0; + buf[1] = static_cast((n >> 56) & 0xff); + buf[2] = static_cast((n >> 48) & 0xff); + buf[3] = static_cast((n >> 40) & 0xff); + buf[4] = static_cast((n >> 32) & 0xff); + buf[5] = static_cast((n >> 24) & 0xff); + buf[6] = static_cast((n >> 16) & 0xff); + buf[7] = static_cast((n >> 8) & 0xff); + buf[8] = static_cast((n) & 0xff); + BN_bin2bn(buf, 9, this); +#endif } void setuint256(const uint256& n) @@ -300,7 +308,7 @@ public: if (!BN_div(&dv, &rem, &bn, &bnBase, pctx)) throw bignum_error("CBigNum::ToString() : BN_div failed"); bn = dv; - unsigned int c = rem.getulong(); + unsigned int c = rem.getuint(); str += "0123456789abcdef"[c]; } if (BN_is_negative(this)) @@ -435,6 +443,22 @@ public: friend inline const CBigNum operator-(const CBigNum& a, const CBigNum& b); friend inline const CBigNum operator/(const CBigNum& a, const CBigNum& b); friend inline const CBigNum operator%(const CBigNum& a, const CBigNum& b); + + private: + + // private because the size of an unsigned long varies by platform + + void setulong(unsigned long n) + { + if (!BN_set_word(this, n)) + throw bignum_error("CBigNum conversion from unsigned long : BN_set_word failed"); + } + + unsigned long getulong() const + { + return BN_get_word(this); + } + }; From 8136f98729881c4cd4cab9eb90653d7ce1ced386 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 16 Jan 2013 00:38:20 -0800 Subject: [PATCH 415/525] Cleanups. uint64_t -> uint64 --- src/cpp/ripple/RegularKeySetTransactor.cpp | 2 +- src/cpp/ripple/RegularKeySetTransactor.h | 2 +- src/cpp/ripple/Transactor.cpp | 2 +- src/cpp/ripple/Transactor.h | 2 +- src/cpp/ripple/uint256.h | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/RegularKeySetTransactor.cpp b/src/cpp/ripple/RegularKeySetTransactor.cpp index 0b88bc478..226ee7082 100644 --- a/src/cpp/ripple/RegularKeySetTransactor.cpp +++ b/src/cpp/ripple/RegularKeySetTransactor.cpp @@ -3,7 +3,7 @@ SETUP_LOG(); -uint64_t RegularKeySetTransactor::calculateBaseFee() +uint64 RegularKeySetTransactor::calculateBaseFee() { if ( !(mTxnAccount->getFlags() & lsfPasswordSpent) && (mSigningPubKey.getAccountID() == mTxnAccountID)) diff --git a/src/cpp/ripple/RegularKeySetTransactor.h b/src/cpp/ripple/RegularKeySetTransactor.h index 705a7dbfe..7d2fc53fe 100644 --- a/src/cpp/ripple/RegularKeySetTransactor.h +++ b/src/cpp/ripple/RegularKeySetTransactor.h @@ -2,7 +2,7 @@ class RegularKeySetTransactor : public Transactor { - uint64_t calculateBaseFee(); + uint64 calculateBaseFee(); public: RegularKeySetTransactor(const SerializedTransaction& txn,TransactionEngineParams params, TransactionEngine* engine) : Transactor(txn,params,engine) {} TER checkFee(); diff --git a/src/cpp/ripple/Transactor.cpp b/src/cpp/ripple/Transactor.cpp index a85d63f59..b9ace30fd 100644 --- a/src/cpp/ripple/Transactor.cpp +++ b/src/cpp/ripple/Transactor.cpp @@ -45,7 +45,7 @@ void Transactor::calculateFee() mFeeDue = STAmount(mEngine->getLedger()->scaleFeeLoad(calculateBaseFee())); } -uint64_t Transactor::calculateBaseFee() +uint64 Transactor::calculateBaseFee() { return theConfig.FEE_DEFAULT; } diff --git a/src/cpp/ripple/Transactor.h b/src/cpp/ripple/Transactor.h index c61878634..bce4c4e36 100644 --- a/src/cpp/ripple/Transactor.h +++ b/src/cpp/ripple/Transactor.h @@ -27,7 +27,7 @@ protected: void calculateFee(); // Returns the fee, not scaled for load (Should be in fee units. FIXME) - virtual uint64_t calculateBaseFee(); + virtual uint64 calculateBaseFee(); virtual TER checkSig(); virtual TER doApply()=0; diff --git a/src/cpp/ripple/uint256.h b/src/cpp/ripple/uint256.h index eb74f0f5e..88048bb69 100644 --- a/src/cpp/ripple/uint256.h +++ b/src/cpp/ripple/uint256.h @@ -73,7 +73,7 @@ public: zero(); // Put in least significant bits. - ((uint64_t *) end())[-1] = htobe64(uHost); + ((uint64*) end())[-1] = htobe64(uHost); return *this; } @@ -438,7 +438,7 @@ public: zero(); // Put in least significant bits. - ((uint64_t *) end())[-1] = htobe64(uHost); + ((uint64*) end())[-1] = htobe64(uHost); return *this; } @@ -656,7 +656,7 @@ public: zero(); // Put in least significant bits. - ((uint64_t *) end())[-1] = htobe64(uHost); + ((uint64*) end())[-1] = htobe64(uHost); return *this; } From 32d6e0728ae902f345cb04125aaa483b778838a8 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Wed, 16 Jan 2013 16:17:28 +0100 Subject: [PATCH 416/525] Show a more specific error when entering an invalid command on the CLI RPC. --- src/cpp/ripple/CallRPC.cpp | 2 +- src/cpp/ripple/RPCErr.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 424f64a73..912e093bc 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -535,7 +535,7 @@ Json::Value RPCParser::parseCommand(std::string strMethod, Json::Value jvParams) if (i < 0) { - return rpcError(rpcBAD_SYNTAX); + return rpcError(rpcUNKNOWN_COMMAND); } else if ((commandsA[i].iMinParams >= 0 && jvParams.size() < commandsA[i].iMinParams) || (commandsA[i].iMaxParams >= 0 && jvParams.size() > commandsA[i].iMaxParams)) diff --git a/src/cpp/ripple/RPCErr.cpp b/src/cpp/ripple/RPCErr.cpp index 9ab952080..a40a0cb97 100644 --- a/src/cpp/ripple/RPCErr.cpp +++ b/src/cpp/ripple/RPCErr.cpp @@ -63,7 +63,7 @@ Json::Value rpcError(int iError, Json::Value jvResult) { rpcSRC_ISR_MALFORMED, "srcIsrMalformed", "Source issuer is malformed." }, { rpcSRC_UNCLAIMED, "srcUnclaimed", "Source account is not claimed." }, { rpcTXN_NOT_FOUND, "txnNotFound", "Transaction not found." }, - { rpcUNKNOWN_COMMAND, "unknownCmd", "Unknown command." }, + { rpcUNKNOWN_COMMAND, "unknownCmd", "Unknown method." }, { rpcWRONG_SEED, "wrongSeed", "The regular key does not point as the master key." }, }; From 886dbe998fa9db884f3b7ba1f8ec5c4243c2033f Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Wed, 16 Jan 2013 16:18:48 +0100 Subject: [PATCH 417/525] Add certain database-related files to .gitignore. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c7a5cec4b..69bb5bff7 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,7 @@ tmp # Ignore database directory. db/*.db -db/*.db-journal +db/*.db-* # Ignore obj files Debug/*.* From 1b168aec36e1952b4b040b3159e888a5b9e8b143 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 16 Jan 2013 08:54:29 -0800 Subject: [PATCH 418/525] These functions can be simpler. The bignum binary format does not have X.509 semantics, so no need to use an extra byte. --- src/cpp/ripple/bignum.h | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/cpp/ripple/bignum.h b/src/cpp/ripple/bignum.h index 87e1d892c..d2e4e5549 100644 --- a/src/cpp/ripple/bignum.h +++ b/src/cpp/ripple/bignum.h @@ -158,20 +158,17 @@ public: return static_cast(getulong()); #else int len = BN_num_bytes(this); - if (len > 9) + if (len > 8) throw std::runtime_error("BN getuint64 overflow"); - unsigned char buf[9]; + unsigned char buf[8]; memset(buf, 0, sizeof(buf)); - BN_bn2bin(this, buf + 9 - len); - if (buf[0] != 0) - throw std::runtime_error("BN getuint64 overflow"); - + BN_bn2bin(this, buf + 8 - len); return - static_cast(buf[1]) << 56 | static_cast(buf[2]) << 48 | - static_cast(buf[3]) << 40 | static_cast(buf[4]) << 32 | - static_cast(buf[5]) << 24 | static_cast(buf[6]) << 16 | - static_cast(buf[7]) << 8 | static_cast(buf[8]); + static_cast(buf[0]) << 56 | static_cast(buf[1]) << 48 | + static_cast(buf[2]) << 40 | static_cast(buf[3]) << 32 | + static_cast(buf[4]) << 24 | static_cast(buf[5]) << 16 | + static_cast(buf[6]) << 8 | static_cast(buf[7]); #endif } @@ -180,17 +177,16 @@ public: #if (ULONG_MAX > UINT_MAX) setulong(static_cast(n)); #else - unsigned char buf[9]; - buf[0] = 0; - buf[1] = static_cast((n >> 56) & 0xff); - buf[2] = static_cast((n >> 48) & 0xff); - buf[3] = static_cast((n >> 40) & 0xff); - buf[4] = static_cast((n >> 32) & 0xff); - buf[5] = static_cast((n >> 24) & 0xff); - buf[6] = static_cast((n >> 16) & 0xff); - buf[7] = static_cast((n >> 8) & 0xff); - buf[8] = static_cast((n) & 0xff); - BN_bin2bn(buf, 9, this); + unsigned char buf[8]; + buf[0] = static_cast((n >> 56) & 0xff); + buf[1] = static_cast((n >> 48) & 0xff); + buf[2] = static_cast((n >> 40) & 0xff); + buf[3] = static_cast((n >> 32) & 0xff); + buf[4] = static_cast((n >> 24) & 0xff); + buf[5] = static_cast((n >> 16) & 0xff); + buf[6] = static_cast((n >> 8) & 0xff); + buf[7] = static_cast((n) & 0xff); + BN_bin2bn(buf, 8, this); #endif } From c0e728c310ebe60cd3534ddf720e1f1a61cdf357 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Wed, 16 Jan 2013 19:09:26 +0100 Subject: [PATCH 419/525] Amount.product_human and Amount.ratio_human need to canonicalize. --- src/js/amount.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/js/amount.js b/src/js/amount.js index 0191ee6b1..0cef359a5 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -778,6 +778,7 @@ Amount.prototype.ratio_human = function (denominator) { if (denominator._is_native) { numerator = numerator.clone(); numerator._value = numerator._value.multiply(consts.bi_xns_unit); + numerator.canonicalize(); } return numerator.divide(denominator); @@ -812,6 +813,7 @@ Amount.prototype.product_human = function (factor) { // See also Amount#ratio_human. if (factor._is_native) { product._value = product._value.divide(consts.bi_xns_unit); + product.canonicalize(); } return product; From 503e9a7ddcab190426ea7a2da5f692376bdfe21d Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 16 Jan 2013 15:03:36 -0800 Subject: [PATCH 420/525] More specific RPC error reporting. --- src/cpp/ripple/RPCErr.cpp | 1 + src/cpp/ripple/RPCErr.h | 1 + src/cpp/ripple/RPCHandler.cpp | 4 ++-- src/cpp/ripple/RPCHandler.h | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/RPCErr.cpp b/src/cpp/ripple/RPCErr.cpp index 9ab952080..5d7e3e163 100644 --- a/src/cpp/ripple/RPCErr.cpp +++ b/src/cpp/ripple/RPCErr.cpp @@ -21,6 +21,7 @@ Json::Value rpcError(int iError, Json::Value jvResult) { rpcBAD_BLOB, "badBlob", "Blob must be a non-empty hex string." }, { rpcBAD_SEED, "badSeed", "Disallowed seed." }, { rpcBAD_SYNTAX, "badSyntax", "Syntax error." }, + { rpcCOMMAND_MISSING, "commandMissing", "Missing command entry." }, { rpcDST_ACT_MALFORMED, "dstActMalformed", "Destination account is malformed." }, { rpcDST_ACT_MISSING, "dstActMissing", "Destination account does not exists." }, { rpcDST_AMT_MALFORMED, "dstAmtMalformed", "Destination amount/currency/issuer is malformed." }, diff --git a/src/cpp/ripple/RPCErr.h b/src/cpp/ripple/RPCErr.h index fa62c0e62..0057c6af2 100644 --- a/src/cpp/ripple/RPCErr.h +++ b/src/cpp/ripple/RPCErr.h @@ -45,6 +45,7 @@ enum { rpcQUALITY_MALFORMED, rpcBAD_BLOB, rpcBAD_SEED, + rpcCOMMAND_MISSING, rpcDST_ACT_MALFORMED, rpcDST_ACT_MISSING, rpcDST_AMT_MALFORMED, diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 2948b52e2..9f4efee10 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2553,10 +2553,10 @@ Json::Value RPCHandler::doInternal(Json::Value jvRequest) return RPCInternalHandler::runHandler(jvRequest["internal_command"].asString(), jvRequest["params"]); } -Json::Value RPCHandler::doCommand(Json::Value& jvRequest, int iRole) +Json::Value RPCHandler::doCommand(const Json::Value& jvRequest, int iRole) { if (!jvRequest.isMember("command")) - return rpcError(rpcINVALID_PARAMS); + return rpcError(rpcCOMMAND_MISSING); std::string strCommand = jvRequest["command"].asString(); diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index 5c3365e01..3c79a7363 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -115,7 +115,7 @@ public: RPCHandler(NetworkOPs* netOps); RPCHandler(NetworkOPs* netOps, InfoSub* infoSub); - Json::Value doCommand(Json::Value& jvRequest, int role); + Json::Value doCommand(const Json::Value& jvRequest, int role); Json::Value doRpcCommand(const std::string& strCommand, Json::Value& jvParams, int iRole); }; From 4982ffdf74478c5a3329e37e1f9c4cf7c805cd1a Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 16 Jan 2013 15:05:44 -0800 Subject: [PATCH 421/525] Add support for calling RPC command at startup from config file. --- src/cpp/ripple/Application.cpp | 1 + src/cpp/ripple/CallRPC.cpp | 8 ++++++-- src/cpp/ripple/Config.cpp | 29 +++++++++++++++++++++++------ src/cpp/ripple/Config.h | 7 +++++-- src/cpp/ripple/main.cpp | 18 +++++++++++++++++- 5 files changed, 52 insertions(+), 11 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index 5be04fc9b..ec034eedf 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -18,6 +18,7 @@ #include SETUP_LOG(); + LogPartition TaggedCachePartition("TaggedCache"); Application* theApp = NULL; diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 424f64a73..ae963cd7d 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -13,6 +14,7 @@ #include "../json/value.h" #include "../json/reader.h" +#include "Application.h" #include "RPC.h" #include "Log.h" #include "RPCErr.h" @@ -54,8 +56,10 @@ std::string EncodeBase64(const std::string& s) Json::Value RPCParser::parseAsIs(const Json::Value& jvParams) { Json::Value v(Json::objectValue); + if (jvParams.isArray() && (jvParams.size() > 0)) v["params"] = jvParams; + return v; } @@ -656,7 +660,7 @@ int commandLineRPC(const std::vector& vCmd) return nRet; } -Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strPath, const std::string& strMethod, const Json::Value& params) +Json::Value callRPC(const std::string& strIp, const int iPort, const std::string& strUsername, const std::string& strPassword, const std::string& strPath, const std::string& strMethod, const Json::Value& jvParams) { // Connect to localhost if (!theConfig.QUIET) @@ -684,7 +688,7 @@ Json::Value callRPC(const std::string& strIp, const int iPort, const std::string // Log(lsDEBUG) << "requesting" << std::endl; // Send request - std::string strRequest = JSONRPCRequest(strMethod, params, Json::Value(1)); + std::string strRequest = JSONRPCRequest(strMethod, jvParams, Json::Value(1)); // cLog(lsDEBUG) << "send request " << strMethod << " : " << strRequest << std::endl; std::string strPost = createHTTPPost(strPath, strRequest, mapRequestHeaders); diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index 129f25965..a886e27fa 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -1,17 +1,18 @@ // // TODO: Check permissions on config file before using it. // +#include +#include +#include +#include +#include +#include + #include "Config.h" #include "utils.h" #include "HashPrefixes.h" -#include -#include -#include -#include -#include - #define SECTION_ACCOUNT_PROBE_MAX "account_probe_max" #define SECTION_CLUSTER_NODES "cluster_nodes" #define SECTION_DATABASE_PATH "database_path" @@ -36,6 +37,7 @@ #define SECTION_RPC_ALLOW_REMOTE "rpc_allow_remote" #define SECTION_RPC_IP "rpc_ip" #define SECTION_RPC_PORT "rpc_port" +#define SECTION_RPC_STARTUP "rpc_startup" #define SECTION_SNTP "sntp_servers" #define SECTION_VALIDATORS_FILE "validators_file" #define SECTION_VALIDATION_QUORUM "validation_quorum" @@ -268,6 +270,21 @@ void Config::load() SNTP_SERVERS = *smtTmp; } + smtTmp = sectionEntries(secConfig, SECTION_RPC_STARTUP); + if (smtTmp) + { + BOOST_FOREACH(const std::string& strJson, *smtTmp) + { + Json::Reader jrReader; + Json::Value jvCommand; + + if (!jrReader.parse(strJson, jvCommand)) + throw std::runtime_error(boost::str(boost::format("Couldn't parse ["SECTION_RPC_STARTUP"] command: %s") % strJson)); + + RPC_STARTUP.push_back(jvCommand); + } + } + if (sectionSingleB(secConfig, SECTION_DATABASE_PATH, DATABASE_PATH)) DATA_DIR = DATABASE_PATH; diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index 92f83c8db..b24df2ed1 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -1,13 +1,15 @@ #ifndef __CONFIG__ #define __CONFIG__ +#include +#include + #include "types.h" #include "RippleAddress.h" #include "ParseSection.h" #include "SerializedTypes.h" -#include -#include +#include "../json/value.h" #define ENABLE_INSECURE 0 // 1, to enable unnecessary features. @@ -110,6 +112,7 @@ public: std::string RPC_USER; std::string RPC_PASSWORD; bool RPC_ALLOW_REMOTE; + std::vector RPC_STARTUP; // Validation RippleAddress VALIDATION_SEED, VALIDATION_PUB, VALIDATION_PRIV; diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index d9e828145..e0646428f 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -9,8 +9,9 @@ #include "Application.h" #include "CallRPC.h" #include "Config.h" -#include "utils.h" #include "Log.h" +#include "RPCHandler.h" +#include "utils.h" namespace po = boost::program_options; @@ -26,6 +27,21 @@ void setupServer() void startServer() { + // + // Execute start up rpc commands. + // + BOOST_FOREACH(const Json::Value& jvCommand, theConfig.RPC_STARTUP) + { + if (!theConfig.QUIET) + cerr << "Startup RPC: " << jvCommand << endl; + + RPCHandler rhHandler(&theApp->getOPs()); + + std::cerr << "Result: " + << rhHandler.doCommand(jvCommand, RPCHandler::ADMIN) + << std::endl; + } + theApp->run(); // Blocks till we get a stop RPC. } From 8069ac8ab77986c15fd3d225ae98003852fe17f6 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 16 Jan 2013 15:13:11 -0800 Subject: [PATCH 422/525] Document [rpc_startup] in rippled-example.cfg. --- rippled-example.cfg | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rippled-example.cfg b/rippled-example.cfg index 94164faab..54191e8b5 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -172,6 +172,11 @@ # [database_path]: # Full path of database directory. # +# [rpc_startup]: +# Specify a list of RPC commands to run at startup. +# +# Example: { "command" : "server_info" } +# # Allow other peers to connect to this server. [peer_ip] From 97716977c93a53688f9be972649c1a95d7cd7f11 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 16 Jan 2013 15:22:29 -0800 Subject: [PATCH 423/525] Report an error if RPC subscribe specifies no streams. --- src/cpp/ripple/RPCHandler.cpp | 53 ++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 9f4efee10..bbab25921 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2347,40 +2347,47 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) if (jvRequest.isMember("streams")) { - for (Json::Value::iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++) + if (jvRequest["streams"].empty()) { - if ((*it).isString()) + jvResult["error"] = "noStreams"; + } + else + { + for (Json::Value::iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++) { - std::string streamName=(*it).asString(); - - if (streamName=="server") + if ((*it).isString()) { - mNetOps->subServer(ispSub, jvResult); + std::string streamName=(*it).asString(); - } - else if (streamName=="ledger") - { - mNetOps->subLedger(ispSub, jvResult); + if (streamName=="server") + { + mNetOps->subServer(ispSub, jvResult); - } - else if (streamName=="transactions") - { - mNetOps->subTransactions(ispSub); + } + else if (streamName=="ledger") + { + mNetOps->subLedger(ispSub, jvResult); - } - else if (streamName=="rt_transactions") - { - mNetOps->subRTTransactions(ispSub); + } + else if (streamName=="transactions") + { + mNetOps->subTransactions(ispSub); + + } + else if (streamName=="rt_transactions") + { + mNetOps->subRTTransactions(ispSub); + } + else + { + jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName); + } } else { - jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName); + jvResult["error"] = "malformedStream"; } } - else - { - jvResult["error"] = "malformedSteam"; - } } } From 29ead4e3e0b6be1c258d635b784bdafc90061279 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 16 Jan 2013 19:30:21 -0800 Subject: [PATCH 424/525] UT: Add ledger_close to testutils. --- test/testutils.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/testutils.js b/test/testutils.js index 399a6f513..c0775c1e4 100644 --- a/test/testutils.js +++ b/test/testutils.js @@ -213,6 +213,10 @@ var credit_limits = function (remote, balances, callback) { }); }; +var ledger_close = function (remote, callback) { + remote.once('ledger_closed', function (m) { callback(); }).ledger_accept(); +} + var payment = function (remote, src, dst, amount, callback) { assert(5 === arguments.length); @@ -407,14 +411,14 @@ var verify_owner_counts = function (remote, counts, callback) { }; exports.account_dump = account_dump; - exports.build_setup = build_setup; +exports.build_teardown = build_teardown; exports.create_accounts = create_accounts; exports.credit_limit = credit_limit; exports.credit_limits = credit_limits; +exports.ledger_close = ledger_close; exports.payment = payment; exports.payments = payments; -exports.build_teardown = build_teardown; exports.transfer_rate = transfer_rate; exports.verify_balance = verify_balance; exports.verify_balances = verify_balances; From 2775d76df3b7935731d25fa6891e6d848ab6b816 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 16 Jan 2013 19:48:22 -0800 Subject: [PATCH 425/525] Limit length of Domain and MessageKey fields. --- src/cpp/ripple/AccountSetTransactor.cpp | 28 ++++++++++++++++++------- src/cpp/ripple/Config.h | 3 +++ src/cpp/ripple/TransactionErr.cpp | 2 ++ src/cpp/ripple/TransactionErr.h | 2 ++ 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/AccountSetTransactor.cpp b/src/cpp/ripple/AccountSetTransactor.cpp index 88c48b246..7834dd1bd 100644 --- a/src/cpp/ripple/AccountSetTransactor.cpp +++ b/src/cpp/ripple/AccountSetTransactor.cpp @@ -1,4 +1,5 @@ #include "AccountSetTransactor.h" +#include "Config.h" SETUP_LOG(); @@ -94,15 +95,22 @@ TER AccountSetTransactor::doApply() // MessageKey // - if (!mTxn.isFieldPresent(sfMessageKey)) + if (mTxn.isFieldPresent(sfMessageKey)) { - nothing(); - } - else - { - cLog(lsINFO) << "AccountSet: set message key"; + std::vector vucPublic = mTxn.getFieldVL(sfMessageKey); - mTxnAccount->setFieldVL(sfMessageKey, mTxn.getFieldVL(sfMessageKey)); + if (vucPublic.size() > PUBLIC_BYTES_MAX) + { + cLog(lsINFO) << "AccountSet: message key too long"; + + return telBAD_PUBLIC_KEY; + } + else + { + cLog(lsINFO) << "AccountSet: set message key"; + + mTxnAccount->setFieldVL(sfMessageKey, vucPublic); + } } // @@ -119,6 +127,12 @@ TER AccountSetTransactor::doApply() mTxnAccount->makeFieldAbsent(sfDomain); } + else if (vucDomain.size() > DOMAIN_BYTES_MAX) + { + cLog(lsINFO) << "AccountSet: domain too long"; + + return telBAD_DOMAIN; + } else { cLog(lsINFO) << "AccountSet: set domain"; diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index b24df2ed1..114414037 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -28,6 +28,9 @@ #define DEFAULT_VALIDATORS_SITE "" #define VALIDATORS_FILE_NAME "validators.txt" +const int DOMAIN_BYTES_MAX = 256; +const int PUBLIC_BYTES_MAX = 2048; // Maximum bytes for an account public key. + const int SYSTEM_PEER_PORT = 6561; const int SYSTEM_WEBSOCKET_PORT = 6562; const int SYSTEM_WEBSOCKET_PUBLIC_PORT = 6563; // XXX Going away. diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index dcf5f2df2..d9a55901f 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -35,7 +35,9 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { tefPAST_SEQ, "tefPAST_SEQ", "This sequence number has already past." }, { telLOCAL_ERROR, "telLOCAL_ERROR", "Local failure." }, + { telBAD_DOMAIN, "telBAD_DOMAIN", "Domain too long." }, { telBAD_PATH_COUNT, "telBAD_PATH_COUNT", "Malformed: Too many paths." }, + { telBAD_PUBLIC_KEY, "telBAD_PUBLIC_KEY", "Public key too long." }, { telINSUF_FEE_P, "telINSUF_FEE_P", "Fee insufficient." }, { temMALFORMED, "temMALFORMED", "Malformed transaction." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 7fb0e3215..e87ac3ead 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -13,7 +13,9 @@ enum TER // aka TransactionEngineResult // - Not forwarded // - No fee check telLOCAL_ERROR = -399, + telBAD_DOMAIN, telBAD_PATH_COUNT, + telBAD_PUBLIC_KEY, telINSUF_FEE_P, // -299 .. -200: M Malformed (bad signature) From c0a630a1962d632ec3af5ac04e49317b9411e5e6 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 16 Jan 2013 22:42:10 -0800 Subject: [PATCH 426/525] Allow RPC subscribe with no streams. --- src/cpp/ripple/RPCHandler.cpp | 53 +++++++++++++++-------------------- 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index bbab25921..41c9c6062 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2347,47 +2347,40 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) if (jvRequest.isMember("streams")) { - if (jvRequest["streams"].empty()) + for (Json::Value::iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++) { - jvResult["error"] = "noStreams"; - } - else - { - for (Json::Value::iterator it = jvRequest["streams"].begin(); it != jvRequest["streams"].end(); it++) + if ((*it).isString()) { - if ((*it).isString()) + std::string streamName=(*it).asString(); + + if (streamName=="server") { - std::string streamName=(*it).asString(); + mNetOps->subServer(ispSub, jvResult); - if (streamName=="server") - { - mNetOps->subServer(ispSub, jvResult); + } + else if (streamName=="ledger") + { + mNetOps->subLedger(ispSub, jvResult); - } - else if (streamName=="ledger") - { - mNetOps->subLedger(ispSub, jvResult); + } + else if (streamName=="transactions") + { + mNetOps->subTransactions(ispSub); - } - else if (streamName=="transactions") - { - mNetOps->subTransactions(ispSub); - - } - else if (streamName=="rt_transactions") - { - mNetOps->subRTTransactions(ispSub); - } - else - { - jvResult["error"] = str(boost::format("Unknown stream: %s") % streamName); - } + } + else if (streamName=="rt_transactions") + { + mNetOps->subRTTransactions(ispSub); } else { - jvResult["error"] = "malformedStream"; + jvResult["error"] = "unknownStream"; } } + else + { + jvResult["error"] = "malformedStream"; + } } } From 8da284705f1b2a263610a40e8cfb94f5927ce724 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 17 Jan 2013 10:46:12 -0800 Subject: [PATCH 427/525] Fix 'getAffectedAccount' -- logic was totally wrong. You can't get this from the transaction because which accounts a transaction affects depends on things like which offers it winds up taking. And you can't build it with the metadata because you don't always build the metadata locally -- consider fetching a ledger after a network split. The only rational way to do this is to build the affected account vector from the metadata. --- src/cpp/ripple/Ledger.cpp | 18 +++++--- src/cpp/ripple/SHAMap.cpp | 2 +- src/cpp/ripple/SerializedTransaction.cpp | 4 +- src/cpp/ripple/SerializedTransaction.h | 2 +- src/cpp/ripple/TransactionMeta.cpp | 54 ++++++++++++++++++------ src/cpp/ripple/TransactionMeta.h | 2 +- 6 files changed, 58 insertions(+), 24 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 273d76515..9745e7ba8 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -403,17 +403,19 @@ void Ledger::saveAcceptedLedger(bool fromConsensus, LoadEvent::pointer event) assert(type == SHAMapTreeNode::tnTRANSACTION_MD); SerializerIterator sit(item->peekSerializer()); Serializer rawTxn(sit.getVL()); - std::string escMeta(sqlEscape(sit.getVL())); + Serializer rawMeta(sit.getVL()); + std::string escMeta(sqlEscape(rawMeta.peekData())); SerializerIterator txnIt(rawTxn); SerializedTransaction txn(txnIt); assert(txn.getTransactionID() == item->getTag()); + TransactionMetaSet meta(item->getTag(), mLedgerSeq, rawMeta.peekData()); // Make sure transaction is in AccountTransactions. if (!SQL_EXISTS(db, boost::str(AcctTransExists % item->getTag().GetHex()))) { // Transaction not in AccountTransactions - std::vector accts = txn.getAffectedAccounts(); + std::vector accts = meta.getAffectedAccounts(); std::string sql = "INSERT INTO AccountTransactions (TransID, Account, LedgerSeq) VALUES "; bool first = true; @@ -620,10 +622,13 @@ Json::Value Ledger::getJson(int options) { Json::Value ledger(Json::objectValue); - boost::recursive_mutex::scoped_lock sl(mLock); - ledger["parentHash"] = mParentHash.GetHex(); - bool full = (options & LEDGER_JSON_FULL) != 0; + + boost::recursive_mutex::scoped_lock sl(mLock); + + ledger["parentHash"] = mParentHash.GetHex(); + ledger["seqNum"] = boost::lexical_cast(mLedgerSeq); + if(mClosed || full) { if (mClosed) @@ -646,6 +651,7 @@ Json::Value Ledger::getJson(int options) } else ledger["closed"] = false; + if (mTransactionMap && (full || ((options & LEDGER_JSON_DUMP_TXRP) != 0))) { Json::Value txns(Json::arrayValue); @@ -685,6 +691,7 @@ Json::Value Ledger::getJson(int options) } ledger["transactions"] = txns; } + if (mAccountStateMap && (full || ((options & LEDGER_JSON_DUMP_STATE) != 0))) { Json::Value state(Json::arrayValue); @@ -702,7 +709,6 @@ Json::Value Ledger::getJson(int options) } ledger["accountState"] = state; } - ledger["seqNum"] = boost::lexical_cast(mLedgerSeq); return ledger; } diff --git a/src/cpp/ripple/SHAMap.cpp b/src/cpp/ripple/SHAMap.cpp index e549b9325..15355ed1d 100644 --- a/src/cpp/ripple/SHAMap.cpp +++ b/src/cpp/ripple/SHAMap.cpp @@ -717,7 +717,7 @@ SHAMapTreeNode::pointer SHAMap::fetchNodeExternal(const SHAMapNode& id, const ui try { SHAMapTreeNode::pointer ret = - boost::make_shared(id, obj->getData(), mSeq - 1, snfPREFIX, hash); + boost::make_shared(id, obj->getData(), mSeq, snfPREFIX, hash); if (id != *ret) { cLog(lsFATAL) << "id:" << id << ", got:" << *ret; diff --git a/src/cpp/ripple/SerializedTransaction.cpp b/src/cpp/ripple/SerializedTransaction.cpp index 8d05b85a8..e7b1ef7e5 100644 --- a/src/cpp/ripple/SerializedTransaction.cpp +++ b/src/cpp/ripple/SerializedTransaction.cpp @@ -78,8 +78,8 @@ std::string SerializedTransaction::getText() const return STObject::getText(); } -std::vector SerializedTransaction::getAffectedAccounts() const -{ // FIXME: This needs to be thought out better +std::vector SerializedTransaction::getMentionedAccounts() const +{ std::vector accounts; BOOST_FOREACH(const SerializedType& it, peekData()) diff --git a/src/cpp/ripple/SerializedTransaction.h b/src/cpp/ripple/SerializedTransaction.h index c026d0220..5294532f6 100644 --- a/src/cpp/ripple/SerializedTransaction.h +++ b/src/cpp/ripple/SerializedTransaction.h @@ -60,7 +60,7 @@ public: uint32 getSequence() const { return getFieldU32(sfSequence); } void setSequence(uint32 seq) { return setFieldU32(sfSequence, seq); } - std::vector getAffectedAccounts() const; + std::vector getMentionedAccounts() const; uint256 getTransactionID() const; diff --git a/src/cpp/ripple/TransactionMeta.cpp b/src/cpp/ripple/TransactionMeta.cpp index 6fc6e85bc..77886c163 100644 --- a/src/cpp/ripple/TransactionMeta.cpp +++ b/src/cpp/ripple/TransactionMeta.cpp @@ -7,6 +7,9 @@ #include #include "Log.h" +#include "SerializedObject.h" + +SETUP_LOG(); TransactionMetaSet::TransactionMetaSet(const uint256& txid, uint32 ledger, const std::vector& vec) : mTransactionID(txid), mLedger(ledger), mNodes(sfAffectedNodes, 32) @@ -52,33 +55,58 @@ void TransactionMetaSet::setAffectedNode(const uint256& node, SField::ref type, obj.setFieldU16(sfLedgerEntryType, nodeType); } -/* +static void addIfUnique(std::vector& vector, const RippleAddress& address) +{ + BOOST_FOREACH(const RippleAddress& a, vector) + if (a == address) + return; + vector.push_back(address); +} + std::vector TransactionMetaSet::getAffectedAccounts() { std::vector accounts; + accounts.reserve(10); - BOOST_FOREACH(STObject& object, mNodes.getValue() ) + BOOST_FOREACH(const STObject& it, mNodes) { - const STAccount* sa = dynamic_cast(&it); - if (sa != NULL) + int index = it.getFieldIndex((it.getFName() == sfCreatedNode) ? sfNewFields : sfFinalFields); + if (index != -1) { - bool found = false; - RippleAddress na = sa->getValueNCA(); - BOOST_FOREACH(const RippleAddress& it, accounts) + const STObject *inner = dynamic_cast(&it.peekAtIndex(index)); + if (inner) { - if (it == na) + BOOST_FOREACH(const SerializedType& field, inner->peekData()) { - found = true; - break; + const STAccount* sa = dynamic_cast(&it); + if (sa) + addIfUnique(accounts, sa->getValueNCA()); + else if ((field.getFName() == sfLowLimit) || (field.getFName() == sfHighLimit)) + { + const STAmount* lim = dynamic_cast(&field); + if (lim != NULL) + { + uint160 issuer = lim->getIssuer(); + if (issuer.isNonZero()) + { + RippleAddress na; + na.setAccountID(issuer); + addIfUnique(accounts, na); + } + } + else + { + cLog(lsFATAL) << "limit is not amount " << field.getJson(0); + } + } } } - if (!found) - accounts.push_back(na); + else assert(false); } } + return accounts; } -*/ STObject& TransactionMetaSet::getAffectedNode(SLE::ref node, SField::ref type) { diff --git a/src/cpp/ripple/TransactionMeta.h b/src/cpp/ripple/TransactionMeta.h index 3b8ae25e3..5386b96b8 100644 --- a/src/cpp/ripple/TransactionMeta.h +++ b/src/cpp/ripple/TransactionMeta.h @@ -49,7 +49,7 @@ public: STObject& getAffectedNode(SLE::ref node, SField::ref type); // create if needed STObject& getAffectedNode(const uint256&); const STObject& peekAffectedNode(const uint256&) const; - //std::vector getAffectedAccounts(); + std::vector getAffectedAccounts(); Json::Value getJson(int p) const { return getAsObject().getJson(p); } From 65a1d00751728e802952ff26c0017530a18d993e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 17 Jan 2013 10:54:37 -0800 Subject: [PATCH 428/525] Remove dead PubKeyCache code. --- newcoin.vcxproj | 2 - newcoin.vcxproj.filters | 6 --- ripple2010.vcxproj | 2 - ripple2010.vcxproj.filters | 6 --- src/cpp/ripple/DBInit.cpp | 4 -- src/cpp/ripple/PubKeyCache.cpp | 70 ---------------------------------- src/cpp/ripple/PubKeyCache.h | 25 ------------ 7 files changed, 115 deletions(-) delete mode 100644 src/cpp/ripple/PubKeyCache.cpp delete mode 100644 src/cpp/ripple/PubKeyCache.h diff --git a/newcoin.vcxproj b/newcoin.vcxproj index 737324e65..72e758a47 100644 --- a/newcoin.vcxproj +++ b/newcoin.vcxproj @@ -146,7 +146,6 @@ - @@ -253,7 +252,6 @@ - diff --git a/newcoin.vcxproj.filters b/newcoin.vcxproj.filters index 796adfdd7..365cb7109 100644 --- a/newcoin.vcxproj.filters +++ b/newcoin.vcxproj.filters @@ -174,9 +174,6 @@ Source Files - - Source Files - Source Files @@ -509,9 +506,6 @@ Header Files - - Header Files - Header Files diff --git a/ripple2010.vcxproj b/ripple2010.vcxproj index a7f8d1599..18e3ea1d2 100644 --- a/ripple2010.vcxproj +++ b/ripple2010.vcxproj @@ -144,7 +144,6 @@ - @@ -244,7 +243,6 @@ - diff --git a/ripple2010.vcxproj.filters b/ripple2010.vcxproj.filters index 2ac1549e3..77ef08370 100644 --- a/ripple2010.vcxproj.filters +++ b/ripple2010.vcxproj.filters @@ -171,9 +171,6 @@ Source Files - - Source Files - Source Files @@ -503,9 +500,6 @@ Header Files - - Header Files - Header Files diff --git a/src/cpp/ripple/DBInit.cpp b/src/cpp/ripple/DBInit.cpp index 4365eaad2..b16ba0f41 100644 --- a/src/cpp/ripple/DBInit.cpp +++ b/src/cpp/ripple/DBInit.cpp @@ -19,10 +19,6 @@ const char *TxnDBInit[] = { RawTxn BLOB, \ TxnMeta BLOB \ );", - "CREATE TABLE PubKeys ( \ - ID CHARACTER(35) PRIMARY KEY, \ - PubKey BLOB \ - );", "CREATE TABLE AccountTransactions ( \ TransID CHARACTER(64), \ Account CHARACTER(64), \ diff --git a/src/cpp/ripple/PubKeyCache.cpp b/src/cpp/ripple/PubKeyCache.cpp deleted file mode 100644 index 8b545d51f..000000000 --- a/src/cpp/ripple/PubKeyCache.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "PubKeyCache.h" -#include "Application.h" - -CKey::pointer PubKeyCache::locate(const RippleAddress& id) -{ - { // is it in cache - boost::mutex::scoped_lock sl(mLock); - std::map::iterator it(mCache.find(id)); - if(it!=mCache.end()) return it->second; - } - - std::string sql="SELECT * from PubKeys WHERE ID='"; - sql.append(id.humanAccountID()); - sql.append("';'"); - std::vector data; - data.resize(66); // our public keys are actually 33 bytes - int pkSize; - - { // is it in the database - ScopedLock sl(theApp->getTxnDB()->getDBLock()); - Database* db=theApp->getTxnDB()->getDB(); - if(!db->executeSQL(sql) || !db->startIterRows()) - return CKey::pointer(); - pkSize = db->getBinary("PubKey", &(data.front()), data.size()); - db->endIterRows(); - } - data.resize(pkSize); - CKey::pointer ckp(new CKey()); - if(!ckp->SetPubKey(data)) - { - assert(false); // bad data in DB - return CKey::pointer(); - } - - { // put it in cache (okay if we race with another retriever) - boost::mutex::scoped_lock sl(mLock); - mCache.insert(std::make_pair(id, ckp)); - } - return ckp; -} - -CKey::pointer PubKeyCache::store(const RippleAddress& id, const CKey::pointer& key) -{ // stored if needed, returns cached copy (possibly the original) - { - boost::mutex::scoped_lock sl(mLock); - std::pair::iterator, bool> pit(mCache.insert(std::make_pair(id, key))); - if(!pit.second) // there was an existing key - return pit.first->second; - } - - std::vector pk = key->GetPubKey(); - - std::string sql = "INSERT INTO PubKeys (ID,PubKey) VALUES ('"; - sql += id.humanAccountID(); - sql += "',"; - sql += sqlEscape(pk); - sql.append(");"); - - ScopedLock dbl(theApp->getTxnDB()->getDBLock()); - theApp->getTxnDB()->getDB()->executeSQL(sql, true); - - return key; -} - -void PubKeyCache::clear() -{ - boost::mutex::scoped_lock sl(mLock); - mCache.clear(); -} -// vim:ts=4 diff --git a/src/cpp/ripple/PubKeyCache.h b/src/cpp/ripple/PubKeyCache.h deleted file mode 100644 index 91023cfe9..000000000 --- a/src/cpp/ripple/PubKeyCache.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef __PUBKEYCACHE__ -#define __PUBKEYCACHE__ - -#include - -#include - -#include "RippleAddress.h" -#include "key.h" - -class PubKeyCache -{ -private: - boost::mutex mLock; - std::map mCache; - -public: - PubKeyCache() { ; } - - CKey::pointer locate(const RippleAddress& id); - CKey::pointer store(const RippleAddress& id, const CKey::pointer& key); - void clear(); -}; - -#endif From 809868c6fcd580f689887de9a0125e52074e34bb Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 17 Jan 2013 11:33:42 -0800 Subject: [PATCH 429/525] This is not optimal, but this should at least make the logic for when we publish transactions to which accounts sensible. --- src/cpp/ripple/NetworkOPs.cpp | 38 ++++------------------------------- src/cpp/ripple/NetworkOPs.h | 1 - 2 files changed, 4 insertions(+), 35 deletions(-) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index d907ad963..cf4027480 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1329,11 +1329,10 @@ void NetworkOPs::pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTr if (!mSubAccount.empty() || (!mSubRTAccount.empty()) ) { - typedef std::map::value_type AccountPair; - - BOOST_FOREACH(const AccountPair& affectedAccount, getAffectedAccounts(stTxn)) + std::vector accounts = meta ? meta->getAffectedAccounts() : stTxn.getMentionedAccounts(); + BOOST_FOREACH(const RippleAddress& affectedAccount, accounts) { - subInfoMapIterator simiIt = mSubRTAccount.find(affectedAccount.first.getAccountID()); + subInfoMapIterator simiIt = mSubRTAccount.find(affectedAccount.getAccountID()); if (simiIt != mSubRTAccount.end()) { @@ -1345,7 +1344,7 @@ void NetworkOPs::pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTr if (bAccepted) { - simiIt = mSubAccount.find(affectedAccount.first.getAccountID()); + simiIt = mSubAccount.find(affectedAccount.getAccountID()); if (simiIt != mSubAccount.end()) { @@ -1372,35 +1371,6 @@ void NetworkOPs::pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTr } } -// JED: I know this is sort of ugly. I'm going to rework this to get the affected accounts in a different way when we want finer granularity than just "account" -std::map NetworkOPs::getAffectedAccounts(const SerializedTransaction& stTxn) -{ - std::map accounts; - - BOOST_FOREACH(const SerializedType& it, stTxn.peekData()) - { - const STAccount* sa = dynamic_cast(&it); - if (sa) - { - RippleAddress na = sa->getValueNCA(); - accounts[na]=true; - }else - { - if( it.getFName() == sfLimitAmount ) - { - const STAmount* amount = dynamic_cast(&it); - if(amount) - { - RippleAddress na; - na.setAccountID(amount->getIssuer()); - accounts[na]=true; - } - } - } - } - return accounts; -} - // // Monitoring // diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 764dec483..401e9b67f 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -122,7 +122,6 @@ protected: void pubAcceptedTransaction(Ledger::ref lpCurrent, const SerializedTransaction& stTxn, TER terResult,TransactionMetaSet::pointer& meta); void pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTransaction& stTxn, TER terResult,bool accepted,TransactionMetaSet::pointer& meta); - std::map getAffectedAccounts(const SerializedTransaction& stTxn); void pubServer(); From a8b1b205d520e88773b8b1886fe190e1a3cac067 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 17 Jan 2013 13:02:24 -0800 Subject: [PATCH 430/525] JS: Forward account and transaction publishes. --- src/js/remote.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/js/remote.js b/src/js/remote.js index 992560eeb..cf3e10863 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -518,6 +518,18 @@ Remote.prototype._connect_message = function (ws, json) { this.emit('ledger_closed', message); break; + case 'account': + // XXX If not trusted, need proof. + + this.emit('account', message); + break; + + case 'transaction': + // XXX If not trusted, need proof. + + this.emit('transaction', message); + break; + case 'serverStatus': // This message is only received when online. As we are connected, it is the definative final state. this._set_state( From 1568422fb79338a93772e7f5b8e9c80319226a4f Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 17 Jan 2013 13:02:41 -0800 Subject: [PATCH 431/525] UT: Test account subscription for nexus. --- test/send-test.js | 143 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) diff --git a/test/send-test.js b/test/send-test.js index b77cdd866..15ae2c69c 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -605,6 +605,149 @@ buster.testCase("Nexus", { done(); }); }, + + "subscribe test: customer to customer with and without transfer fee" : + function (done) { + var self = this; + + // self.remote.set_trace(); + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "mtgox"], callback); + }, + function (callback) { testutils.ledger_close(self.remote, callback); }, + function (callback) { + self.what = "Set credit limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "100/AUD/mtgox", + "bob" : "100/AUD/mtgox", + }, + callback); + }, + function (callback) { testutils.ledger_close(self.remote, callback); }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "mtgox" : [ "1/AUD/alice" ], + }, + callback); + }, + function (callback) { testutils.ledger_close(self.remote, callback); }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : "1/AUD/mtgox", + "mtgox" : "-1/AUD/alice", + }, + callback); + }, + function (callback) { + self.what = "Alice sends Bob 1 AUD"; + + self.remote.transaction() + .payment("alice", "bob", "1/AUD/mtgox") + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { testutils.ledger_close(self.remote, callback); }, + function (callback) { + self.what = "Verify balances 2."; + + testutils.verify_balances(self.remote, + { + "alice" : "0/AUD/mtgox", + "bob" : "1/AUD/mtgox", + "mtgox" : "-1/AUD/bob", + }, + callback); + }, + function (callback) { + self.what = "Set transfer rate."; + + self.remote.transaction() + .account_set("mtgox") + .transfer_rate(1e9*1.1) + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { testutils.ledger_close(self.remote, callback); }, + function (callback) { + self.what = "Bob sends Alice 0.5 AUD"; + + self.remote.transaction() + .payment("bob", "alice", "0.5/AUD/mtgox") + .send_max("0.55/AUD/mtgox") // !!! Very important. + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances 3."; + + testutils.verify_balances(self.remote, + { + "alice" : "0.5/AUD/mtgox", + "bob" : "0.45/AUD/mtgox", + "mtgox" : [ "-0.5/AUD/alice","-0.45/AUD/bob" ], + }, + callback); + }, + function (callback) { + self.what = "Subscribe and accept."; + + self.count = 0; + self.found = 0; + + self.remote.on('ledger_closed', function (m) { + // console.log("#### LEDGER_CLOSE: %s", JSON.stringify(m)); + }); + + self.remote + .on('account', function (m) { + // console.log("ACCOUNT: %s", JSON.stringify(m)); + self.found = 1; + }) + .on('ledger_closed', function (m) { + // console.log("LEDGER_CLOSE: %d: %s", self.count, JSON.stringify(m)); + + if (self.count) { + callback(!self.found); + } + else { + self.count = 1; + + self.remote.ledger_accept(); + } + }) + .request_subscribe().accounts("mtgox") + .request(); + + self.remote.ledger_accept(); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, }); buster.testCase("Indirect ripple", { From f54a3ca97020417f55a3e7c49d3cbcc6404968ee Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 17 Jan 2013 14:15:23 -0800 Subject: [PATCH 432/525] Fix security for RPC validation_seed. --- src/cpp/ripple/RPCHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 41c9c6062..c3d93f66c 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -2614,7 +2614,7 @@ Json::Value RPCHandler::doCommand(const Json::Value& jvRequest, int iRole) { "unl_score", &RPCHandler::doUnlScore, true, optNone }, { "validation_create", &RPCHandler::doValidationCreate, true, optNone }, - { "validation_seed", &RPCHandler::doValidationSeed, false, optNone }, + { "validation_seed", &RPCHandler::doValidationSeed, true, optNone }, { "wallet_accounts", &RPCHandler::doWalletAccounts, false, optCurrent }, { "wallet_propose", &RPCHandler::doWalletPropose, false, optNone }, From f6202011fd60ce18f6985f47474217999554d78c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Thu, 17 Jan 2013 14:18:37 -0800 Subject: [PATCH 433/525] Improve rippled-example.cfg documentation. --- rippled-example.cfg | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 54191e8b5..b2c683117 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -137,8 +137,8 @@ # This is not needed if the chain includes it. # # [websocket_ssl_chain]: -# If you need a certificate chain, specify the path to the certificate chain here. -# The chain may include the end certificate. +# If you need a certificate chain, specify the path to the certificate chain +# here. The chain may include the end certificate. # # [validation_seed]: # To perform validation, this section should contain either a validation seed @@ -150,9 +150,12 @@ # shfArahZT9Q9ckTf3s1psJ7C7qzVN # # [node_seed]: -# To force a particular node seed or key, the key can be set here. The -# format is the same as the validation_seed field. The need is used for -# clustering. Node seeds start with an 's'. +# This is used for clustering. To force a particular node seed or key, the +# key can be set here. The format is the same as the validation_seed field. +# To obtain a validation seed, use the validation_create command. +# +# Examples: RASH BUSH MILK LOOK BAD BRIM AVID GAFF BAIT ROT POD LOVE +# shfArahZT9Q9ckTf3s1psJ7C7qzVN # # [cluster_nodes]: # To extend full trust to other nodes, place their node public keys here. @@ -163,7 +166,7 @@ # The number of past ledgers to acquire on server startup and the minimum to # maintain while running. # -# To serve clients, servers need historical ledger data. Servers that don't +# To serve clients, servers need historical ledger data. Servers that don't # need to serve clients can set this to "none". Servers that want complete # history can set this to "full". # From 00551221769ce0f3a1da612c701e3282d244a36c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 17 Jan 2013 21:08:02 -0800 Subject: [PATCH 434/525] Make sure it's safe to modify acquired ledgers. --- src/cpp/ripple/SHAMapSync.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/SHAMapSync.cpp b/src/cpp/ripple/SHAMapSync.cpp index 5d99399b0..41e309eae 100644 --- a/src/cpp/ripple/SHAMapSync.cpp +++ b/src/cpp/ripple/SHAMapSync.cpp @@ -62,7 +62,7 @@ void SHAMap::getMissingNodes(std::vector& nodeIDs, std::vectorhaveNode(childID, childHash, nodeData)) { SHAMapTreeNode::pointer ptr = - boost::make_shared(childID, nodeData, mSeq, snfPREFIX, childHash); + boost::make_shared(childID, nodeData, mSeq - 1, snfPREFIX, childHash); cLog(lsTRACE) << "Got sync node from cache: " << *d; mTNByID[*ptr] = ptr; d = ptr.get(); @@ -193,7 +193,7 @@ SMAddNode SHAMap::addRootNode(const std::vector& rootNode, SHANod return SMAddNode::okay(); } - SHAMapTreeNode::pointer node = boost::make_shared(SHAMapNode(), rootNode, mSeq, format, uint256()); + SHAMapTreeNode::pointer node = boost::make_shared(SHAMapNode(), rootNode, mSeq - 1, format, uint256()); if (!node) return SMAddNode::invalid(); @@ -231,7 +231,7 @@ SMAddNode SHAMap::addRootNode(const uint256& hash, const std::vector(SHAMapNode(), rootNode, mSeq, format, uint256()); + SHAMapTreeNode::pointer node = boost::make_shared(SHAMapNode(), rootNode, mSeq - 1, format, uint256()); if (!node || node->getNodeHash() != hash) return SMAddNode::invalid(); @@ -308,7 +308,7 @@ SMAddNode SHAMap::addKnownNode(const SHAMapNode& node, const std::vector(node, rawNode, mSeq, snfWIRE, uint256()); + SHAMapTreeNode::pointer newNode = boost::make_shared(node, rawNode, mSeq - 1, snfWIRE, uint256()); if (hash != newNode->getNodeHash()) // these aren't the droids we're looking for return SMAddNode::invalid(); From 8feb9d6c29853e89deb0389317badf5529e01b82 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 17 Jan 2013 21:08:23 -0800 Subject: [PATCH 435/525] Handle an edge case. --- src/cpp/ripple/Ledger.cpp | 43 ++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 9745e7ba8..2bdf42372 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -415,29 +415,34 @@ void Ledger::saveAcceptedLedger(bool fromConsensus, LoadEvent::pointer event) if (!SQL_EXISTS(db, boost::str(AcctTransExists % item->getTag().GetHex()))) { // Transaction not in AccountTransactions - std::vector accts = meta.getAffectedAccounts(); - - std::string sql = "INSERT INTO AccountTransactions (TransID, Account, LedgerSeq) VALUES "; - bool first = true; - for (std::vector::iterator it = accts.begin(), end = accts.end(); it != end; ++it) + const std::vector accts = meta.getAffectedAccounts(); + if (!accts.empty()) { - if (!first) - sql += ", ('"; - else + + std::string sql = "INSERT INTO AccountTransactions (TransID, Account, LedgerSeq) VALUES "; + bool first = true; + for (std::vector::const_iterator it = accts.begin(), end = accts.end(); it != end; ++it) { - sql += "('"; - first = false; + if (!first) + sql += ", ('"; + else + { + sql += "('"; + first = false; + } + sql += txn.getTransactionID().GetHex(); + sql += "','"; + sql += it->humanAccountID(); + sql += "',"; + sql += boost::lexical_cast(getLedgerSeq()); + sql += ")"; } - sql += txn.getTransactionID().GetHex(); - sql += "','"; - sql += it->humanAccountID(); - sql += "',"; - sql += boost::lexical_cast(getLedgerSeq()); - sql += ")"; + sql += ";"; + Log(lsTRACE) << "ActTx: " << sql; + db->executeSQL(sql); // may already be in there } - sql += ";"; - Log(lsTRACE) << "ActTx: " << sql; - db->executeSQL(sql); // may already be in there + else + cLog(lsWARNING) << "Transaaction in ledger " << mLedgerSeq << " affects not accounts"; } if (SQL_EXISTS(db, boost::str(transExists % txn.getTransactionID().GetHex()))) From bda80d41448224d1e1dd0086276e1110d85ed2b0 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 18 Jan 2013 00:36:22 -0800 Subject: [PATCH 436/525] Change the security model for RPC admin access. --- rippled-example.cfg | 23 ++++++++++++++++++----- src/cpp/ripple/CallRPC.cpp | 8 ++------ src/cpp/ripple/Config.cpp | 6 ++++-- src/cpp/ripple/Config.h | 4 ++-- src/cpp/ripple/RPCDoor.cpp | 1 + src/cpp/ripple/RPCErr.cpp | 1 + src/cpp/ripple/RPCErr.h | 1 + src/cpp/ripple/RPCHandler.cpp | 35 ++++++++++++++++++++++++++++++++--- src/cpp/ripple/RPCHandler.h | 4 +++- src/cpp/ripple/RPCServer.cpp | 31 +++++++++++++++++++++---------- src/cpp/ripple/WSConnection.h | 16 +++++++++++++--- 11 files changed, 98 insertions(+), 32 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index b2c683117..4dbd58668 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -83,12 +83,12 @@ # # [peer_ip]: # IP address or domain to bind to allow external connections from peers. -# Defaults to not allow external connections from peers. +# Defaults to not binding, which disallows external connections from peers. # # Examples: 0.0.0.0 - Bind on all interfaces. # # [peer_port]: -# Port to bind to allow external connections from peers. +# If peer_ip is supplied, corresponding port to bind to for peer connections. # # [peer_private]: # 0 or 1. @@ -97,14 +97,27 @@ # # [rpc_ip]: # IP address or domain to bind to allow insecure RPC connections. -# Defaults to not allow RPC connections. +# Defaults to not binding, which disallows RPC connections. # # [rpc_port]: -# Port to bind to if allowing insecure RPC connections. +# If rpc_ip is supplied, corresponding port to bind to for peer connections. # # [rpc_allow_remote]: # 0 or 1. -# 0: only allows RPC connections from 127.0.0.1. [default] +# 0: Allow RPC connections only from 127.0.0.1. [default] +# 1: Allow RPC connections from any IP. +# +# [rpc_admin_user]: +# As a server, require a this user to specified and require admin_password to +# be checked for RPC admin functions. +# +# As a client, supply this to the server. +# +# [rpc_admin_password]: +# As a server, require a this password to specified and require admin_user to +# be checked for RPC admin functions. +# +# As a client, supply this to the server. # # [websocket_public_ip]: # IP address or domain to bind to allow untrusted connections from clients. diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index 27b173a2c..a48e06959 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -565,10 +565,6 @@ int commandLineRPC(const std::vector& vCmd) RPCParser rpParser; Json::Value jvRpcParams(Json::arrayValue); - if (theConfig.RPC_USER.empty() && theConfig.RPC_PASSWORD.empty()) - throw std::runtime_error("You must set rpcpassword= in the configuration file. " - "If the file does not exist, create it with owner-readable-only file permissions."); - if (vCmd.empty()) return 1; // 1 = print usage. for (int i = 1; i != vCmd.size(); i++) @@ -597,8 +593,8 @@ int commandLineRPC(const std::vector& vCmd) jvOutput = callRPC( theConfig.RPC_IP, theConfig.RPC_PORT, - theConfig.RPC_USER, - theConfig.RPC_PASSWORD, + theConfig.RPC_ADMIN_USER, + theConfig.RPC_ADMIN_PASSWORD, "", jvRequest.isMember("method") // Allow parser to rewrite method. ? jvRequest["method"].asString() diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index a886e27fa..a44acdc0f 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -35,6 +35,8 @@ #define SECTION_PEER_SSL_CIPHER_LIST "peer_ssl_cipher_list" #define SECTION_PEER_START_MAX "peer_start_max" #define SECTION_RPC_ALLOW_REMOTE "rpc_allow_remote" +#define SECTION_RPC_ADMIN_USER "rpc_admin_user" +#define SECTION_RPC_ADMIN_PASSWORD "rpc_admin_password" #define SECTION_RPC_IP "rpc_ip" #define SECTION_RPC_PORT "rpc_port" #define SECTION_RPC_STARTUP "rpc_startup" @@ -179,8 +181,6 @@ Config::Config() LEDGER_SECONDS = 60; LEDGER_CREATOR = false; - RPC_USER = "admin"; - RPC_PASSWORD = "pass"; RPC_ALLOW_REMOTE = false; PEER_SSL_CIPHER_LIST = DEFAULT_PEER_SSL_CIPHER_LIST; @@ -298,6 +298,8 @@ void Config::load() if (sectionSingleB(secConfig, SECTION_PEER_PRIVATE, strTemp)) PEER_PRIVATE = boost::lexical_cast(strTemp); + (void) sectionSingleB(secConfig, SECTION_RPC_ADMIN_USER, RPC_ADMIN_USER); + (void) sectionSingleB(secConfig, SECTION_RPC_ADMIN_PASSWORD, RPC_ADMIN_PASSWORD); (void) sectionSingleB(secConfig, SECTION_RPC_IP, RPC_IP); if (sectionSingleB(secConfig, SECTION_RPC_PORT, strTemp)) diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index 114414037..a72be021b 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -112,8 +112,8 @@ public: // RPC parameters std::string RPC_IP; int RPC_PORT; - std::string RPC_USER; - std::string RPC_PASSWORD; + std::string RPC_ADMIN_USER; + std::string RPC_ADMIN_PASSWORD; bool RPC_ALLOW_REMOTE; std::vector RPC_STARTUP; diff --git a/src/cpp/ripple/RPCDoor.cpp b/src/cpp/ripple/RPCDoor.cpp index b52e675f5..219f28197 100644 --- a/src/cpp/ripple/RPCDoor.cpp +++ b/src/cpp/ripple/RPCDoor.cpp @@ -37,6 +37,7 @@ bool RPCDoor::isClientAllowed(const std::string& ip) { if (theConfig.RPC_ALLOW_REMOTE) return true; + if (ip == "127.0.0.1") return true; diff --git a/src/cpp/ripple/RPCErr.cpp b/src/cpp/ripple/RPCErr.cpp index d09283fbd..4c4958a1d 100644 --- a/src/cpp/ripple/RPCErr.cpp +++ b/src/cpp/ripple/RPCErr.cpp @@ -25,6 +25,7 @@ Json::Value rpcError(int iError, Json::Value jvResult) { rpcDST_ACT_MALFORMED, "dstActMalformed", "Destination account is malformed." }, { rpcDST_ACT_MISSING, "dstActMissing", "Destination account does not exists." }, { rpcDST_AMT_MALFORMED, "dstAmtMalformed", "Destination amount/currency/issuer is malformed." }, + { rpcFORBIDDEN, "forbidden", "Bad credentials." }, { rpcFAIL_GEN_DECRPYT, "failGenDecrypt", "Failed to decrypt generator." }, { rpcGETS_ACT_MALFORMED, "getsActMalformed", "Gets account malformed." }, { rpcGETS_AMT_MALFORMED, "getsAmtMalformed", "Gets amount malformed." }, diff --git a/src/cpp/ripple/RPCErr.h b/src/cpp/ripple/RPCErr.h index 0057c6af2..611cc5eea 100644 --- a/src/cpp/ripple/RPCErr.h +++ b/src/cpp/ripple/RPCErr.h @@ -7,6 +7,7 @@ enum { rpcSUCCESS = 0, rpcBAD_SYNTAX, // Must be 1 to print usage to command line. rpcJSON_RPC, + rpcFORBIDDEN, // Error numbers beyond this line are not stable between versions. // Programs should use error tokens. diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index c3d93f66c..c7141e49f 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -25,6 +25,38 @@ SETUP_LOG(); +int iAdminGet(const Json::Value& jvRequest, const std::string& strRemoteIp) +{ + int iRole; + bool bPasswordSupplied = jvRequest.isMember("user") || jvRequest.isMember("password"); + bool bPasswordRequired = !theConfig.RPC_ADMIN_USER.empty() || !theConfig.RPC_ADMIN_PASSWORD.empty(); + + bool bPasswordWrong = bPasswordSupplied + ? bPasswordRequired + // Supplied, required, and incorrect. + ? theConfig.RPC_ADMIN_USER != (jvRequest.isMember("user") ? jvRequest["user"].asString() : "") + || theConfig.RPC_ADMIN_PASSWORD != (jvRequest.isMember("user") ? jvRequest["password"].asString() : "") + // Supplied and not required. + : true + : false; + // Meets IP restriction for admin. + bool bAdminIP = strRemoteIp == "127.0.0.1"; + + if (bPasswordWrong // Wrong + || (bPasswordSupplied && !bAdminIP)) // Supplied and doesn't meet IP filter. + { + iRole = RPCHandler::FORBID; + } + // If supplied, password is correct. + else + { + // Allow admin, if from admin IP and no password is required or it was supplied and correct. + iRole = bAdminIP && (!bPasswordRequired || bPasswordSupplied) ? RPCHandler::ADMIN : RPCHandler::GUEST; + } + + return iRole; +} + RPCHandler::RPCHandler(NetworkOPs* netOps) { mNetOps = netOps; @@ -2314,11 +2346,8 @@ Json::Value RPCHandler::doSubscribe(Json::Value jvRequest) if (jvRequest.isMember("url")) { -// Temporarily off. -#if 0 if (mRole != ADMIN) return rpcError(rpcNO_PERMISSION); -#endif std::string strUrl = jvRequest["url"].asString(); std::string strUsername = jvRequest.isMember("username") ? jvRequest["username"].asString() : ""; diff --git a/src/cpp/ripple/RPCHandler.h b/src/cpp/ripple/RPCHandler.h index 3c79a7363..455d6dfd4 100644 --- a/src/cpp/ripple/RPCHandler.h +++ b/src/cpp/ripple/RPCHandler.h @@ -110,7 +110,7 @@ class RPCHandler public: - enum { GUEST, USER, ADMIN }; + enum { GUEST, USER, ADMIN, FORBID }; RPCHandler(NetworkOPs* netOps); RPCHandler(NetworkOPs* netOps, InfoSub* infoSub); @@ -136,5 +136,7 @@ public: static Json::Value runHandler(const std::string& name, const Json::Value& params); }; +int iAdminGet(const Json::Value& jvRequest, const std::string& strRemoteIp); + #endif // vim:ts=4 diff --git a/src/cpp/ripple/RPCServer.cpp b/src/cpp/ripple/RPCServer.cpp index fa942fc9e..d56ddd803 100644 --- a/src/cpp/ripple/RPCServer.cpp +++ b/src/cpp/ripple/RPCServer.cpp @@ -32,9 +32,6 @@ RPCServer::RPCServer(boost::asio::io_service& io_service , NetworkOPs* nopNetwor void RPCServer::connected() { //std::cerr << "RPC request" << std::endl; - if (mSocket.remote_endpoint().address().to_string()=="127.0.0.1") mRole = RPCHandler::ADMIN; - else mRole = RPCHandler::GUEST; - boost::asio::async_read_until(mSocket, mLineBuffer, "\r\n", boost::bind(&RPCServer::handle_read_line, shared_from_this(), boost::asio::placeholders::error)); } @@ -114,16 +111,17 @@ std::string RPCServer::handleRequest(const std::string& requestStr) Json::Value id; // Parse request - Json::Value valRequest; - Json::Reader reader; - if (!reader.parse(requestStr, valRequest) || valRequest.isNull() || !valRequest.isObject()) + Json::Value jvRequest; + Json::Reader reader; + + if (!reader.parse(requestStr, jvRequest) || jvRequest.isNull() || !jvRequest.isObject()) return(HTTPReply(400, "unable to parse request")); // Parse id now so errors from here on will have the id - id = valRequest["id"]; + id = jvRequest["id"]; // Parse method - Json::Value valMethod = valRequest["method"]; + Json::Value valMethod = jvRequest["method"]; if (valMethod.isNull()) return(HTTPReply(400, "null method")); if (!valMethod.isString()) @@ -131,11 +129,24 @@ std::string RPCServer::handleRequest(const std::string& requestStr) std::string strMethod = valMethod.asString(); // Parse params - Json::Value valParams = valRequest["params"]; + Json::Value valParams = jvRequest["params"]; + if (valParams.isNull()) + { valParams = Json::Value(Json::arrayValue); + } else if (!valParams.isArray()) - return(HTTPReply(400, "params unparseable")); + { + return HTTPReply(400, "params unparseable"); + } + + mRole = iAdminGet(jvRequest, mSocket.remote_endpoint().address().to_string()); + + if (RPCHandler::FORBID == mRole) + { + // XXX This needs rate limiting to prevent brute forcing password. + return HTTPReply(403, "Forbidden"); + } RPCHandler mRPCHandler(mNetOps); diff --git a/src/cpp/ripple/WSConnection.h b/src/cpp/ripple/WSConnection.h index 6bc97e6ca..90d43d82e 100644 --- a/src/cpp/ripple/WSConnection.h +++ b/src/cpp/ripple/WSConnection.h @@ -12,6 +12,7 @@ #include "CallRPC.h" #include "InstanceCounter.h" #include "Log.h" +#include "RPCErr.h" DEFINE_INSTANCE(WebSocketConnection); @@ -91,9 +92,18 @@ public: RPCHandler mRPCHandler(&mNetwork, this); Json::Value jvResult(Json::objectValue); - jvResult["result"] = mRPCHandler.doCommand( - jvRequest, - mHandler->getPublic() ? RPCHandler::GUEST : RPCHandler::ADMIN); + int iRole = mHandler->getPublic() + ? RPCHandler::GUEST // Don't check on the public interface. + : iAdminGet(jvRequest, "127.0.0.1"); // XXX Fix this to return the remote IP. + + if (RPCHandler::FORBID == iRole) + { + jvResult["result"] = rpcError(rpcFORBIDDEN); + } + else + { + jvResult["result"] = mRPCHandler.doCommand(jvRequest, iRole); + } // Currently we will simply unwrap errors returned by the RPC // API, in the future maybe we can make the responses From e69d309cb38de4de58c329fbe0f745586a43e99e Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 18 Jan 2013 01:41:48 -0800 Subject: [PATCH 437/525] More security changes. --- rippled-example.cfg | 25 +++++++++++++++++++++---- src/cpp/ripple/CallRPC.cpp | 10 ++++++++-- src/cpp/ripple/Config.cpp | 8 +++++++- src/cpp/ripple/Config.h | 5 ++++- src/cpp/ripple/RPCHandler.cpp | 10 ++++++---- 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 4dbd58668..e8fc94fb2 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -107,15 +107,32 @@ # 0: Allow RPC connections only from 127.0.0.1. [default] # 1: Allow RPC connections from any IP. # +# [rpc_admin_allow]: +# Specify an IP address required for admin access. +# +# Defaults to 127.0.0.1. +# +# [rpc_user]: +# As a server, require a this user to specified and require rpc_password to +# be checked for RPC access. +# +# As a client, supply this to the server. +# +# [rpc_password]: +# As a server, require a this password to specified and require rpc_user to +# be checked for RPC access. +# +# As a client, supply this to the server. +# # [rpc_admin_user]: -# As a server, require a this user to specified and require admin_password to -# be checked for RPC admin functions. +# As a server, require a this user to specified and require rpc_admin_password +# to be checked for RPC admin functions. # # As a client, supply this to the server. # # [rpc_admin_password]: -# As a server, require a this password to specified and require admin_user to -# be checked for RPC admin functions. +# As a server, require a this password to specified and require rpc_admin_user +# to be checked for RPC admin functions. # # As a client, supply this to the server. # diff --git a/src/cpp/ripple/CallRPC.cpp b/src/cpp/ripple/CallRPC.cpp index a48e06959..13f3e7ff4 100644 --- a/src/cpp/ripple/CallRPC.cpp +++ b/src/cpp/ripple/CallRPC.cpp @@ -590,11 +590,17 @@ int commandLineRPC(const std::vector& vCmd) jvParams.append(jvRequest); + if (!theConfig.RPC_ADMIN_USER.empty()) + jvRequest["admin_user"] = theConfig.RPC_ADMIN_USER; + + if (!theConfig.RPC_ADMIN_PASSWORD.empty()) + jvRequest["admin_password"] = theConfig.RPC_ADMIN_PASSWORD; + jvOutput = callRPC( theConfig.RPC_IP, theConfig.RPC_PORT, - theConfig.RPC_ADMIN_USER, - theConfig.RPC_ADMIN_PASSWORD, + theConfig.RPC_USER, + theConfig.RPC_PASSWORD, "", jvRequest.isMember("method") // Allow parser to rewrite method. ? jvRequest["method"].asString() diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index a44acdc0f..a50f8f676 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -35,10 +35,13 @@ #define SECTION_PEER_SSL_CIPHER_LIST "peer_ssl_cipher_list" #define SECTION_PEER_START_MAX "peer_start_max" #define SECTION_RPC_ALLOW_REMOTE "rpc_allow_remote" +#define SECTION_RPC_ADMIN_ALLOW "rpc_admin_allow" #define SECTION_RPC_ADMIN_USER "rpc_admin_user" #define SECTION_RPC_ADMIN_PASSWORD "rpc_admin_password" #define SECTION_RPC_IP "rpc_ip" #define SECTION_RPC_PORT "rpc_port" +#define SECTION_RPC_USER "rpc_user" +#define SECTION_RPC_PASSWORD "rpc_password" #define SECTION_RPC_STARTUP "rpc_startup" #define SECTION_SNTP "sntp_servers" #define SECTION_VALIDATORS_FILE "validators_file" @@ -298,9 +301,12 @@ void Config::load() if (sectionSingleB(secConfig, SECTION_PEER_PRIVATE, strTemp)) PEER_PRIVATE = boost::lexical_cast(strTemp); - (void) sectionSingleB(secConfig, SECTION_RPC_ADMIN_USER, RPC_ADMIN_USER); + (void) sectionSingleB(secConfig, SECTION_RPC_ADMIN_ALLOW, RPC_ADMIN_ALLOW); (void) sectionSingleB(secConfig, SECTION_RPC_ADMIN_PASSWORD, RPC_ADMIN_PASSWORD); + (void) sectionSingleB(secConfig, SECTION_RPC_ADMIN_USER, RPC_ADMIN_USER); (void) sectionSingleB(secConfig, SECTION_RPC_IP, RPC_IP); + (void) sectionSingleB(secConfig, SECTION_RPC_PASSWORD, RPC_PASSWORD); + (void) sectionSingleB(secConfig, SECTION_RPC_USER, RPC_USER); if (sectionSingleB(secConfig, SECTION_RPC_PORT, strTemp)) RPC_PORT = boost::lexical_cast(strTemp); diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index a72be021b..915756179 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -112,8 +112,11 @@ public: // RPC parameters std::string RPC_IP; int RPC_PORT; - std::string RPC_ADMIN_USER; + std::string RPC_ADMIN_ALLOW; std::string RPC_ADMIN_PASSWORD; + std::string RPC_ADMIN_USER; + std::string RPC_PASSWORD; + std::string RPC_USER; bool RPC_ALLOW_REMOTE; std::vector RPC_STARTUP; diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index c7141e49f..c7dbbfaec 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -28,19 +28,21 @@ SETUP_LOG(); int iAdminGet(const Json::Value& jvRequest, const std::string& strRemoteIp) { int iRole; - bool bPasswordSupplied = jvRequest.isMember("user") || jvRequest.isMember("password"); + bool bPasswordSupplied = jvRequest.isMember("admin_user") || jvRequest.isMember("admin_password"); bool bPasswordRequired = !theConfig.RPC_ADMIN_USER.empty() || !theConfig.RPC_ADMIN_PASSWORD.empty(); bool bPasswordWrong = bPasswordSupplied ? bPasswordRequired // Supplied, required, and incorrect. - ? theConfig.RPC_ADMIN_USER != (jvRequest.isMember("user") ? jvRequest["user"].asString() : "") - || theConfig.RPC_ADMIN_PASSWORD != (jvRequest.isMember("user") ? jvRequest["password"].asString() : "") + ? theConfig.RPC_ADMIN_USER != (jvRequest.isMember("admin_user") ? jvRequest["admin_user"].asString() : "") + || theConfig.RPC_ADMIN_PASSWORD != (jvRequest.isMember("admin_user") ? jvRequest["admin_password"].asString() : "") // Supplied and not required. : true : false; // Meets IP restriction for admin. - bool bAdminIP = strRemoteIp == "127.0.0.1"; + bool bAdminIP = theConfig.RPC_ADMIN_ALLOW.empty() + ? strRemoteIp == "127.0.0.1" + : strRemoteIp == theConfig.RPC_ADMIN_ALLOW; if (bPasswordWrong // Wrong || (bPasswordSupplied && !bAdminIP)) // Supplied and doesn't meet IP filter. From 7688253df9371e138f5254c02a07b84f86d6395d Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 18 Jan 2013 01:48:55 -0800 Subject: [PATCH 438/525] Work arround crashing on ~Config. --- src/cpp/ripple/Config.cpp | 6 +++++- src/cpp/ripple/Config.h | 2 +- src/cpp/ripple/main.cpp | 19 ++++++++++++------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index a50f8f676..66625cd26 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -276,6 +276,8 @@ void Config::load() smtTmp = sectionEntries(secConfig, SECTION_RPC_STARTUP); if (smtTmp) { + Json::Value jvArray(Json::arrayValue); + BOOST_FOREACH(const std::string& strJson, *smtTmp) { Json::Reader jrReader; @@ -284,8 +286,10 @@ void Config::load() if (!jrReader.parse(strJson, jvCommand)) throw std::runtime_error(boost::str(boost::format("Couldn't parse ["SECTION_RPC_STARTUP"] command: %s") % strJson)); - RPC_STARTUP.push_back(jvCommand); + RPC_STARTUP.append(jvCommand); } + + RPC_STARTUP = jvArray; } if (sectionSingleB(secConfig, SECTION_DATABASE_PATH, DATABASE_PATH)) diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index 915756179..e67200fb8 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -118,7 +118,7 @@ public: std::string RPC_PASSWORD; std::string RPC_USER; bool RPC_ALLOW_REMOTE; - std::vector RPC_STARTUP; + Json::Value RPC_STARTUP; // Validation RippleAddress VALIDATION_SEED, VALIDATION_PUB, VALIDATION_PRIV; diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index e0646428f..e7d0379c9 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -30,16 +30,21 @@ void startServer() // // Execute start up rpc commands. // - BOOST_FOREACH(const Json::Value& jvCommand, theConfig.RPC_STARTUP) + if (theConfig.RPC_STARTUP.isArray()) { - if (!theConfig.QUIET) - cerr << "Startup RPC: " << jvCommand << endl; + for (int i = 0; i != theConfig.RPC_STARTUP.size(); ++i) + { + const Json::Value& jvCommand = theConfig.RPC_STARTUP[i]; - RPCHandler rhHandler(&theApp->getOPs()); + if (!theConfig.QUIET) + cerr << "Startup RPC: " << jvCommand << endl; - std::cerr << "Result: " - << rhHandler.doCommand(jvCommand, RPCHandler::ADMIN) - << std::endl; + RPCHandler rhHandler(&theApp->getOPs()); + + std::cerr << "Result: " + << rhHandler.doCommand(jvCommand, RPCHandler::ADMIN) + << std::endl; + } } theApp->run(); // Blocks till we get a stop RPC. From dd8559628e58b496cde18d0433b694564d4d4c25 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 18 Jan 2013 02:47:36 -0800 Subject: [PATCH 439/525] Pass the correct remote IP address down. --- src/cpp/ripple/WSConnection.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/WSConnection.h b/src/cpp/ripple/WSConnection.h index 90d43d82e..0bb51e975 100644 --- a/src/cpp/ripple/WSConnection.h +++ b/src/cpp/ripple/WSConnection.h @@ -41,6 +41,7 @@ protected: WSServerHandler* mHandler; weak_connection_ptr mConnection; NetworkOPs& mNetwork; + std::string mRemoteIP; boost::asio::deadline_timer mPingTimer; bool mPinged; @@ -53,7 +54,11 @@ public: WSConnection(WSServerHandler* wshpHandler, const connection_ptr& cpConnection) : mHandler(wshpHandler), mConnection(cpConnection), mNetwork(theApp->getOPs()), mPingTimer(theApp->getAuxService()), mPinged(false) - { setPingTimer(); } + { + mRemoteIP = cpConnection->get_socket().lowest_layer().remote_endpoint().address().to_string(); + cLog(lsDEBUG) << "Websocket connection from " << mRemoteIP; + setPingTimer(); + } void preDestroy() { // sever connection @@ -94,7 +99,7 @@ public: int iRole = mHandler->getPublic() ? RPCHandler::GUEST // Don't check on the public interface. - : iAdminGet(jvRequest, "127.0.0.1"); // XXX Fix this to return the remote IP. + : iAdminGet(jvRequest, mRemoteIP); // XXX Fix this to return the remote IP. if (RPCHandler::FORBID == iRole) { From 015d09993d96e4004b2bba1a936f0e4195815250 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 18 Jan 2013 03:01:54 -0800 Subject: [PATCH 440/525] Fix HTTPAuthorized. It's currently not used. --- src/cpp/ripple/rpc.cpp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/cpp/ripple/rpc.cpp b/src/cpp/ripple/rpc.cpp index 5b80d3e65..de811eec7 100644 --- a/src/cpp/ripple/rpc.cpp +++ b/src/cpp/ripple/rpc.cpp @@ -204,21 +204,31 @@ std::string DecodeBase64(std::string s) return result; } -/* -bool HTTPAuthorized(map& mapHeaders) -{ +void HTTPAuthorized(std::map& mapHeaders, bool& user, bool& admin) +{ // This is currently not used std::string strAuth = mapHeaders["authorization"]; if (strAuth.substr(0,6) != "Basic ") - return false; - std::string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64); + { + admin = theConfig.RPC_ADMIN_USER.empty() && theConfig.RPC_ADMIN_PASSWORD.empty(); + user = theConfig.RPC_USER.empty() && theConfig.RPC_PASSWORD.empty(); + } + std::string strUserPass64 = strAuth.substr(6); + boost::trim(strUserPass64); std::string strUserPass = DecodeBase64(strUserPass64); std::string::size_type nColon = strUserPass.find(":"); if (nColon == std::string::npos) - return false; - std::string strUser = strUserPass.substr(0, nColon); - std::string strPassword = strUserPass.substr(nColon+1); - return (strUser == mapArgs["-rpcuser"] && strPassword == mapArgs["-rpcpassword"]); -}*/ + { + admin = false; + user = false; + } + else + { + std::string strUser = strUserPass.substr(0, nColon); + std::string strPassword = strUserPass.substr(nColon+1); + admin = (strUser == theConfig.RPC_ADMIN_USER) && (strPassword == theConfig.RPC_ADMIN_PASSWORD); + user = (strUser == theConfig.RPC_USER) && (strPassword == theConfig.RPC_PASSWORD); + } +} // // JSON-RPC protocol. Bitcoin speaks version 1.0 for maximum compatibility, From fd76033e55d33c800ee1aba2c4bcef849c7c6799 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 18 Jan 2013 03:06:12 -0800 Subject: [PATCH 441/525] On second thought, this is what we want. --- src/cpp/ripple/rpc.cpp | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/cpp/ripple/rpc.cpp b/src/cpp/ripple/rpc.cpp index de811eec7..6219ce527 100644 --- a/src/cpp/ripple/rpc.cpp +++ b/src/cpp/ripple/rpc.cpp @@ -204,30 +204,20 @@ std::string DecodeBase64(std::string s) return result; } -void HTTPAuthorized(std::map& mapHeaders, bool& user, bool& admin) +bool HTTPAuthorized(std::map& mapHeaders) { // This is currently not used std::string strAuth = mapHeaders["authorization"]; if (strAuth.substr(0,6) != "Basic ") - { - admin = theConfig.RPC_ADMIN_USER.empty() && theConfig.RPC_ADMIN_PASSWORD.empty(); - user = theConfig.RPC_USER.empty() && theConfig.RPC_PASSWORD.empty(); - } + return theConfig.RPC_ADMIN_USER.empty() && theConfig.RPC_ADMIN_PASSWORD.empty(); std::string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64); std::string strUserPass = DecodeBase64(strUserPass64); std::string::size_type nColon = strUserPass.find(":"); if (nColon == std::string::npos) - { - admin = false; - user = false; - } - else - { - std::string strUser = strUserPass.substr(0, nColon); - std::string strPassword = strUserPass.substr(nColon+1); - admin = (strUser == theConfig.RPC_ADMIN_USER) && (strPassword == theConfig.RPC_ADMIN_PASSWORD); - user = (strUser == theConfig.RPC_USER) && (strPassword == theConfig.RPC_PASSWORD); - } + return false; + std::string strUser = strUserPass.substr(0, nColon); + std::string strPassword = strUserPass.substr(nColon+1); + return (strUser == theConfig.RPC_USER) && (strPassword == theConfig.RPC_PASSWORD); } // From ae51e9d2031daa1ece640dd197b82b6c3e10c5e3 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 18 Jan 2013 05:35:10 -0800 Subject: [PATCH 442/525] Finish support for RPC user/pass auth. --- src/cpp/ripple/HTTPRequest.cpp | 6 +++--- src/cpp/ripple/HTTPRequest.h | 6 +++--- src/cpp/ripple/RPC.h | 2 ++ src/cpp/ripple/RPCServer.cpp | 8 +++++++- src/cpp/ripple/rpc.cpp | 14 ++++++++------ 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/cpp/ripple/HTTPRequest.cpp b/src/cpp/ripple/HTTPRequest.cpp index b4420a243..6823dbc62 100644 --- a/src/cpp/ripple/HTTPRequest.cpp +++ b/src/cpp/ripple/HTTPRequest.cpp @@ -11,7 +11,7 @@ SETUP_LOG(); void HTTPRequest::reset() { - vHeaders.clear(); + mHeaders.clear(); sRequestBody.clear(); sAuthorization.clear(); iDataSize = 0; @@ -67,8 +67,6 @@ HTTPRequestAction HTTPRequest::consume(boost::asio::streambuf& buf) eState = getting_body; return haREAD_RAW; } - vHeaders.push_back(line); - size_t colon = line.find(':'); if (colon != std::string::npos) { @@ -79,6 +77,8 @@ HTTPRequestAction HTTPRequest::consume(boost::asio::streambuf& buf) std::string headerValue = line.substr(colon+1); boost::trim(headerValue); + mHeaders[headerName] += headerValue; + if (headerName == "connection") { boost::to_lower(headerValue); diff --git a/src/cpp/ripple/HTTPRequest.h b/src/cpp/ripple/HTTPRequest.h index 1ad3081f0..a9d1fae6a 100644 --- a/src/cpp/ripple/HTTPRequest.h +++ b/src/cpp/ripple/HTTPRequest.h @@ -2,7 +2,7 @@ #define HTTPREQUEST__HPP #include -#include +#include #include @@ -32,7 +32,7 @@ protected: std::string sRequestBody; std::string sAuthorization; - std::vector vHeaders; + std::map mHeaders; int iDataSize; bool bShouldClose; @@ -49,7 +49,7 @@ public: std::string& peekAuth() { return sAuthorization; } std::string getAuth() { return sAuthorization; } - std::vector& peekHeaders() { return vHeaders; } + std::map& peekHeaders() { return mHeaders; } std::string getReplyHeaders(bool forceClose); HTTPRequestAction consume(boost::asio::streambuf&); diff --git a/src/cpp/ripple/RPC.h b/src/cpp/ripple/RPC.h index 61d42a6be..475cff649 100644 --- a/src/cpp/ripple/RPC.h +++ b/src/cpp/ripple/RPC.h @@ -41,4 +41,6 @@ extern std::string JSONRPCReply(const Json::Value& result, const Json::Value& er extern Json::Value JSONRPCError(int code, const std::string& message); +extern bool HTTPAuthorized(const std::map& mapHeaders); + #endif diff --git a/src/cpp/ripple/RPCServer.cpp b/src/cpp/ripple/RPCServer.cpp index d56ddd803..cd7474261 100644 --- a/src/cpp/ripple/RPCServer.cpp +++ b/src/cpp/ripple/RPCServer.cpp @@ -47,7 +47,12 @@ void RPCServer::handle_read_req(const boost::system::error_code& e) } req += strCopy(mQueryVec); - mReplyStr = handleRequest(req); + + if (!HTTPAuthorized(mHTTPRequest.peekHeaders())) + mReplyStr = HTTPReply(403, "Forbidden"); + else + mReplyStr = handleRequest(req); + boost::asio::async_write(mSocket, boost::asio::buffer(mReplyStr), boost::bind(&RPCServer::handle_write, shared_from_this(), boost::asio::placeholders::error)); } @@ -108,6 +113,7 @@ void RPCServer::handle_read_line(const boost::system::error_code& e) std::string RPCServer::handleRequest(const std::string& requestStr) { cLog(lsTRACE) << "handleRequest " << requestStr; + Json::Value id; // Parse request diff --git a/src/cpp/ripple/rpc.cpp b/src/cpp/ripple/rpc.cpp index 6219ce527..095ed977e 100644 --- a/src/cpp/ripple/rpc.cpp +++ b/src/cpp/ripple/rpc.cpp @@ -204,17 +204,19 @@ std::string DecodeBase64(std::string s) return result; } -bool HTTPAuthorized(std::map& mapHeaders) -{ // This is currently not used - std::string strAuth = mapHeaders["authorization"]; - if (strAuth.substr(0,6) != "Basic ") - return theConfig.RPC_ADMIN_USER.empty() && theConfig.RPC_ADMIN_PASSWORD.empty(); - std::string strUserPass64 = strAuth.substr(6); +bool HTTPAuthorized(const std::map& mapHeaders) +{ + std::map::const_iterator it = mapHeaders.find("authorization"); + if ((it == mapHeaders.end()) || (it->second.substr(0,6) != "Basic ")) + return theConfig.RPC_USER.empty() && theConfig.RPC_PASSWORD.empty(); + + std::string strUserPass64 = it->second.substr(6); boost::trim(strUserPass64); std::string strUserPass = DecodeBase64(strUserPass64); std::string::size_type nColon = strUserPass.find(":"); if (nColon == std::string::npos) return false; + std::string strUser = strUserPass.substr(0, nColon); std::string strPassword = strUserPass.substr(nColon+1); return (strUser == theConfig.RPC_USER) && (strPassword == theConfig.RPC_PASSWORD); From 79d1727b383ee4fcc82844be1cd3bb6e2bf947b4 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 18 Jan 2013 10:17:21 -0800 Subject: [PATCH 443/525] Hopefully, handle partial success correctly. Retry engine. --- src/cpp/ripple/LedgerConsensus.cpp | 83 +++++++++++++++------------- src/cpp/ripple/LedgerConsensus.h | 4 +- src/cpp/ripple/TransactionEngine.cpp | 7 ++- 3 files changed, 52 insertions(+), 42 deletions(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 778412a56..80c19931e 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -792,8 +792,7 @@ void LedgerConsensus::updateOurPositions() } bool LedgerConsensus::haveConsensus(bool forReal) -{ // FIXME: Should check for a supermajority on each disputed transaction - // counting unacquired TX sets as disagreeing +{ // CHECKME: should possibly count unacquired TX sets as disagreeing int agree = 0, disagree = 0; uint256 ourPosition = mOurPosition->getCurrentHash(); BOOST_FOREACH(u160_prop_pair& it, mPeerPositions) @@ -1086,32 +1085,42 @@ void LedgerConsensus::playbackProposals() } } -void LedgerConsensus::applyTransaction(TransactionEngine& engine, SerializedTransaction::ref txn, - Ledger::ref ledger, CanonicalTXSet& failedTransactions, bool openLedger) -{ // FIXME: Needs to handle partial success +bool LedgerConsensus::applyTransaction(TransactionEngine& engine, SerializedTransaction::ref txn, Ledger::ref ledger, + bool openLedger, bool retryAssured) +{ // Returns false if the transaction has need not be retried. TransactionEngineParams parms = openLedger ? tapOPEN_LEDGER : tapNONE; + if (retryAssured) + parms = static_cast(parms | tapRETRY); + #ifndef TRUST_NETWORK try { #endif + bool didApply; TER result = engine.applyTransaction(*txn, parms, didApply); - if (!didApply && !isTefFailure(result) && !isTemMalformed(result)) + if (didApply) { - cLog(lsINFO) << " retry"; - assert(!ledger->hasTransaction(txn->getTransactionID())); - failedTransactions.push_back(txn); + cLog(lsDEBUG) << "Transaction success"; + return false; } - else if (didApply) // FIXME: Need to do partial success - { - cLog(lsTRACE) << " success"; - assert(ledger->hasTransaction(txn->getTransactionID())); + + if (isTefFailure(result) || isTemMalformed(result)) + { // failure + cLog(lsDEBUG) << "Transaction failure"; + return false; } + + cLog(lsDEBUG) << "Retry needed"; + assert(!ledger->hasTransaction(txn->getTransactionID())); + return true; + #ifndef TRUST_NETWORK } catch (...) { - cLog(lsWARNING) << " Throws"; + cLog(lsWARNING) << "Throws"; + return false; } #endif } @@ -1119,7 +1128,6 @@ void LedgerConsensus::applyTransaction(TransactionEngine& engine, SerializedTran void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger, Ledger::ref checkLedger, CanonicalTXSet& failedTransactions, bool openLgr) { - TransactionEngineParams parms = openLgr ? tapOPEN_LEDGER : tapNONE; TransactionEngine engine(applyLedger); for (SHAMapItem::pointer item = set->peekFirstItem(); !!item; item = set->peekNextItem(item->getTag())) @@ -1133,7 +1141,8 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger #endif SerializerIterator sit(item->peekSerializer()); SerializedTransaction::pointer txn = boost::make_shared(boost::ref(sit)); - applyTransaction(engine, txn, applyLedger, failedTransactions, openLgr); + if (applyTransaction(engine, txn, applyLedger, openLgr, true)) + failedTransactions.push_back(txn); #ifndef TRUST_NETWORK } catch (...) @@ -1144,35 +1153,25 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger } } - int successes; - do + int changes; + bool certainRetry = true; + + for (int pass = 0; pass < 8; ++pass) { - successes = 0; + changes = 0; + CanonicalTXSet::iterator it = failedTransactions.begin(); while (it != failedTransactions.end()) { try { - bool didApply; - TER result = engine.applyTransaction(*it->second, parms, didApply); - if (isTelLocal(result)) - { // should never happen - assert(false); - it = failedTransactions.erase(it); - } - else if (didApply) - { // transaction was applied, remove from set - ++successes; - it = failedTransactions.erase(it); - } - else if (isTefFailure(result) || isTemMalformed(result)) - { // transaction cannot apply. tef is expected, tem should never happen + if (!applyTransaction(engine, it->second, applyLedger, openLgr, certainRetry)) + { + ++changes; it = failedTransactions.erase(it); } else - { // try again ++it; - } } catch (...) { @@ -1180,7 +1179,16 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger it = failedTransactions.erase(it); } } - } while (successes > 0); + + // A non-retry pass made no changes + if (!changes && !certainRetry) + return; + + // Stop retriable passes + if ((!changes) || (pass >= 4)) + certainRetry = false; + + } } uint32 LedgerConsensus::roundCloseTime(uint32 closeTime) @@ -1278,7 +1286,8 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) cLog(lsINFO) << "Test applying disputed transaction that did not get in"; SerializerIterator sit(it.second->peekTransaction()); SerializedTransaction::pointer txn = boost::make_shared(boost::ref(sit)); - applyTransaction(engine, txn, newOL, failedTransactions, true); + if (applyTransaction(engine, txn, newOL, true, false)) + failedTransactions.push_back(txn); } catch (...) { diff --git a/src/cpp/ripple/LedgerConsensus.h b/src/cpp/ripple/LedgerConsensus.h index a80cba3a0..1993ad105 100644 --- a/src/cpp/ripple/LedgerConsensus.h +++ b/src/cpp/ripple/LedgerConsensus.h @@ -140,8 +140,8 @@ protected: void sendHaveTxSet(const uint256& set, bool direct); void applyTransactions(SHAMap::ref transactionSet, Ledger::ref targetLedger, Ledger::ref checkLedger, CanonicalTXSet& failedTransactions, bool openLgr); - void applyTransaction(TransactionEngine& engine, SerializedTransaction::ref txn, - Ledger::ref targetLedger, CanonicalTXSet& failedTransactions, bool openLgr); + bool applyTransaction(TransactionEngine& engine, SerializedTransaction::ref txn, Ledger::ref targetLedger, + bool openLgr, bool retryAssured); uint32 roundCloseTime(uint32 closeTime); diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index 2f8641b70..8af514c7c 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -113,9 +113,9 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa cLog(lsINFO) << "applyTransaction: terResult=" << strToken << " : " << terResult << " : " << strHuman; if (terResult == tesSUCCESS) - { didApply = true; - } + else if (isTepSuccess(terResult) && isSetBit(params, tapRETRY)) + didApply = true; else if (isTecClaim(terResult) && !isSetBit(params, tapRETRY)) { // only claim the transaction fee cLog(lsINFO) << "Reprocessing to only claim fee"; @@ -155,7 +155,8 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa } } } - else cLog(lsINFO) << "Not applying transaction"; + else + cLog(lsINFO) << "Not applying transaction"; if (didApply) { From 032022a5bf5bce4a4179cb0d59bad0d48209adfa Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 18 Jan 2013 15:38:27 -0800 Subject: [PATCH 444/525] Clarify how security works in rippled-example.cfg --- rippled-example.cfg | 28 ++++++++++++++++++---------- src/cpp/ripple/WSConnection.h | 2 +- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index e8fc94fb2..9c3f12a86 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -114,27 +114,35 @@ # # [rpc_user]: # As a server, require a this user to specified and require rpc_password to -# be checked for RPC access. +# be checked for RPC access via the rpc_ip and rpc_port. The user and password +# must be specified via HTTP's basic authentication method. # -# As a client, supply this to the server. +# As a client, supply this to the server via HTTP's basic authentication +# method. # # [rpc_password]: # As a server, require a this password to specified and require rpc_user to -# be checked for RPC access. +# be checked for RPC access via the rpc_ip and rpc_port. The user and password +# must be specified via HTTP's basic authentication method. # -# As a client, supply this to the server. +# As a client, supply this to the server via HTTP's basic authentication +# method. # # [rpc_admin_user]: -# As a server, require a this user to specified and require rpc_admin_password -# to be checked for RPC admin functions. +# As a server, require this as the admin user to be specified. Also, require +# rpc_admin_user and rpc_admin_password to be checked for RPC admin functions. +# The request must specify these as the admin_user and admin_password in the +# request object. # -# As a client, supply this to the server. +# As a client, supply this to the server in the request object. # # [rpc_admin_password]: -# As a server, require a this password to specified and require rpc_admin_user -# to be checked for RPC admin functions. +# As a server, require this as the admin pasword to be specified. Also, +# require rpc_admin_user and rpc_admin_password to be checked for RPC admin +# functions. The request must specify these as the admin_user and +# admin_password in the request object. # -# As a client, supply this to the server. +# As a client, supply this to the server in the request object. # # [websocket_public_ip]: # IP address or domain to bind to allow untrusted connections from clients. diff --git a/src/cpp/ripple/WSConnection.h b/src/cpp/ripple/WSConnection.h index 0bb51e975..ca088225e 100644 --- a/src/cpp/ripple/WSConnection.h +++ b/src/cpp/ripple/WSConnection.h @@ -99,7 +99,7 @@ public: int iRole = mHandler->getPublic() ? RPCHandler::GUEST // Don't check on the public interface. - : iAdminGet(jvRequest, mRemoteIP); // XXX Fix this to return the remote IP. + : iAdminGet(jvRequest, mRemoteIP); if (RPCHandler::FORBID == iRole) { From 80d98e55a91c0b6c4da4d060795266f4ff10af3e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 18 Jan 2013 17:38:11 -0800 Subject: [PATCH 445/525] Clean up JSON reporting of booleans and network state. --- src/cpp/ripple/FeatureTable.cpp | 10 +++++----- src/cpp/ripple/JobQueue.cpp | 2 +- src/cpp/ripple/LedgerConsensus.cpp | 11 +++++++---- src/cpp/ripple/NetworkOPs.cpp | 24 +++++++++++++----------- src/cpp/ripple/NetworkOPs.h | 4 ++++ 5 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/cpp/ripple/FeatureTable.cpp b/src/cpp/ripple/FeatureTable.cpp index a014c81e9..af1d8349c 100644 --- a/src/cpp/ripple/FeatureTable.cpp +++ b/src/cpp/ripple/FeatureTable.cpp @@ -195,17 +195,17 @@ Json::Value FeatureTable::getJson(int) { Json::Value v(Json::objectValue); - v["supported"] = it.second.mSupported ? "true" : "false"; + v["supported"] = it.second.mSupported; if (it.second.mEnabled) - v["enabled"] = "true"; + v["enabled"] = true; else { - v["enabled"] = "false"; + v["enabled"] = false; if (mLastReport != 0) { if (it.second.mLastMajority == 0) - v["majority"] = "no"; + v["majority"] = false; else { if (it.second.mFirstMajority != 0) @@ -227,7 +227,7 @@ Json::Value FeatureTable::getJson(int) } if (it.second.mVetoed) - v["veto"] = "true"; + v["veto"] = true; ret[it.first.GetHex()] = v; } diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index 328654b07..40b7bf44c 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -159,7 +159,7 @@ Json::Value JobQueue::getJson(int) { Json::Value pri(Json::objectValue); if (isOver) - pri["over_target"] = "true"; + pri["over_target"] = true; pri["job_type"] = Job::toString(static_cast(i)); if (jobCount != 0) pri["waiting"] = static_cast(jobCount); diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 80c19931e..190477ad2 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -294,6 +294,7 @@ LedgerConsensus::LedgerConsensus(const uint256& prevLCLHash, Ledger::ref previou mHaveCorrectLCL = (mPreviousLedger->getHash() == mPrevLedgerHash); if (!mHaveCorrectLCL) { + theApp->getOPs().setProposing(false, false); handleLCL(mPrevLedgerHash); if (!mHaveCorrectLCL) { @@ -302,6 +303,8 @@ LedgerConsensus::LedgerConsensus(const uint256& prevLCLHash, Ledger::ref previou cLog(lsINFO) << "Correct LCL is: " << prevLCLHash; } } + else + theApp->getOPs().setProposing(mProposing, mValidating); } void LedgerConsensus::checkOurValidation() @@ -1343,18 +1346,18 @@ void LedgerConsensus::simulate() Json::Value LedgerConsensus::getJson() { Json::Value ret(Json::objectValue); - ret["proposing"] = mProposing ? "yes" : "no"; - ret["validating"] = mValidating ? "yes" : "no"; + ret["proposing"] = mProposing; + ret["validating"] = mValidating; ret["proposers"] = static_cast(mPeerPositions.size()); if (mHaveCorrectLCL) { - ret["synched"] = "yes"; + ret["synched"] = true; ret["ledger_seq"] = mPreviousLedger->getLedgerSeq() + 1; ret["close_granularity"] = mCloseResolution; } else - ret["synched"] = "no"; + ret["synched"] = false; switch (mState) { diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index cf4027480..aed040621 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -33,9 +33,9 @@ void InfoSub::onSendEmpty() } NetworkOPs::NetworkOPs(boost::asio::io_service& io_service, LedgerMaster* pLedgerMaster) : - mMode(omDISCONNECTED), mNeedNetworkLedger(false), mNetTimer(io_service), mLedgerMaster(pLedgerMaster), - mCloseTimeOffset(0), mLastCloseProposers(0), mLastCloseConvergeTime(1000 * LEDGER_IDLE_INTERVAL), - mLastValidationTime(0) + mMode(omDISCONNECTED), mNeedNetworkLedger(false), mProposing(false), mValidating(false), + mNetTimer(io_service), mLedgerMaster(pLedgerMaster), mCloseTimeOffset(0), mLastCloseProposers(0), + mLastCloseConvergeTime(1000 * LEDGER_IDLE_INTERVAL), mLastValidationTime(0) { } @@ -48,6 +48,14 @@ std::string NetworkOPs::strOperatingMode() "full" }; + if (mMode == omFULL) + { + if (mProposing) + return "proposing"; + if (mValidating) + return "validating"; + } + return paStatusToken[mMode]; } @@ -1100,14 +1108,8 @@ Json::Value NetworkOPs::getServerInfo(bool human, bool admin) if (theConfig.TESTNET) info["testnet"] = theConfig.TESTNET; - switch (mMode) - { - case omDISCONNECTED: info["server_state"] = "disconnected"; break; - case omCONNECTED: info["server_state"] = "connected"; break; - case omTRACKING: info["server_state"] = "tracking"; break; - case omFULL: info["server_state"] = "validating"; break; - default: info["server_state"] = "unknown"; - } + info["server_state"] = strOperatingMode(); + if (mNeedNetworkLedger) info["network_ledger"] = "waiting"; diff --git a/src/cpp/ripple/NetworkOPs.h b/src/cpp/ripple/NetworkOPs.h index 401e9b67f..0979671fb 100644 --- a/src/cpp/ripple/NetworkOPs.h +++ b/src/cpp/ripple/NetworkOPs.h @@ -76,6 +76,7 @@ protected: OperatingMode mMode; bool mNeedNetworkLedger; + bool mProposing, mValidating; boost::posix_time::ptime mConnectTime; boost::asio::deadline_timer mNetTimer; boost::shared_ptr mConsensus; @@ -238,6 +239,9 @@ public: void needNetworkLedger() { mNeedNetworkLedger = true; } void clearNeedNetworkLedger() { mNeedNetworkLedger = false; } bool isNeedNetworkLedger() { return mNeedNetworkLedger; } + void setProposing(bool p, bool v) { mProposing = p; mValidating = v; } + bool isProposing() { return mProposing; } + bool isValidating() { return mValidating; } void consensusViewChange(); int getPreviousProposers() { return mLastCloseProposers; } int getPreviousConvergeTime() { return mLastCloseConvergeTime; } From 76959ba1a78ba64eb0e87d5c972c865a758643b9 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 18 Jan 2013 17:57:23 -0800 Subject: [PATCH 446/525] UT: Add new test for retry logic - currently failing. --- test/send-test.js | 149 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/test/send-test.js b/test/send-test.js index 15ae2c69c..ca50273cb 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -748,6 +748,155 @@ buster.testCase("Nexus", { done(); }); }, + + "subscribe test: customer to customer with and without transfer fee: transaction retry logic" : + function (done) { + var self = this; + + // self.remote.set_trace(); + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "mtgox"], callback); + }, + function (callback) { + self.what = "Set credit limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "100/AUD/mtgox", + "bob" : "100/AUD/mtgox", + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "mtgox" : [ "1/AUD/alice" ], + }, + callback); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : "1/AUD/mtgox", + "mtgox" : "-1/AUD/alice", + }, + callback); + }, + function (callback) { + self.what = "Alice sends Bob 1 AUD"; + + self.remote.transaction() + .payment("alice", "bob", "1/AUD/mtgox") + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances 2."; + + testutils.verify_balances(self.remote, + { + "alice" : "0/AUD/mtgox", + "bob" : "1/AUD/mtgox", + "mtgox" : "-1/AUD/bob", + }, + callback); + }, + function (callback) { + self.what = "Set transfer rate."; + + self.remote.transaction() + .account_set("mtgox") + .transfer_rate(1e9*1.1) + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Bob sends Alice 0.5 AUD"; + + self.remote.transaction() + .payment("bob", "alice", "0.5/AUD/mtgox") + .send_max("0.55/AUD/mtgox") // !!! Very important. + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances 3."; + + testutils.verify_balances(self.remote, + { + "alice" : "0.5/AUD/mtgox", + "bob" : "0.45/AUD/mtgox", + "mtgox" : [ "-0.5/AUD/alice","-0.45/AUD/bob" ], + }, + callback); + }, + function (callback) { + self.what = "Subscribe and accept."; + + self.count = 0; + self.found = 0; + + self.remote.on('ledger_closed', function (m) { + // console.log("#### LEDGER_CLOSE: %s", JSON.stringify(m)); + }); + + self.remote + .on('account', function (m) { + // console.log("ACCOUNT: %s", JSON.stringify(m)); + self.found = 1; + }) + .on('ledger_closed', function (m) { + // console.log("LEDGER_CLOSE: %d: %s", self.count, JSON.stringify(m)); + + if (self.count) { + callback(!self.found); + } + else { + self.count = 1; + + self.remote.ledger_accept(); + } + }) + .request_subscribe().accounts("mtgox") + .request(); + + self.remote.ledger_accept(); + }, + function (callback) { + self.what = "Verify balances 4."; + + testutils.verify_balances(self.remote, + { + "alice" : "0.5/AUD/mtgox", + "bob" : "0.45/AUD/mtgox", + "mtgox" : [ "-0.5/AUD/alice","-0.45/AUD/bob" ], + }, + callback); + }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, }); buster.testCase("Indirect ripple", { From 87c661f77896e7e1f65720bce2d1b0b13096b613 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Sat, 19 Jan 2013 10:56:48 +0100 Subject: [PATCH 447/525] JS: Add account_info RPC method. --- src/js/remote.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/js/remote.js b/src/js/remote.js index cf3e10863..0058b9b90 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -747,6 +747,14 @@ Remote.prototype.request_transaction_entry = function (hash, current) { .tx_hash(hash); }; +Remote.prototype.request_account_info = function (accountID) { + var request = new Request(this, 'account_info'); + + request.message.ident = UInt160.json_rewrite(accountID); + + return request; +}; + // --> account_index: sub_account index (optional) // --> current: true, for the current ledger. Remote.prototype.request_account_lines = function (accountID, account_index, current) { From 51bbe5ffc84d4f02221c6f5d3d61139610dd54fa Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 19 Jan 2013 12:58:37 -0800 Subject: [PATCH 448/525] Add path test for issue #23. --- src/cpp/ripple/LedgerEntrySet.cpp | 5 ++ src/cpp/ripple/LedgerMaster.cpp | 4 -- src/cpp/ripple/OfferCreateTransactor.cpp | 9 +++ test/path-test.js | 85 +++++++++++++++++++++--- 4 files changed, 90 insertions(+), 13 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 5b6b926d6..4bd70f53b 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -525,6 +525,11 @@ TER LedgerEntrySet::dirAdd( const uint256& uLedgerIndex, boost::function fDescriber) { +cLog(lsDEBUG) + << boost::str(boost::format("dirAdd: uRootIndex=%s uLedgerIndex=%s") + % uRootIndex.ToString() + % uLedgerIndex.ToString()); + SLE::pointer sleNode; STVector256 svIndexes; SLE::pointer sleRoot = entryCache(ltDIR_NODE, uRootIndex); diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 60b5b464c..e27c35007 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -531,10 +531,6 @@ void LedgerMaster::pubThread() cLog(lsDEBUG) << "Publishing ledger " << l->getLedgerSeq(); setFullLedger(l); // OPTIMIZEME: This is actually more work than we need to do theApp->getOPs().pubLedger(l); - BOOST_FOREACH(callback& c, mOnValidate) - { - c(l); - } } } } diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index aa7929c41..05a469ebf 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -229,11 +229,16 @@ TER OfferCreateTransactor::takeOffers( } } + cLog(lsINFO) << "takeOffers: " << transToken(terResult); + // On storing meta data, delete offers that were found unfunded to prevent encountering them in future. if (tesSUCCESS == terResult) { BOOST_FOREACH(const uint256& uOfferIndex, usOfferUnfundedFound) { + + cLog(lsINFO) << "takeOffers: found unfunded: " << uOfferIndex.ToString(); + terResult = mEngine->getNodes().offerDelete(uOfferIndex); if (tesSUCCESS != terResult) break; @@ -245,12 +250,16 @@ TER OfferCreateTransactor::takeOffers( // On success, delete offers that became unfunded. BOOST_FOREACH(const uint256& uOfferIndex, usOfferUnfundedBecame) { + cLog(lsINFO) << "takeOffers: became unfunded: " << uOfferIndex.ToString(); + terResult = mEngine->getNodes().offerDelete(uOfferIndex); if (tesSUCCESS != terResult) break; } } + cLog(lsINFO) << "takeOffers< " << transToken(terResult); + return terResult; } diff --git a/test/path-test.js b/test/path-test.js index 692a3940c..5c6ee0a0f 100644 --- a/test/path-test.js +++ b/test/path-test.js @@ -661,13 +661,13 @@ buster.testCase("More Path finding", { // Test alternative paths with qualities. }); -buster.testCase("Path negatives", { +buster.testCase("Issues", { // 'setUp' : testutils.build_setup({ verbose: true, no_server: true }), // 'setUp' : testutils.build_setup({ verbose: true }), 'setUp' : testutils.build_setup(), 'tearDown' : testutils.build_teardown(), - "Issue #5" : + "Path negative: Issue #5" : function (done) { var self = this; @@ -691,14 +691,17 @@ buster.testCase("Path negatives", { callback); }, function (callback) { - self.what = "Distribute funds."; + self.what = "Alice sends via a path"; - testutils.payments(self.remote, - { - // 4. acct 2 sent acct 3 a 75 iou - "bob" : "75/USD/carol", - }, - callback); + self.remote.transaction() + .payment("alice", "bob", "55/USD/mtgox") + .path_add( [ { account: "carol" } ]) + .on('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); }, function (callback) { self.what = "Verify balances."; @@ -764,6 +767,70 @@ buster.testCase("Path negatives", { buster.refute(error, self.what); done(); }); + }, + + "//Path negative: Issue #23: smaller" : + // alice -120 USD-> michael -25 USD-> amy + // alice -25 USD-> Bill -75 USD -> Sam -100 USD-> Amy + // + // alice -- limit 40 --> bob + // alice --> carol --> dan --> bob + // Balance of 100 USD Bob - Balance of 37 USD -> Rod + // + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "carol", "dan"], callback); + }, + function (callback) { + self.what = "Set credit limits."; + + testutils.credit_limits(self.remote, + { + "bob" : [ "40/USD/alice", "20/USD/dan" ], + "dan" : [ "20/USD/carol" ], + "carol" : [ "20/USD/alice" ], + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + // 4. acct 2 sent acct 3 a 75 iou + "alice" : "55/USD/bob", + }, + callback); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "bob" : [ "40/USD/alice", "15/USD/dan" ], + }, + callback); + }, +// function (callback) { +// self.what = "Display ledger"; +// +// self.remote.request_ledger('current', true) +// .on('success', function (m) { +// console.log("Ledger: %s", JSON.stringify(m, undefined, 2)); +// +// callback(); +// }) +// .request(); +// }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); } }); // vim:sw=2:sts=2:ts=8:et From 4c6920dd5595a0a05ef47c502e8ca88df6f66ebd Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 19 Jan 2013 14:09:42 -0800 Subject: [PATCH 449/525] Add extra debug to better understand how the txn retry logic is working. Avoid an extra transaction pass caused by failed transactions counting as changes. Downgrade some debug messages from INFO to DEBUG. --- src/cpp/ripple/LedgerConsensus.cpp | 57 +++++++++++++++++++----------- src/cpp/ripple/LedgerConsensus.h | 2 +- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 190477ad2..c2aef215e 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1088,13 +1088,22 @@ void LedgerConsensus::playbackProposals() } } -bool LedgerConsensus::applyTransaction(TransactionEngine& engine, SerializedTransaction::ref txn, Ledger::ref ledger, +#define LCAT_SUCCESS 0 +#define LCAT_FAIL 1 +#define LCAT_RETRY 2 + +int LedgerConsensus::applyTransaction(TransactionEngine& engine, SerializedTransaction::ref txn, Ledger::ref ledger, bool openLedger, bool retryAssured) { // Returns false if the transaction has need not be retried. TransactionEngineParams parms = openLedger ? tapOPEN_LEDGER : tapNONE; if (retryAssured) parms = static_cast(parms | tapRETRY); + cLog(lsDEBUG) << "TXN " << txn->getTransactionID() + << (openLedger ? " open" : " closed") + << (retryAssured ? "/retry" : "/final"); + cLog(lsTRACE) << txn->getJson(0); + #ifndef TRUST_NETWORK try { @@ -1104,19 +1113,19 @@ bool LedgerConsensus::applyTransaction(TransactionEngine& engine, SerializedTran TER result = engine.applyTransaction(*txn, parms, didApply); if (didApply) { - cLog(lsDEBUG) << "Transaction success"; - return false; + cLog(lsDEBUG) << "Transaction success: " << transHuman(result); + return LCAT_SUCCESS; } if (isTefFailure(result) || isTemMalformed(result)) { // failure - cLog(lsDEBUG) << "Transaction failure"; - return false; + cLog(lsDEBUG) << "Transaction failure: " << transHuman(result); + return LCAT_FAIL; } - cLog(lsDEBUG) << "Retry needed"; + cLog(lsDEBUG) << "Transaction retry: " << transHuman(result); assert(!ledger->hasTransaction(txn->getTransactionID())); - return true; + return LCAT_RETRY; #ifndef TRUST_NETWORK } @@ -1134,7 +1143,6 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger TransactionEngine engine(applyLedger); for (SHAMapItem::pointer item = set->peekFirstItem(); !!item; item = set->peekNextItem(item->getTag())) - { if (!checkLedger->hasTransaction(item->getTag())) { cLog(lsINFO) << "Processing candidate transaction: " << item->getTag(); @@ -1144,7 +1152,7 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger #endif SerializerIterator sit(item->peekSerializer()); SerializedTransaction::pointer txn = boost::make_shared(boost::ref(sit)); - if (applyTransaction(engine, txn, applyLedger, openLgr, true)) + if (applyTransaction(engine, txn, applyLedger, openLgr, true) != LCAT_FAIL) failedTransactions.push_back(txn); #ifndef TRUST_NETWORK } @@ -1154,13 +1162,14 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger } #endif } - } int changes; bool certainRetry = true; for (int pass = 0; pass < 8; ++pass) { + cLog(lsDEBUG) << "Pass: " << pass << " Txns: " << failedTransactions.size() + << (certainRetry ? " retriable" : " final"); changes = 0; CanonicalTXSet::iterator it = failedTransactions.begin(); @@ -1168,20 +1177,28 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger { try { - if (!applyTransaction(engine, it->second, applyLedger, openLgr, certainRetry)) + switch (applyTransaction(engine, it->second, applyLedger, openLgr, certainRetry)) { - ++changes; - it = failedTransactions.erase(it); + case LCAT_SUCCESS: + it = failedTransactions.erase(it); + ++changes; + break; + + case LCAT_FAIL: + it = failedTransactions.erase(it); + break; + + case LCAT_RETRY: + ++it; } - else - ++it; } catch (...) { - cLog(lsWARNING) << " Throws"; + cLog(lsWARNING) << "Transaction throws"; it = failedTransactions.erase(it); } } + cLog(lsDEBUG) << "Pass: " << pass << " finished " << changes << " changes"; // A non-retry pass made no changes if (!changes && !certainRetry) @@ -1190,7 +1207,6 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger // Stop retriable passes if ((!changes) || (pass >= 4)) certainRetry = false; - } } @@ -1226,6 +1242,7 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) newLCL->peekTransactionMap()->armDirty(); newLCL->peekAccountStateMap()->armDirty(); + cLog(lsDEBUG) << "Applying consensus set transactions to the last closed ledger"; applyTransactions(set, newLCL, newLCL, failedTransactions, false); newLCL->updateSkipList(); newLCL->setClosed(); @@ -1286,7 +1303,7 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) { // we voted NO try { - cLog(lsINFO) << "Test applying disputed transaction that did not get in"; + cLog(lsDEBUG) << "Test applying disputed transaction that did not get in"; SerializerIterator sit(it.second->peekTransaction()); SerializedTransaction::pointer txn = boost::make_shared(boost::ref(sit)); if (applyTransaction(engine, txn, newOL, true, false)) @@ -1294,12 +1311,12 @@ void LedgerConsensus::accept(SHAMap::ref set, LoadEvent::pointer) } catch (...) { - cLog(lsINFO) << "Failed to apply transaction we voted NO on"; + cLog(lsDEBUG) << "Failed to apply transaction we voted NO on"; } } } - cLog(lsINFO) << "Applying transactions from current ledger"; + cLog(lsDEBUG) << "Applying transactions from current open ledger"; applyTransactions(theApp->getLedgerMaster().getCurrentLedger()->peekTransactionMap(), newOL, newLCL, failedTransactions, true); theApp->getLedgerMaster().pushLedger(newLCL, newOL, !mConsensusFail); diff --git a/src/cpp/ripple/LedgerConsensus.h b/src/cpp/ripple/LedgerConsensus.h index 1993ad105..b40e182da 100644 --- a/src/cpp/ripple/LedgerConsensus.h +++ b/src/cpp/ripple/LedgerConsensus.h @@ -140,7 +140,7 @@ protected: void sendHaveTxSet(const uint256& set, bool direct); void applyTransactions(SHAMap::ref transactionSet, Ledger::ref targetLedger, Ledger::ref checkLedger, CanonicalTXSet& failedTransactions, bool openLgr); - bool applyTransaction(TransactionEngine& engine, SerializedTransaction::ref txn, Ledger::ref targetLedger, + int applyTransaction(TransactionEngine& engine, SerializedTransaction::ref txn, Ledger::ref targetLedger, bool openLgr, bool retryAssured); uint32 roundCloseTime(uint32 closeTime); From 308ca21b977b6be5d548e91b11c41d9103c70527 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 19 Jan 2013 14:15:56 -0800 Subject: [PATCH 450/525] Make tecUNFUNDED more specific and fix WalletAdd. --- src/cpp/ripple/OfferCreateTransactor.cpp | 2 +- src/cpp/ripple/PaymentTransactor.cpp | 2 +- src/cpp/ripple/TransactionErr.cpp | 5 ++++- src/cpp/ripple/TransactionErr.h | 5 ++++- src/cpp/ripple/WalletAddTransactor.cpp | 26 ++++++++++++++---------- test/offer-test.js | 2 +- test/reserve-test.js | 2 +- 7 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index 05a469ebf..546f0c75a 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -340,7 +340,7 @@ TER OfferCreateTransactor::doApply() { cLog(lsWARNING) << "OfferCreate: delay: Offers must be at least partially funded."; - terResult = tecUNFUNDED; + terResult = tecUNFUNDED_OFFER; } if (tesSUCCESS == terResult && !saTakerPays.isNative()) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index 74e376393..813328052 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -161,7 +161,7 @@ TER PaymentTransactor::doApply() cLog(lsINFO) << boost::str(boost::format("Payment: Delay transaction: Insufficient funds: %s / %s (%d)") % saSrcXRPBalance.getText() % (saDstAmount + uReserve).getText() % uReserve); - terResult = tecUNFUNDED; + terResult = tecUNFUNDED_PAYMENT; } else { diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index d9a55901f..a10f4c97d 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -19,7 +19,10 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { tecPATH_DRY, "tecPATH_DRY", "Path could not send partial amount." }, { tecPATH_PARTIAL, "tecPATH_PARTIAL", "Path could not send full amount." }, - { tecUNFUNDED, "tecUNFUNDED", "Source account had insufficient balance for transaction." }, + { tecUNFUNDED, "tecUNFUNDED", "One of _ADD, _OFFER, or _SEND. Deprecated." }, + { tecUNFUNDED_ADD, "tecUNFUNDED_ADD", "Insufficient XRP balance for WalletAdd." }, + { tecUNFUNDED_OFFER, "tecUNFUNDED_OFFER", "Insufficient balance to fund created offer." }, + { tecUNFUNDED_PAYMENT, "tecUNFUNDED_PAYMENT", "Insufficient XRP balance to send." }, { tefFAILURE, "tefFAILURE", "Failed to apply." }, { tefALREADY, "tefALREADY", "The exact transaction was already in this ledger." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index e87ac3ead..525f03645 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -111,6 +111,9 @@ enum TER // aka TransactionEngineResult // DO NOT CHANGE THESE NUMBERS: They appear in ledger meta data. tecCLAIM = 100, tecPATH_PARTIAL = 101, + tecUNFUNDED_ADD = 102, + tecUNFUNDED_OFFER = 103, + tecUNFUNDED_PAYMENT = 104, tecDIR_FULL = 121, tecINSUF_RESERVE_LINE = 122, tecINSUF_RESERVE_OFFER = 123, @@ -119,7 +122,7 @@ enum TER // aka TransactionEngineResult tecNO_LINE_INSUF_RESERVE = 126, tecNO_LINE_REDUNDANT = 127, tecPATH_DRY = 128, - tecUNFUNDED = 129, + tecUNFUNDED = 129, // Old ambigous unfunded. }; #define isTelLocal(x) ((x) >= telLOCAL_ERROR && (x) < temMALFORMED) diff --git a/src/cpp/ripple/WalletAddTransactor.cpp b/src/cpp/ripple/WalletAddTransactor.cpp index 05a06dc1c..5dd935007 100644 --- a/src/cpp/ripple/WalletAddTransactor.cpp +++ b/src/cpp/ripple/WalletAddTransactor.cpp @@ -38,29 +38,33 @@ TER WalletAddTransactor::doApply() return tefCREATED; } - STAmount saAmount = mTxn.getFieldAmount(sfAmount); - STAmount saSrcBalance = mTxnAccount->getFieldAmount(sfBalance); + // Direct XRP payment. - if (saSrcBalance < saAmount) + STAmount saDstAmount = mTxn.getFieldAmount(sfAmount); + const STAmount saSrcBalance = mTxnAccount->getFieldAmount(sfBalance); + const uint32 uOwnerCount = mTxnAccount->getFieldU32(sfOwnerCount); + const uint64 uReserve = mEngine->getLedger()->getReserve(uOwnerCount); + STAmount saPaid = mTxn.getTransactionFee(); + + // Make sure have enough reserve to send. Allow final spend to use reserve for fee. + if (saSrcBalance + saPaid < saDstAmount + uReserve) // Reserve is not scaled by fee. { - std::cerr - << boost::str(boost::format("WalletAdd: Delay transaction: insufficient balance: balance=%s amount=%s") - % saSrcBalance.getText() - % saAmount.getText()) - << std::endl; + // Vote no. However, transaction might succeed, if applied in a different order. + cLog(lsINFO) << boost::str(boost::format("WalletAdd: Delay transaction: Insufficient funds: %s / %s (%d)") + % saSrcBalance.getText() % (saDstAmount + uReserve).getText() % uReserve); - return tecUNFUNDED; + return tecUNFUNDED_ADD; } // Deduct initial balance from source account. - mTxnAccount->setFieldAmount(sfBalance, saSrcBalance-saAmount); + mTxnAccount->setFieldAmount(sfBalance, saSrcBalance-saDstAmount); // Create the account. sleDst = mEngine->entryCreate(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(uDstAccountID)); sleDst->setFieldAccount(sfAccount, uDstAccountID); sleDst->setFieldU32(sfSequence, 1); - sleDst->setFieldAmount(sfBalance, saAmount); + sleDst->setFieldAmount(sfBalance, saDstAmount); sleDst->setFieldAccount(sfRegularKey, uAuthKeyID); std::cerr << "WalletAdd<" << std::endl; diff --git a/test/offer-test.js b/test/offer-test.js index 1e347fd13..09d6aeb28 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -517,7 +517,7 @@ buster.testCase("Offer tests", { .offer_create("bob", "50/USD/alice", "200/EUR/carol") .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); - callback(m.result !== 'tecUNFUNDED'); + callback(m.result !== 'tecUNFUNDED_OFFER'); seq = m.tx_json.Sequence; }) diff --git a/test/reserve-test.js b/test/reserve-test.js index 50c5d4e74..995345ccc 100644 --- a/test/reserve-test.js +++ b/test/reserve-test.js @@ -481,7 +481,7 @@ buster.testCase("Reserve", { .offer_create("bob", "50/USD/alice", "200/EUR/carol") .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); - callback(m.result !== 'tecUNFUNDED'); + callback(m.result !== 'tecUNFUNDED_OFFER'); seq = m.tx_json.Sequence; }) From 00e97a8938cfc687820bb3033307738fce757345 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 19 Jan 2013 14:26:05 -0800 Subject: [PATCH 451/525] Cosmetic. --- src/cpp/ripple/TransactionErr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 525f03645..366ad3733 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -122,7 +122,7 @@ enum TER // aka TransactionEngineResult tecNO_LINE_INSUF_RESERVE = 126, tecNO_LINE_REDUNDANT = 127, tecPATH_DRY = 128, - tecUNFUNDED = 129, // Old ambigous unfunded. + tecUNFUNDED = 129, // Depericated, old ambiguous unfunded. }; #define isTelLocal(x) ((x) >= telLOCAL_ERROR && (x) < temMALFORMED) From 07091cfc3ce5f47bd7153e6ed044503d75c92bd0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 19 Jan 2013 14:31:31 -0800 Subject: [PATCH 452/525] Fixes. --- src/cpp/ripple/LedgerConsensus.cpp | 4 ++-- src/cpp/ripple/TransactionEngine.cpp | 8 +++----- src/cpp/ripple/TransactionErr.h | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index c2aef215e..5fcd7388d 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1166,7 +1166,7 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger int changes; bool certainRetry = true; - for (int pass = 0; pass < 8; ++pass) + for (int pass = 0; pass < 12; ++pass) { cLog(lsDEBUG) << "Pass: " << pass << " Txns: " << failedTransactions.size() << (certainRetry ? " retriable" : " final"); @@ -1205,7 +1205,7 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger return; // Stop retriable passes - if ((!changes) || (pass >= 4)) + if ((!changes) || (pass >= 8)) certainRetry = false; } } diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index 8af514c7c..2083b4e05 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -112,11 +112,7 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa cLog(lsINFO) << "applyTransaction: terResult=" << strToken << " : " << terResult << " : " << strHuman; - if (terResult == tesSUCCESS) - didApply = true; - else if (isTepSuccess(terResult) && isSetBit(params, tapRETRY)) - didApply = true; - else if (isTecClaim(terResult) && !isSetBit(params, tapRETRY)) + if (isTecClaim(terResult) && !isSetBit(params, tapRETRY)) { // only claim the transaction fee cLog(lsINFO) << "Reprocessing to only claim fee"; mNodes.clear(); @@ -155,6 +151,8 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa } } } + else if ((terResult == tesSUCCESS) || (isTesSuccess(terResult) && !isSetBit(params, tapRETRY))) + didApply = true; else cLog(lsINFO) << "Not applying transaction"; diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index e87ac3ead..04fa50f96 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -126,7 +126,7 @@ enum TER // aka TransactionEngineResult #define isTemMalformed(x) ((x) >= temMALFORMED && (x) < tefFAILURE) #define isTefFailure(x) ((x) >= tefFAILURE && (x) < terRETRY) #define isTerRetry(x) ((x) >= terRETRY && (x) < tesSUCCESS) -#define isTepSuccess(x) ((x) >= tesSUCCESS) +#define isTesSuccess(x) ((x) >= tesSUCCESS) #define isTecClaim(x) ((x) >= tecCLAIM) bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman); From 4ab11d14f3345432f5c78dac7ca8902450000010 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 19 Jan 2013 16:35:21 -0800 Subject: [PATCH 453/525] UT: Fix Issue #5 test. --- test/path-test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/path-test.js b/test/path-test.js index 5c6ee0a0f..d10a97e3b 100644 --- a/test/path-test.js +++ b/test/path-test.js @@ -691,11 +691,11 @@ buster.testCase("Issues", { callback); }, function (callback) { - self.what = "Alice sends via a path"; + // 4. acct 2 sent acct 3 a 75 iou + self.what = "Bob sends Carol 75."; self.remote.transaction() - .payment("alice", "bob", "55/USD/mtgox") - .path_add( [ { account: "carol" } ]) + .payment("bob", "carol", "75/USD/bob") .on('proposed', function (m) { // console.log("proposed: %s", JSON.stringify(m)); From cc2fcb9f25059284438b91ee0b1f690ed19a1941 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 19 Jan 2013 17:11:28 -0800 Subject: [PATCH 454/525] Typo. --- src/cpp/ripple/TransactionErr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index cfa3cca59..dcb9627f9 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -122,7 +122,7 @@ enum TER // aka TransactionEngineResult tecNO_LINE_INSUF_RESERVE = 126, tecNO_LINE_REDUNDANT = 127, tecPATH_DRY = 128, - tecUNFUNDED = 129, // Depericated, old ambiguous unfunded. + tecUNFUNDED = 129, // Deprecated, old ambiguous unfunded. }; #define isTelLocal(x) ((x) >= telLOCAL_ERROR && (x) < temMALFORMED) From fe2ffafb10cc9abde93082895d1b2a98675dc029 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 19 Jan 2013 18:53:42 -0800 Subject: [PATCH 455/525] UT: Tests for ripple-client issue #23. --- src/cpp/ripple/RPCHandler.cpp | 12 ++--- test/path-test.js | 89 ++++++++++++++++++++++++++++++----- test/send-test.js | 2 +- 3 files changed, 84 insertions(+), 19 deletions(-) diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index c7dbbfaec..846e51a8f 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -77,9 +77,7 @@ Json::Value RPCHandler::transactionSign(Json::Value jvRequest, bool bSubmit) RippleAddress naSeed; RippleAddress raSrcAddressID; - cLog(lsDEBUG) - << boost::str(boost::format("transactionSign: %s") - % jvRequest); + cLog(lsDEBUG) << boost::str(boost::format("transactionSign: %s") % jvRequest); if (!jvRequest.isMember("secret") || !jvRequest.isMember("tx_json")) { @@ -177,15 +175,15 @@ Json::Value RPCHandler::transactionSign(Json::Value jvRequest, bool bSubmit) Pathfinder pf(raSrcAddressID, dstAccountID, saSendMax.getCurrency(), saSendMax.getIssuer(), saSend); - if (!pf.findPaths(5, 3, spsPaths)) + if (!pf.findPaths(7, 3, spsPaths)) { - cLog(lsDEBUG) << "payment: build_path: No paths found."; + cLog(lsDEBUG) << "transactionSign: build_path: No paths found."; return rpcError(rpcNO_PATH); } else { - cLog(lsDEBUG) << "payment: build_path: " << spsPaths.getJson(0); + cLog(lsDEBUG) << "transactionSign: build_path: " << spsPaths.getJson(0); } if (!spsPaths.isEmpty()) @@ -1146,7 +1144,7 @@ Json::Value RPCHandler::doRipplePathFind(Json::Value jvRequest) STPathSet spsComputed; Pathfinder pf(raSrc, raDst, uSrcCurrencyID, uSrcIssuerID, saDstAmount); - if (!pf.findPaths(5, 3, spsComputed)) + if (!pf.findPaths(7, 3, spsComputed)) { cLog(lsDEBUG) << "ripple_path_find: No paths found."; } diff --git a/test/path-test.js b/test/path-test.js index d10a97e3b..9cc0d7f82 100644 --- a/test/path-test.js +++ b/test/path-test.js @@ -769,9 +769,7 @@ buster.testCase("Issues", { }); }, - "//Path negative: Issue #23: smaller" : - // alice -120 USD-> michael -25 USD-> amy - // alice -25 USD-> Bill -75 USD -> Sam -100 USD-> Amy + "Path negative: ripple-client issue #23: smaller" : // // alice -- limit 40 --> bob // alice --> carol --> dan --> bob @@ -792,20 +790,22 @@ buster.testCase("Issues", { testutils.credit_limits(self.remote, { "bob" : [ "40/USD/alice", "20/USD/dan" ], - "dan" : [ "20/USD/carol" ], "carol" : [ "20/USD/alice" ], + "dan" : [ "20/USD/carol" ], }, callback); }, function (callback) { - self.what = "Distribute funds."; + self.what = "Payment."; - testutils.payments(self.remote, - { - // 4. acct 2 sent acct 3 a 75 iou - "alice" : "55/USD/bob", - }, - callback); + self.remote.transaction() + .payment('alice', 'bob', "55/USD/bob") + .build_path(true) + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); }, function (callback) { self.what = "Verify balances."; @@ -826,6 +826,73 @@ buster.testCase("Issues", { // callback(); // }) // .request(); +// }, + ], function (error) { + buster.refute(error, self.what); + done(); + }); + }, + + "Path negative: ripple-client issue #23: larger" : + // + // alice -120 USD-> amazon -25 USD-> bob + // alice -25 USD-> carol -75 USD -> dan -100 USD-> bob + // + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "10000.0", ["alice", "bob", "carol", "dan", "amazon"], callback); + }, + function (callback) { + self.what = "Set credit limits."; + + testutils.credit_limits(self.remote, + { + "amazon" : [ "120/USD/alice" ], + "bob" : [ "25/USD/amazon", "100/USD/dan" ], + "carol" : [ "25/USD/alice" ], + "dan" : [ "75/USD/carol" ], + }, + callback); + }, + function (callback) { + self.what = "Payment."; + + self.remote.transaction() + .payment('alice', 'bob', "50/USD/bob") + .build_path(true) + .once('proposed', function (m) { + // console.log("proposed: %s", JSON.stringify(m)); + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : [ "-25/USD/amazon", "-25/USD/carol" ], + "bob" : [ "25/USD/amazon", "25/USD/dan" ], + "carol" : [ "25/USD/alice", "-25/USD/dan" ], + "dan" : [ "25/USD/carol", "-25/USD/bob" ], + }, + callback); + }, +// function (callback) { +// self.what = "Display ledger"; +// +// self.remote.request_ledger('current', true) +// .on('success', function (m) { +// console.log("Ledger: %s", JSON.stringify(m, undefined, 2)); +// +// callback(); +// }) +// .request(); // }, ], function (error) { buster.refute(error, self.what); diff --git a/test/send-test.js b/test/send-test.js index ca50273cb..e414943db 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -495,7 +495,7 @@ buster.testCase("Sending future", { // Ripple with one-way credit path. }); -buster.testCase("Nexus", { +buster.testCase("Gateway", { // 'setUp' : testutils.build_setup({ verbose: true }), 'setUp' : testutils.build_setup(), 'tearDown' : testutils.build_teardown(), From 5d8e6734c305844098157454667c36244737dddf Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 20 Jan 2013 14:42:08 -0800 Subject: [PATCH 456/525] Split websocket ssl settings for public and private. --- rippled-example.cfg | 15 +++++++++++++++ src/cpp/ripple/Config.cpp | 5 +++++ src/cpp/ripple/Config.h | 1 + src/cpp/ripple/WSDoor.cpp | 2 +- 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 9c3f12a86..9b60178d7 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -157,6 +157,16 @@ # this option will go away and the peer_ip will accept websocket client # connections. # +# [websocket_public_secure] +# 0 or 1. +# 0: Provide ws service for websocket_public_ip/websocket_public_port. +# 1: Provide wss service for websocket_public_ip/websocket_public_port. [default] +# +# Browser pages like the Ripple client will not be able to connect to a secure +# websocket connection if a self-signed certificate is used. As the Ripple +# reference client currently shares secrets with its server, this should be +# enabled. +# # [websocket_ip]: # IP address or domain to bind to allow trusted ADMIN connections from backend # applications. @@ -167,6 +177,11 @@ # [websocket_port]: # Port to bind to allow trusted ADMIN connections from backend applications. # +# [websocket_secure] +# 0 or 1. +# 0: Provide ws service for websocket_ip/websocket_port. [default] +# 1: Provide wss service for websocket_ip/websocket_port. +# # [websocket_ssl_key]: # Specify the filename holding the SSL key in PEM format. # diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index 66625cd26..e0215c302 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -49,6 +49,7 @@ #define SECTION_VALIDATION_SEED "validation_seed" #define SECTION_WEBSOCKET_PUBLIC_IP "websocket_public_ip" #define SECTION_WEBSOCKET_PUBLIC_PORT "websocket_public_port" +#define SECTION_WEBSOCKET_PUBLIC_SECURE "websocket_public_secure" #define SECTION_WEBSOCKET_IP "websocket_ip" #define SECTION_WEBSOCKET_PORT "websocket_port" #define SECTION_WEBSOCKET_SECURE "websocket_secure" @@ -177,6 +178,7 @@ Config::Config() RPC_PORT = 5001; WEBSOCKET_PORT = SYSTEM_WEBSOCKET_PORT; WEBSOCKET_PUBLIC_PORT = SYSTEM_WEBSOCKET_PUBLIC_PORT; + WEBSOCKET_PUBLIC_SECURE = true; WEBSOCKET_SECURE = false; NUMBER_CONNECTIONS = 30; @@ -334,6 +336,9 @@ void Config::load() if (sectionSingleB(secConfig, SECTION_WEBSOCKET_SECURE, strTemp)) WEBSOCKET_SECURE = boost::lexical_cast(strTemp); + if (sectionSingleB(secConfig, SECTION_WEBSOCKET_PUBLIC_SECURE, strTemp)) + WEBSOCKET_PUBLIC_SECURE = boost::lexical_cast(strTemp); + sectionSingleB(secConfig, SECTION_WEBSOCKET_SSL_CERT, WEBSOCKET_SSL_CERT); sectionSingleB(secConfig, SECTION_WEBSOCKET_SSL_CHAIN, WEBSOCKET_SSL_CHAIN); sectionSingleB(secConfig, SECTION_WEBSOCKET_SSL_KEY, WEBSOCKET_SSL_KEY); diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index e67200fb8..1bc8e54d1 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -101,6 +101,7 @@ public: // Websocket networking parameters std::string WEBSOCKET_PUBLIC_IP; // XXX Going away. Merge with the inbound peer connction. int WEBSOCKET_PUBLIC_PORT; + bool WEBSOCKET_PUBLIC_SECURE; std::string WEBSOCKET_IP; int WEBSOCKET_PORT; diff --git a/src/cpp/ripple/WSDoor.cpp b/src/cpp/ripple/WSDoor.cpp index 1075c5996..961ec3f3c 100644 --- a/src/cpp/ripple/WSDoor.cpp +++ b/src/cpp/ripple/WSDoor.cpp @@ -59,7 +59,7 @@ void WSDoor::startListening() SSL_CTX_set_tmp_dh_callback(mCtx->native_handle(), handleTmpDh); - if (theConfig.WEBSOCKET_SECURE) + if (mPublic ? theConfig.WEBSOCKET_PUBLIC_SECURE : theConfig.WEBSOCKET_SECURE) { // Construct a single handler for all requests. websocketpp::server_tls::handler::ptr handler(new WSServerHandler(mCtx, mPublic)); From d0d81a52f5db595814e1000cca7bf672a69d9b6b Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 20 Jan 2013 15:52:42 -0800 Subject: [PATCH 457/525] UT: fix transaction processing retry test. --- test/send-test.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/test/send-test.js b/test/send-test.js index e414943db..82dd52c5b 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -749,7 +749,7 @@ buster.testCase("Gateway", { }); }, - "subscribe test: customer to customer with and without transfer fee: transaction retry logic" : + "=>subscribe test: customer to customer with and without transfer fee: transaction retry logic" : function (done) { var self = this; @@ -813,24 +813,24 @@ buster.testCase("Gateway", { }, callback); }, - function (callback) { - self.what = "Set transfer rate."; - - self.remote.transaction() - .account_set("mtgox") - .transfer_rate(1e9*1.1) - .once('proposed', function (m) { - // console.log("proposed: %s", JSON.stringify(m)); - callback(m.result !== 'tesSUCCESS'); - }) - .submit(); - }, +// function (callback) { +// self.what = "Set transfer rate."; +// +// self.remote.transaction() +// .account_set("mtgox") +// .transfer_rate(1e9*1.1) +// .once('proposed', function (m) { +// // console.log("proposed: %s", JSON.stringify(m)); +// callback(m.result !== 'tesSUCCESS'); +// }) +// .submit(); +// }, function (callback) { self.what = "Bob sends Alice 0.5 AUD"; self.remote.transaction() .payment("bob", "alice", "0.5/AUD/mtgox") - .send_max("0.55/AUD/mtgox") // !!! Very important. +// .send_max("0.55/AUD/mtgox") // !!! Very important. .on('proposed', function (m) { // console.log("proposed: %s", JSON.stringify(m)); @@ -844,8 +844,8 @@ buster.testCase("Gateway", { testutils.verify_balances(self.remote, { "alice" : "0.5/AUD/mtgox", - "bob" : "0.45/AUD/mtgox", - "mtgox" : [ "-0.5/AUD/alice","-0.45/AUD/bob" ], + "bob" : "0.5/AUD/mtgox", + "mtgox" : [ "-0.5/AUD/alice","-0.5/AUD/bob" ], }, callback); }, @@ -887,8 +887,8 @@ buster.testCase("Gateway", { testutils.verify_balances(self.remote, { "alice" : "0.5/AUD/mtgox", - "bob" : "0.45/AUD/mtgox", - "mtgox" : [ "-0.5/AUD/alice","-0.45/AUD/bob" ], + "bob" : "0.5/AUD/mtgox", + "mtgox" : [ "-0.5/AUD/alice","-0.5/AUD/bob" ], }, callback); }, From b572ba7c8d1cfed46c0bfbfbaad6e42a66bbdd5d Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 20 Jan 2013 15:53:18 -0800 Subject: [PATCH 458/525] UT: remove unintentional focus. --- test/send-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/send-test.js b/test/send-test.js index 82dd52c5b..d2fe9c7f3 100644 --- a/test/send-test.js +++ b/test/send-test.js @@ -749,7 +749,7 @@ buster.testCase("Gateway", { }); }, - "=>subscribe test: customer to customer with and without transfer fee: transaction retry logic" : + "subscribe test: customer to customer with and without transfer fee: transaction retry logic" : function (done) { var self = this; From 49a3536125bac9377e60af947cd2d65fa454af96 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 20 Jan 2013 19:48:18 -0800 Subject: [PATCH 459/525] Reject partial payment to create accounts. --- src/cpp/ripple/PaymentTransactor.cpp | 8 ++++++++ src/cpp/ripple/TransactionErr.cpp | 1 + src/cpp/ripple/TransactionErr.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index 813328052..6019d0716 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -89,6 +89,14 @@ TER PaymentTransactor::doApply() // Another transaction could create the account and then this transaction would succeed. return tecNO_DST; } + else if (isSetBit(mParams, tapOPEN_LEDGER) && bPartialPayment) + { + cLog(lsINFO) << "Payment: Delay transaction: Partial payment not allowed to create account."; + // Make retry work smaller, by rejecting this. + + // Another transaction could create the account and then this transaction would succeed. + return telNO_DST_PARTIAL; + } else if (saDstAmount.getNValue() < mEngine->getLedger()->getReserve(0)) // Reserve is not scaled by load. { cLog(lsINFO) << "Payment: Delay transaction: Destination account does not exist. Insufficent payment to create account."; diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index a10f4c97d..201393ae8 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -42,6 +42,7 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { telBAD_PATH_COUNT, "telBAD_PATH_COUNT", "Malformed: Too many paths." }, { telBAD_PUBLIC_KEY, "telBAD_PUBLIC_KEY", "Public key too long." }, { telINSUF_FEE_P, "telINSUF_FEE_P", "Fee insufficient." }, + { telNO_DST_PARTIAL, "telNO_DST_PARTIAL", "Partial payment to create account not allowed." }, { temMALFORMED, "temMALFORMED", "Malformed transaction." }, { temBAD_AMOUNT, "temBAD_AMOUNT", "Can only send positive amounts." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index dcb9627f9..0230be848 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -17,6 +17,7 @@ enum TER // aka TransactionEngineResult telBAD_PATH_COUNT, telBAD_PUBLIC_KEY, telINSUF_FEE_P, + telNO_DST_PARTIAL, // -299 .. -200: M Malformed (bad signature) // Causes: From 931bd332df3116a9ad7191ce5cc678ebf28746cf Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 20 Jan 2013 20:08:24 -0800 Subject: [PATCH 460/525] Be stricter with payment options. --- src/cpp/ripple/PaymentTransactor.cpp | 29 ++++++++++++++++++++++++++-- src/cpp/ripple/TransactionErr.cpp | 6 +++++- src/cpp/ripple/TransactionErr.h | 6 +++++- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index 6019d0716..a4c16fb06 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -25,6 +25,7 @@ TER PaymentTransactor::doApply() : STAmount(saDstAmount.getCurrency(), mTxnAccountID, saDstAmount.getMantissa(), saDstAmount.getExponent(), saDstAmount.isNegative()); const uint160 uSrcCurrency = saMaxAmount.getCurrency(); const uint160 uDstCurrency = saDstAmount.getCurrency(); + const bool bXRPDirect = uSrcCurrency.isZero() && uDstCurrency.isZero(); cLog(lsINFO) << boost::str(boost::format("Payment> saMaxAmount=%s saDstAmount=%s") % saMaxAmount.getFullText() @@ -70,11 +71,35 @@ TER PaymentTransactor::doApply() return temREDUNDANT_SEND_MAX; } - else if (bMax && (saDstAmount.isNative() && saMaxAmount.isNative())) + else if (bXRPDirect && bMax) { cLog(lsINFO) << "Payment: Malformed transaction: SendMax not allowed for XRP."; - return temBAD_SEND_MAX_XRP; + return temBAD_SEND_XRP_MAX; + } + else if (bXRPDirect && bPaths) + { + cLog(lsINFO) << "Payment: Malformed transaction: Paths specfied for XRP to XRP."; + + return temBAD_SEND_XRP_PATHS; + } + else if (bXRPDirect && bPartialPayment) + { + cLog(lsINFO) << "Payment: Malformed transaction: Partial payment specfied for XRP to XRP."; + + return temBAD_SEND_XRP_PARTIAL; + } + else if (bXRPDirect && bLimitQuality) + { + cLog(lsINFO) << "Payment: Malformed transaction: Limit quality specfied for XRP to XRP."; + + return temBAD_SEND_XRP_LIMIT; + } + else if (bXRPDirect && bNoRippleDirect) + { + cLog(lsINFO) << "Payment: Malformed transaction: No ripple direct specfied for XRP to XRP."; + + return temBAD_SEND_XRP_NO_DIRECT; } SLE::pointer sleDst = mEngine->entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(uDstAccountID)); diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index 201393ae8..c6d112afd 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -59,7 +59,11 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temBAD_SRC_ACCOUNT, "temBAD_SRC_ACCOUNT", "Malformed: Bad source account." }, { temBAD_TRANSFER_RATE, "temBAD_TRANSFER_RATE", "Malformed: Transfer rate must be >= 1.0" }, { temBAD_SEQUENCE, "temBAD_SEQUENCE", "Malformed: Sequence is not in the past." }, - { temBAD_SEND_MAX_XRP, "temBAD_SEND_MAX_XRP", "Malformed: Send max is not allowed for XRP." }, + { temBAD_SEND_XRP_LIMIT, "temBAD_SEND_XRP_LIMIT", "Malformed: Limit quality is not allowed for XRP to XRP." }, + { temBAD_SEND_XRP_MAX, "temBAD_SEND_XRP_MAX", "Malformed: Send max is not allowed for XRP." }, + { temBAD_SEND_XRP_NO_DIRECT, "temBAD_SEND_XRP_NO_DIRECT", "Malformed: No Ripple direct is not allowed for XRP to XRP." }, + { temBAD_SEND_XRP_PARTIAL, "temBAD_SEND_XRP_PARTIAL", "Malformed: Partial payment is not allowed for XRP to XRP." }, + { temBAD_SEND_XRP_PATHS, "temBAD_SEND_XRP_PATHS", "Malformed: Paths are not allowed for XRP to XRP." }, { temDST_IS_SRC, "temDST_IS_SRC", "Destination may not be source." }, { temDST_NEEDED, "temDST_NEEDED", "Destination not specified." }, { temDST_TAG_NEEDED, "temDST_TAG_NEEDED", "Destination tag required." }, diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 0230be848..2eec0554c 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -39,7 +39,11 @@ enum TER // aka TransactionEngineResult temBAD_PATH_LOOP, temBAD_PUBLISH, temBAD_TRANSFER_RATE, - temBAD_SEND_MAX_XRP, + temBAD_SEND_XRP_LIMIT, + temBAD_SEND_XRP_MAX, + temBAD_SEND_XRP_NO_DIRECT, + temBAD_SEND_XRP_PARTIAL, + temBAD_SEND_XRP_PATHS, temBAD_SIGNATURE, temBAD_SRC_ACCOUNT, temBAD_SEQUENCE, From 521b94f6006262a6d2fe03dd02a39d5f9c7e6352 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 20 Jan 2013 21:30:58 -0800 Subject: [PATCH 461/525] Cosmetic. --- src/cpp/ripple/PaymentTransactor.cpp | 10 +++++----- src/cpp/ripple/TransactionErr.cpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/PaymentTransactor.cpp b/src/cpp/ripple/PaymentTransactor.cpp index a4c16fb06..6a6ffc8d7 100644 --- a/src/cpp/ripple/PaymentTransactor.cpp +++ b/src/cpp/ripple/PaymentTransactor.cpp @@ -73,31 +73,31 @@ TER PaymentTransactor::doApply() } else if (bXRPDirect && bMax) { - cLog(lsINFO) << "Payment: Malformed transaction: SendMax not allowed for XRP."; + cLog(lsINFO) << "Payment: Malformed transaction: SendMax specified for XRP to XRP."; return temBAD_SEND_XRP_MAX; } else if (bXRPDirect && bPaths) { - cLog(lsINFO) << "Payment: Malformed transaction: Paths specfied for XRP to XRP."; + cLog(lsINFO) << "Payment: Malformed transaction: Paths specified for XRP to XRP."; return temBAD_SEND_XRP_PATHS; } else if (bXRPDirect && bPartialPayment) { - cLog(lsINFO) << "Payment: Malformed transaction: Partial payment specfied for XRP to XRP."; + cLog(lsINFO) << "Payment: Malformed transaction: Partial payment specified for XRP to XRP."; return temBAD_SEND_XRP_PARTIAL; } else if (bXRPDirect && bLimitQuality) { - cLog(lsINFO) << "Payment: Malformed transaction: Limit quality specfied for XRP to XRP."; + cLog(lsINFO) << "Payment: Malformed transaction: Limit quality specified for XRP to XRP."; return temBAD_SEND_XRP_LIMIT; } else if (bXRPDirect && bNoRippleDirect) { - cLog(lsINFO) << "Payment: Malformed transaction: No ripple direct specfied for XRP to XRP."; + cLog(lsINFO) << "Payment: Malformed transaction: No ripple direct specified for XRP to XRP."; return temBAD_SEND_XRP_NO_DIRECT; } diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index c6d112afd..953a8aeb2 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -60,7 +60,7 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { temBAD_TRANSFER_RATE, "temBAD_TRANSFER_RATE", "Malformed: Transfer rate must be >= 1.0" }, { temBAD_SEQUENCE, "temBAD_SEQUENCE", "Malformed: Sequence is not in the past." }, { temBAD_SEND_XRP_LIMIT, "temBAD_SEND_XRP_LIMIT", "Malformed: Limit quality is not allowed for XRP to XRP." }, - { temBAD_SEND_XRP_MAX, "temBAD_SEND_XRP_MAX", "Malformed: Send max is not allowed for XRP." }, + { temBAD_SEND_XRP_MAX, "temBAD_SEND_XRP_MAX", "Malformed: Send max is not allowed for XRP to XRP." }, { temBAD_SEND_XRP_NO_DIRECT, "temBAD_SEND_XRP_NO_DIRECT", "Malformed: No Ripple direct is not allowed for XRP to XRP." }, { temBAD_SEND_XRP_PARTIAL, "temBAD_SEND_XRP_PARTIAL", "Malformed: Partial payment is not allowed for XRP to XRP." }, { temBAD_SEND_XRP_PATHS, "temBAD_SEND_XRP_PATHS", "Malformed: Paths are not allowed for XRP to XRP." }, From 6e746c5851073620fcafae4e9af6f7ab20899c87 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sun, 20 Jan 2013 21:59:34 -0800 Subject: [PATCH 462/525] Fix a harmless bug that caused transactions that succeded early to be retried once. --- src/cpp/ripple/LedgerConsensus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 5fcd7388d..8b2fdc732 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1152,7 +1152,7 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger #endif SerializerIterator sit(item->peekSerializer()); SerializedTransaction::pointer txn = boost::make_shared(boost::ref(sit)); - if (applyTransaction(engine, txn, applyLedger, openLgr, true) != LCAT_FAIL) + if (applyTransaction(engine, txn, applyLedger, openLgr, true) != LCAT_RETRY) failedTransactions.push_back(txn); #ifndef TRUST_NETWORK } From 9567440712ece1aca4910f16da53d34f53e0c738 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sun, 20 Jan 2013 22:49:34 -0800 Subject: [PATCH 463/525] Typo. --- bin/email_hash.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/email_hash.js b/bin/email_hash.js index f3067065a..ab4f97c47 100755 --- a/bin/email_hash.js +++ b/bin/email_hash.js @@ -4,7 +4,7 @@ // if (3 != process.argv.length) { - process.stderr.write("Usage: " + process.argv[1] + " email_address\n\nReturns gravitar style hash.\n"); + process.stderr.write("Usage: " + process.argv[1] + " email_address\n\nReturns gravatar style hash.\n"); process.exit(1); } else { From 3482c4421983531b54ad56e37e7364a7d60dbaf1 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Mon, 21 Jan 2013 13:58:06 +0100 Subject: [PATCH 464/525] Added simple flash policy server allowing global access. (Careful with that.) --- bin/flash_policy.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 bin/flash_policy.js diff --git a/bin/flash_policy.js b/bin/flash_policy.js new file mode 100644 index 000000000..af59b212f --- /dev/null +++ b/bin/flash_policy.js @@ -0,0 +1,18 @@ +var net = require("net"), + domains = ["*:*"]; // Domain:Port + +net.createServer( + function(socket) { + socket.write("\n"); + socket.write("\n"); + socket.write("\n"); + domains.forEach( + function(domain) { + var parts = domain.split(':'); + socket.write("\t\n"); + } + ); + socket.write("\n"); + socket.end(); + } +).listen(843); From 0e917c76e4cf655ca754f6f442249807da1b3e6c Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Mon, 21 Jan 2013 20:17:38 +0100 Subject: [PATCH 465/525] Update names of states the client considers "online". --- src/js/remote.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/js/remote.js b/src/js/remote.js index 0058b9b90..ef6931028 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -271,6 +271,18 @@ var isTefFailure = function (engine_result_code) { return (engine_result_code >= -299 && engine_result_code < 199); }; +/** + * Server states that we will treat as the server being online. + * + * Our requirements are that the server can process transactions and notify + * us of changes. + */ +Remote.online_states = [ + 'proposing', + 'validating', + 'full' +]; + Remote.flags = { 'OfferCreate' : { 'Passive' : 0x00010000, @@ -533,7 +545,7 @@ Remote.prototype._connect_message = function (ws, json) { case 'serverStatus': // This message is only received when online. As we are connected, it is the definative final state. this._set_state( - message.server_status === 'tracking' || message.server_status === 'full' + Remote.online_states.indexOf(message.server_status) !== -1 ? 'online' : 'offline'); break; @@ -916,7 +928,7 @@ Remote.prototype._server_subscribe = function () { self._reserve_inc = message.reserve_inc; self._server_status = message.server_status; - if (message.server_status === 'tracking' || message.server_status === 'full') { + if (Remote.online_states.indexOf(message.server_status) !== -1) { self._set_state('online'); } From 16d8ec5ec9425a295a2df0b3e6089fcd81f93a77 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Mon, 21 Jan 2013 20:18:08 +0100 Subject: [PATCH 466/525] Give more useful console output in IE9. --- src/js/utils.web.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/js/utils.web.js b/src/js/utils.web.js index b98916e17..b3a49e502 100644 --- a/src/js/utils.web.js +++ b/src/js/utils.web.js @@ -1,7 +1,11 @@ -exports = module.exports = require('./utils.js'); +var exports = module.exports = require('./utils.js'); // We override this function for browsers, because they print objects nicer // natively than JSON.stringify can. exports.logObject = function (msg, obj) { - console.log(msg, "", obj); + if (/MSIE/.test(navigator.userAgent)) { + console.log(msg, JSON.stringify(obj)); + } else { + console.log(msg, "", obj); + } }; From a6793b3d3babbefeee6e5062af36e7418d4c0e46 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 21 Jan 2013 12:26:42 -0800 Subject: [PATCH 467/525] Clean up. No more 'tep'. --- src/cpp/ripple/TransactionEngine.cpp | 14 +++++++------- src/cpp/ripple/TransactionErr.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index 2083b4e05..4ab5cad74 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -112,9 +112,11 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa cLog(lsINFO) << "applyTransaction: terResult=" << strToken << " : " << terResult << " : " << strHuman; - if (isTecClaim(terResult) && !isSetBit(params, tapRETRY)) + if (isTesSuccess(terResult)) + didApply = true; + else if (isTecClaim(terResult) && !isSetBit(params, tapRETRY)) { // only claim the transaction fee - cLog(lsINFO) << "Reprocessing to only claim fee"; + cLog(lsDEBUG) << "Reprocessing to only claim fee"; mNodes.clear(); SLE::pointer txnAcct = entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(txn.getSourceAccount())); @@ -151,14 +153,12 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa } } } - else if ((terResult == tesSUCCESS) || (isTesSuccess(terResult) && !isSetBit(params, tapRETRY))) - didApply = true; else - cLog(lsINFO) << "Not applying transaction"; + cLog(lsDEBUG) << "Not applying transaction"; if (didApply) { - // Transaction succeeded fully or (retries are not allowed and the transaction succeeded partially). + // Transaction succeeded fully or (retries are not allowed and the transaction could claim a fee) Serializer m; mNodes.calcRawMeta(m, terResult, mTxnSeq++); @@ -177,8 +177,8 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa if (!mLedger->addTransaction(txID, s, m)) assert(false); - STAmount saPaid = txn.getTransactionFee(); // Charge whatever fee they specified. + STAmount saPaid = txn.getTransactionFee(); mLedger->destroyCoins(saPaid.getNValue()); } } diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index 2eec0554c..b5bfeea5c 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -134,7 +134,7 @@ enum TER // aka TransactionEngineResult #define isTemMalformed(x) ((x) >= temMALFORMED && (x) < tefFAILURE) #define isTefFailure(x) ((x) >= tefFAILURE && (x) < terRETRY) #define isTerRetry(x) ((x) >= terRETRY && (x) < tesSUCCESS) -#define isTesSuccess(x) ((x) >= tesSUCCESS) +#define isTesSuccess(x) ((x) == tesSUCCESS) #define isTecClaim(x) ((x) >= tecCLAIM) bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman); From fafe1e2835068a131de52e3cffe177171eb13498 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 21 Jan 2013 13:42:53 -0800 Subject: [PATCH 468/525] Make relative paths relative rippled.conf. --- rippled-example.cfg | 3 +-- src/cpp/ripple/Config.cpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 9b60178d7..8305912cc 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -13,8 +13,7 @@ # # [debug_logfile] # Specifies were a debug logfile is kept. By default, no debug log is kept. -# Unless absolute, the path is relative the directory from which rippled is -# launched. +# Unless absolute, the path is relative the directory containing this file. # # Example: debug.log # diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index e0215c302..6bc63d9e8 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -104,7 +104,7 @@ void Config::setup(const std::string& strConf, bool bTestNet, bool bQuiet) { // --conf= : everything is relative that file. CONFIG_FILE = strConfFile; - CONFIG_DIR = CONFIG_FILE; + CONFIG_DIR = boost::filesystem::absolute(CONFIG_FILE); CONFIG_DIR.remove_filename(); DATA_DIR = CONFIG_DIR / strDbPath; } From 632a387ebad4b00fd5fe61a6dddcb3595099b129 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 21 Jan 2013 14:12:13 -0800 Subject: [PATCH 469/525] Improve flash_policy.js. --- bin/flash_policy.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) mode change 100644 => 100755 bin/flash_policy.js diff --git a/bin/flash_policy.js b/bin/flash_policy.js old mode 100644 new mode 100755 index af59b212f..e1361d46d --- a/bin/flash_policy.js +++ b/bin/flash_policy.js @@ -1,5 +1,18 @@ -var net = require("net"), - domains = ["*:*"]; // Domain:Port +#!/usr/bin/node +// +// This program allows IE 9 ripple-clients to make websocket connections to +// rippled using flash. As IE 9 does not have websocket support, this required +// if you wish to support IE 9 ripple-clients. +// +// http://www.lightsphere.com/dev/articles/flash_socket_policy.html +// +// For better security, be sure to set the Port below to the port of your +// [websocket_public_port]. +// + +var net = require("net"), + port = "*", + domains = ["*:"+port]; // Domain:Port net.createServer( function(socket) { From a2b890506a49e1b02cd8f29bb82d07910f3e5006 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 21 Jan 2013 16:46:45 -0800 Subject: [PATCH 470/525] Make RPC startup results obey quiet. --- src/cpp/ripple/main.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index e7d0379c9..bf187ad80 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -41,9 +41,10 @@ void startServer() RPCHandler rhHandler(&theApp->getOPs()); - std::cerr << "Result: " - << rhHandler.doCommand(jvCommand, RPCHandler::ADMIN) - << std::endl; + Json::Value jvResult = rhHandler.doCommand(jvCommand, RPCHandler::ADMIN); + + if (!theConfig.QUIET) + std::cerr << "Result: " << jvResult << std::endl; } } From 6aa9a3fc9080bad063977a251ce4de2e269840d4 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 21 Jan 2013 16:54:51 -0800 Subject: [PATCH 471/525] Fix [rpc_startup]. --- src/cpp/ripple/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index 6bc63d9e8..57fa18979 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -288,7 +288,7 @@ void Config::load() if (!jrReader.parse(strJson, jvCommand)) throw std::runtime_error(boost::str(boost::format("Couldn't parse ["SECTION_RPC_STARTUP"] command: %s") % strJson)); - RPC_STARTUP.append(jvCommand); + jvArray.append(jvCommand); } RPC_STARTUP = jvArray; From ab6ab491eb24bb28410df6d79ed187868a0e13ee Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 21 Jan 2013 17:02:15 -0800 Subject: [PATCH 472/525] Make -q more quiet. --- src/cpp/ripple/Wallet.cpp | 9 ++++++--- src/cpp/ripple/main.cpp | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/cpp/ripple/Wallet.cpp b/src/cpp/ripple/Wallet.cpp index 244536769..ed017304f 100644 --- a/src/cpp/ripple/Wallet.cpp +++ b/src/cpp/ripple/Wallet.cpp @@ -30,7 +30,8 @@ void Wallet::start() throw std::runtime_error("unable to retrieve new node identity."); } - std::cerr << "NodeIdentity: " << mNodePublicKey.humanNodePublic() << std::endl; + if (!theConfig.QUIET) + std::cerr << "NodeIdentity: " << mNodePublicKey.humanNodePublic() << std::endl; theApp->getUNL().start(); } @@ -71,7 +72,8 @@ bool Wallet::nodeIdentityLoad() // Create and store a network identity. bool Wallet::nodeIdentityCreate() { - std::cerr << "NodeIdentity: Creating." << std::endl; + if (!theConfig.QUIET) + std::cerr << "NodeIdentity: Creating." << std::endl; // // Generate the public and private key @@ -116,7 +118,8 @@ bool Wallet::nodeIdentityCreate() { % sqlEscape(strDh1024))); // XXX Check error result. - std::cerr << "NodeIdentity: Created." << std::endl; + if (!theConfig.QUIET) + std::cerr << "NodeIdentity: Created." << std::endl; return true; } diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index bf187ad80..4faab8102 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -37,7 +37,7 @@ void startServer() const Json::Value& jvCommand = theConfig.RPC_STARTUP[i]; if (!theConfig.QUIET) - cerr << "Startup RPC: " << jvCommand << endl; + std::cerr << "Startup RPC: " << jvCommand << std::endl; RPCHandler rhHandler(&theApp->getOPs()); From aea0f42cb0d6c00866b39ad37d2b371f5292607e Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 21 Jan 2013 17:12:05 -0800 Subject: [PATCH 473/525] Mark a seriouse FIXME. --- src/cpp/ripple/NetworkOPs.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index aed040621..3fbf0768b 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1360,6 +1360,7 @@ void NetworkOPs::pubAccountTransaction(Ledger::ref lpCurrent, const SerializedTr } } + // FIXME: This can crash. An InfoSub can go away while we hold a regular pointer to it. if (!notify.empty()) { Json::Value jvObj = transJson(stTxn, terResult, bAccepted, lpCurrent, "account"); From d569633c093f470ae4409900c75c9ef694a6e7a3 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 21 Jan 2013 17:18:21 -0800 Subject: [PATCH 474/525] Let [rpc_admin_allow] take multiple lines. --- rippled-example.cfg | 2 +- src/cpp/ripple/Config.cpp | 8 +++++++- src/cpp/ripple/Config.h | 2 +- src/cpp/ripple/RPCHandler.cpp | 10 +++++++--- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index 8305912cc..ef45147b7 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -107,7 +107,7 @@ # 1: Allow RPC connections from any IP. # # [rpc_admin_allow]: -# Specify an IP address required for admin access. +# Specify an list of IP addresses allowed to have admin access. One per line. # # Defaults to 127.0.0.1. # diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index 57fa18979..1eee97fba 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -187,6 +187,7 @@ Config::Config() LEDGER_CREATOR = false; RPC_ALLOW_REMOTE = false; + RPC_ADMIN_ALLOW.push_back("127.0.0.1"); PEER_SSL_CIPHER_LIST = DEFAULT_PEER_SSL_CIPHER_LIST; PEER_SCAN_INTERVAL_MIN = DEFAULT_PEER_SCAN_INTERVAL_MIN; @@ -307,7 +308,12 @@ void Config::load() if (sectionSingleB(secConfig, SECTION_PEER_PRIVATE, strTemp)) PEER_PRIVATE = boost::lexical_cast(strTemp); - (void) sectionSingleB(secConfig, SECTION_RPC_ADMIN_ALLOW, RPC_ADMIN_ALLOW); + smtTmp = sectionEntries(secConfig, SECTION_RPC_ADMIN_ALLOW); + if (smtTmp) + { + RPC_ADMIN_ALLOW = *smtTmp; + } + (void) sectionSingleB(secConfig, SECTION_RPC_ADMIN_PASSWORD, RPC_ADMIN_PASSWORD); (void) sectionSingleB(secConfig, SECTION_RPC_ADMIN_USER, RPC_ADMIN_USER); (void) sectionSingleB(secConfig, SECTION_RPC_IP, RPC_IP); diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index 1bc8e54d1..abb1c5662 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -113,7 +113,7 @@ public: // RPC parameters std::string RPC_IP; int RPC_PORT; - std::string RPC_ADMIN_ALLOW; + std::vector RPC_ADMIN_ALLOW; std::string RPC_ADMIN_PASSWORD; std::string RPC_ADMIN_USER; std::string RPC_PASSWORD; diff --git a/src/cpp/ripple/RPCHandler.cpp b/src/cpp/ripple/RPCHandler.cpp index 846e51a8f..ed5640c4a 100644 --- a/src/cpp/ripple/RPCHandler.cpp +++ b/src/cpp/ripple/RPCHandler.cpp @@ -40,9 +40,13 @@ int iAdminGet(const Json::Value& jvRequest, const std::string& strRemoteIp) : true : false; // Meets IP restriction for admin. - bool bAdminIP = theConfig.RPC_ADMIN_ALLOW.empty() - ? strRemoteIp == "127.0.0.1" - : strRemoteIp == theConfig.RPC_ADMIN_ALLOW; + bool bAdminIP = false; + + BOOST_FOREACH(const std::string& strAllowIp, theConfig.RPC_ADMIN_ALLOW) + { + if (strAllowIp == strRemoteIp) + bAdminIP = true; + } if (bPasswordWrong // Wrong || (bPasswordSupplied && !bAdminIP)) // Supplied and doesn't meet IP filter. From 28aad9035691641e5efe0a6e296f1c4a2f95ef7d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 21 Jan 2013 17:48:35 -0800 Subject: [PATCH 475/525] Fix a bug that prevented account notifications from going out. --- src/cpp/ripple/TransactionMeta.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/TransactionMeta.cpp b/src/cpp/ripple/TransactionMeta.cpp index 77886c163..1e69ec6ae 100644 --- a/src/cpp/ripple/TransactionMeta.cpp +++ b/src/cpp/ripple/TransactionMeta.cpp @@ -78,7 +78,7 @@ std::vector TransactionMetaSet::getAffectedAccounts() { BOOST_FOREACH(const SerializedType& field, inner->peekData()) { - const STAccount* sa = dynamic_cast(&it); + const STAccount* sa = dynamic_cast(&field); if (sa) addIfUnique(accounts, sa->getValueNCA()); else if ((field.getFName() == sfLowLimit) || (field.getFName() == sfHighLimit)) From ea9c0382e9ffdd3c48d9f117baaf804ab471801a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 21 Jan 2013 17:49:01 -0800 Subject: [PATCH 476/525] Typo. --- src/cpp/ripple/Ledger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 2bdf42372..398141559 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -442,7 +442,7 @@ void Ledger::saveAcceptedLedger(bool fromConsensus, LoadEvent::pointer event) db->executeSQL(sql); // may already be in there } else - cLog(lsWARNING) << "Transaaction in ledger " << mLedgerSeq << " affects not accounts"; + cLog(lsWARNING) << "Transaction in ledger " << mLedgerSeq << " affects no accounts"; } if (SQL_EXISTS(db, boost::str(transExists % txn.getTransactionID().GetHex()))) From 18001a005867f69a58e7145695ba91f9db8f6e05 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 21 Jan 2013 17:55:39 -0800 Subject: [PATCH 477/525] Fix retry bug. --- src/cpp/ripple/LedgerConsensus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 8b2fdc732..22b89922c 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -1152,7 +1152,7 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger #endif SerializerIterator sit(item->peekSerializer()); SerializedTransaction::pointer txn = boost::make_shared(boost::ref(sit)); - if (applyTransaction(engine, txn, applyLedger, openLgr, true) != LCAT_RETRY) + if (applyTransaction(engine, txn, applyLedger, openLgr, true) == LCAT_RETRY) failedTransactions.push_back(txn); #ifndef TRUST_NETWORK } From 517c1c48ff52e2b6b61cc05df37678b54e13bf3d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 21 Jan 2013 18:26:24 -0800 Subject: [PATCH 478/525] Clean up pass counts. --- src/cpp/ripple/LedgerConsensus.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerConsensus.cpp b/src/cpp/ripple/LedgerConsensus.cpp index 22b89922c..f066b2f83 100644 --- a/src/cpp/ripple/LedgerConsensus.cpp +++ b/src/cpp/ripple/LedgerConsensus.cpp @@ -16,6 +16,9 @@ #define TX_ACQUIRE_TIMEOUT 250 +#define LEDGER_TOTAL_PASSES 8 +#define LEDGER_RETRY_PASSES 5 + #define TRUST_NETWORK #define LC_DEBUG @@ -1166,7 +1169,7 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger int changes; bool certainRetry = true; - for (int pass = 0; pass < 12; ++pass) + for (int pass = 0; pass < LEDGER_TOTAL_PASSES; ++pass) { cLog(lsDEBUG) << "Pass: " << pass << " Txns: " << failedTransactions.size() << (certainRetry ? " retriable" : " final"); @@ -1205,7 +1208,7 @@ void LedgerConsensus::applyTransactions(SHAMap::ref set, Ledger::ref applyLedger return; // Stop retriable passes - if ((!changes) || (pass >= 8)) + if ((!changes) || (pass >= LEDGER_RETRY_PASSES)) certainRetry = false; } } From 6b8faad63993c2b73b3af4e136558a0a1a67aac6 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 21 Jan 2013 18:26:31 -0800 Subject: [PATCH 479/525] Don't round "agree to disagree" close times. --- src/cpp/ripple/Ledger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 398141559..c8902da2f 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -164,7 +164,7 @@ void Ledger::addRaw(Serializer &s) const void Ledger::setAccepted(uint32 closeTime, int closeResolution, bool correctCloseTime) { // used when we witnessed the consensus assert(mClosed && !mAccepted); - mCloseTime = closeTime - (closeTime % closeResolution); + mCloseTime = correctCloseTime ? closeTime : (closeTime - (closeTime % closeResolution)); mCloseResolution = closeResolution; mCloseFlags = correctCloseTime ? 0 : sLCF_NoConsensusTime; updateHash(); From b6523ada1c4bc76b8c6fde45fa680703eab9586d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 21 Jan 2013 21:58:54 -0800 Subject: [PATCH 480/525] Whoops. Last commit made this backwards. --- src/cpp/ripple/Ledger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index c8902da2f..c4c483132 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -164,7 +164,7 @@ void Ledger::addRaw(Serializer &s) const void Ledger::setAccepted(uint32 closeTime, int closeResolution, bool correctCloseTime) { // used when we witnessed the consensus assert(mClosed && !mAccepted); - mCloseTime = correctCloseTime ? closeTime : (closeTime - (closeTime % closeResolution)); + mCloseTime = correctCloseTime ? (closeTime - (closeTime % closeResolution)) : closeTime; mCloseResolution = closeResolution; mCloseFlags = correctCloseTime ? 0 : sLCF_NoConsensusTime; updateHash(); From c34a1e8f34518a95603caf3510a91e4e6aaad102 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Tue, 22 Jan 2013 20:12:57 +0100 Subject: [PATCH 481/525] Load WebSocket module later. This one change allows us to load the IE polyfills after the Ripple library. Otherwise we would have to split up our dependencies into two groups, which would add a bunch of complexity to the build system that I'd rather avoid. --- src/js/remote.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/js/remote.js b/src/js/remote.js index ef6931028..f9de6ed51 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -15,8 +15,6 @@ // // npm -var WebSocket = require('ws'); - var EventEmitter = require('events').EventEmitter; var Amount = require('./amount.js').Amount; var Currency = require('./amount.js').Currency; @@ -427,6 +425,7 @@ Remote.prototype._connect_start = function () { if (this.trace) console.log("remote: connect: %s", url); + var WebSocket = require('ws'); var ws = this.ws = new WebSocket(url); ws.response = {}; From 73f5e7d0ba7353ed38423c054bc9e721f34e670f Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Tue, 22 Jan 2013 20:38:09 +0100 Subject: [PATCH 482/525] Update SJCL. --- src/js/sjcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/sjcl b/src/js/sjcl index d04d0bdcc..dbdef434e 160000 --- a/src/js/sjcl +++ b/src/js/sjcl @@ -1 +1 @@ -Subproject commit d04d0bdccd986e434b98fe393e1e01286c10fc36 +Subproject commit dbdef434e76c3f16835f3126a7ff1c717b1ce8af From 2de124d6c0933082e5c46dd2bef42c2388fe6c86 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Tue, 22 Jan 2013 20:38:44 +0100 Subject: [PATCH 483/525] Expose SJCL so the client doesn't have to include a second copy. --- src/js/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/js/index.js b/src/js/index.js index 2d6e65f71..563edb9c5 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1,4 +1,13 @@ exports.Remote = require('./remote').Remote; exports.Amount = require('./amount').Amount; exports.UInt160 = require('./amount').UInt160; -exports.Seed = require('./amount').Seed; \ No newline at end of file +exports.Seed = require('./amount').Seed; + +// Important: We do not guarantee any specific version of SJCL or for any +// specific features to be included. The version and configuration may change at +// any time without warning. +// +// However, for programs that are tied to a specific version of ripple.js like +// the official client, it makes sense to expose the SJCL instance so we don't +// have to include it twice. +exports.sjcl = require('../../build/sjcl'); From a1ad884441a17bc8cf91f5702aa2cfaadb07cb52 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Tue, 22 Jan 2013 20:47:06 +0100 Subject: [PATCH 484/525] Enable symmetric encryption dependencies. These are needed by the client and will soon be needed by ripple.js for message encryption/decryption. --- grunt.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/grunt.js b/grunt.js index d1a8c46e9..0249b053c 100644 --- a/grunt.js +++ b/grunt.js @@ -14,7 +14,7 @@ module.exports = function(grunt) { sjcl: { src: [ "src/js/sjcl/core/sjcl.js", -// "src/js/sjcl/core/aes.js", + "src/js/sjcl/core/aes.js", "src/js/sjcl/core/bitArray.js", "src/js/sjcl/core/codecString.js", "src/js/sjcl/core/codecHex.js", @@ -22,11 +22,11 @@ module.exports = function(grunt) { "src/js/sjcl/core/codecBytes.js", "src/js/sjcl/core/sha256.js", "src/js/sjcl/core/sha1.js", -// "src/js/sjcl/core/ccm.js", + "src/js/sjcl/core/ccm.js", // "src/js/sjcl/core/cbc.js", // "src/js/sjcl/core/ocb2.js", -// "src/js/sjcl/core/hmac.js", -// "src/js/sjcl/core/pbkdf2.js", + "src/js/sjcl/core/hmac.js", + "src/js/sjcl/core/pbkdf2.js", "src/js/sjcl/core/random.js", "src/js/sjcl/core/convenience.js", "src/js/sjcl/core/bn.js", From db241c10094f935a9c18193de5ecc8c44111b8b6 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Tue, 22 Jan 2013 21:10:15 +0100 Subject: [PATCH 485/525] Add SHA512 to SJCL. --- grunt.js | 1 + 1 file changed, 1 insertion(+) diff --git a/grunt.js b/grunt.js index 0249b053c..152cef351 100644 --- a/grunt.js +++ b/grunt.js @@ -21,6 +21,7 @@ module.exports = function(grunt) { "src/js/sjcl/core/codecBase64.js", "src/js/sjcl/core/codecBytes.js", "src/js/sjcl/core/sha256.js", + "src/js/sjcl/core/sha512.js", "src/js/sjcl/core/sha1.js", "src/js/sjcl/core/ccm.js", // "src/js/sjcl/core/cbc.js", From d15aa24f2a8cfc9ba090751f188408dcd9bbc26a Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Tue, 22 Jan 2013 14:06:36 -0800 Subject: [PATCH 486/525] Fix offer create taking with XRP. --- src/cpp/ripple/OfferCreateTransactor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index 546f0c75a..66baf22af 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -200,8 +200,8 @@ TER OfferCreateTransactor::takeOffers( cLog(lsINFO) << "takeOffers: offer partial claim."; } - assert(!!saSubTakerGot.getIssuer()); - assert(!!saSubTakerPaid.getIssuer()); + assert(uTakerGetsAccountID == saSubTakerGot.getIssuer()); + assert(uTakerPaysAccountID == saSubTakerPaid.getIssuer()); // Offer owner pays taker. // saSubTakerGot.setIssuer(uTakerGetsAccountID); // XXX Move this earlier? From 39c857f4d837295a1be2f75556c669146ff26e33 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Tue, 22 Jan 2013 21:46:08 +0100 Subject: [PATCH 487/525] Fix logic error in Amount.add which caused results to always be positive. --- src/js/amount.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/js/amount.js b/src/js/amount.js index 0cef359a5..222b91228 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -554,10 +554,9 @@ Amount.prototype.add = function (v) { result._offset = o1; result._value = v1.add(v2); result._is_negative = result._value.compareTo(BigInteger.ZERO) < 0; - + if (result._is_negative) { result._value = result._value.negate(); - result._is_negative = false; } result._currency = this._currency.clone(); From 928e7139a3effc771857180d5ec2c8e7f63d85b1 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Tue, 22 Jan 2013 20:43:10 -0800 Subject: [PATCH 488/525] Part of the flash policy code. --- src/cpp/websocketpp/src/roles/server.hpp | 28 +++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index 270a478a0..754f4f6b6 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -53,6 +53,32 @@ namespace websocketpp { +typedef boost::asio::buffers_iterator bufIterator; + +static std::pair match_header(bufIterator begin, bufIterator end) +{ + // Do we have a complete HTTP request + const std::string header_match = "\r\n\r\n"; + bufIterator it = std::search(begin, end, header_match.begin(), header_match.end()); + if (it != end) + return std::make_pair(it, true); + + // If we don't have a flash policy request, we're done + const std::string flash_match = ""; + it = std::search(begin, end, flash_match.begin(), flash_match.end()); + if (it == end) + return std::make_pair(end, false); + + // If we have a line ending before the flash policy request, treat as http + const std::string eol_match = "\r\n"; + bufIterator it2 = std::search(begin, end, eol_match.begin(), eol_match.end()); + if ((it2 != end) || (it < it2)) + return std::make_pair(end, false); + + // Treat as flash policy request + return std::make_pair(it, true); +} + // Forward declarations template struct endpoint_traits; @@ -517,7 +543,7 @@ void server::connection::async_init() { boost::asio::async_read_until( m_connection.get_socket(), m_connection.buffer(), - "\r\n\r\n", + match_header, m_connection.get_strand().wrap(boost::bind( &type::handle_read_request, m_connection.shared_from_this(), From e25863207a95a3e1d9505ad19b325cc29d8e620b Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 23 Jan 2013 10:14:20 -0800 Subject: [PATCH 489/525] An assert in NetworkOPs.cpp line 850 was reported. This suggests a mutable ledger came from the ledger master's "ledger by hash" table. This fixes an obvious way that this can happen (that seems incredibly rare and requires a transaction / ledger acquire race with a very narrow window) and adds some extra asserts to try to catch this earlier. --- src/cpp/ripple/LedgerHistory.cpp | 5 +++++ src/cpp/ripple/LedgerMaster.h | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/LedgerHistory.cpp b/src/cpp/ripple/LedgerHistory.cpp index 34a0d05d8..dc30e87e3 100644 --- a/src/cpp/ripple/LedgerHistory.cpp +++ b/src/cpp/ripple/LedgerHistory.cpp @@ -24,6 +24,7 @@ LedgerHistory::LedgerHistory() : mLedgersByHash("LedgerCache", CACHED_LEDGER_NUM void LedgerHistory::addLedger(Ledger::pointer ledger) { + assert(ledger->isImmutable()); mLedgersByHash.canonicalize(ledger->getHash(), ledger, true); } @@ -78,13 +79,17 @@ Ledger::pointer LedgerHistory::getLedgerByHash(const uint256& hash) { Ledger::pointer ret = mLedgersByHash.fetch(hash); if (ret) + { + assert(ret->getHash() == hash); return ret; + } ret = Ledger::loadByHash(hash); if (!ret) return ret; assert(ret->getHash() == hash); mLedgersByHash.canonicalize(ret->getHash(), ret); + assert(ret->getHash() == hash); return ret; } diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index 514b05551..dac64c862 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -105,10 +105,11 @@ public: Ledger::pointer getLedgerByHash(const uint256& hash) { if (hash.isZero()) - return mCurrentLedger; + return boost::make_shared(boost::ref(*mCurrentLedger), false); if (mCurrentLedger && (mCurrentLedger->getHash() == hash)) - return mCurrentLedger; + return boost::make_shared(boost::ref(*mCurrentLedger), false); + if (mFinalizedLedger && (mFinalizedLedger->getHash() == hash)) return mFinalizedLedger; From 6ae38db4edd965d4caf88b85b5667f19dd7af237 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 23 Jan 2013 13:35:55 -0800 Subject: [PATCH 490/525] Socket with auto-detect SSL on inbound, SSL and non-SSL outbound. Compiles, but totally untested. # ../websocketpp/src/sockets/tls-hybrid.hpp --- src/cpp/ripple/AutoSocket.cpp | 28 +++++++++++ src/cpp/ripple/AutoSocket.h | 94 +++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 src/cpp/ripple/AutoSocket.cpp create mode 100644 src/cpp/ripple/AutoSocket.h diff --git a/src/cpp/ripple/AutoSocket.cpp b/src/cpp/ripple/AutoSocket.cpp new file mode 100644 index 000000000..f421937fa --- /dev/null +++ b/src/cpp/ripple/AutoSocket.cpp @@ -0,0 +1,28 @@ + +#include "AutoSocket.h" + +#include + +void AutoSocket::handle_autodetect(const error_code& ec) +{ + if (ec) + { + if (mCallback) + mCallback(ec); + return; + } + + if ((mBuffer[0] < 127) && (mBuffer[0] > 31) && + (mBuffer[1] < 127) && (mBuffer[1] > 31) && + (mBuffer[2] < 127) && (mBuffer[2] > 31) && + (mBuffer[3] < 127) && (mBuffer[3] > 31)) + { // non-SSL + if (mCallback) + mCallback(ec); + } + else + { // ssl + mSecure = true; + SSLSocket().async_handshake(ssl_socket::server, mCallback); + } +} diff --git a/src/cpp/ripple/AutoSocket.h b/src/cpp/ripple/AutoSocket.h new file mode 100644 index 000000000..019618dbd --- /dev/null +++ b/src/cpp/ripple/AutoSocket.h @@ -0,0 +1,94 @@ +#ifndef __AUTOSOCKET_H_ +#define __AUTOSOCKET_H_ + +#include + +#include +#include +#include +#include + +// Socket wrapper that supports both SSL and non-SSL connections. +// Generally, handle it as you would an SSL connection. +// For outbound non-SSL connections, just don't call async_handshake. + +namespace basio = boost::asio; +namespace bassl = basio::ssl; + +class AutoSocket +{ +public: + typedef bassl::stream ssl_socket; + typedef ssl_socket::next_layer_type plain_socket; + typedef boost::system::error_code error_code; + typedef boost::function callback; + +protected: + ssl_socket mSocket; + bool mSecure; + callback mCallback; + + std::vector mBuffer; + +public: + AutoSocket(basio::io_service& s, bassl::context& c) : mSocket(s, c), mSecure(false), mBuffer(4) { ; } + + bool isSecure() { return mSecure; } + ssl_socket& SSLSocket() { return mSocket; } + plain_socket& PlainSocket() { return mSocket.next_layer(); } + + void async_handshake(ssl_socket::handshake_type type, callback cbFunc) + { + mSecure = true; + if (type == ssl_socket::client) + SSLSocket().async_handshake(type, cbFunc); + else + { + mCallback = cbFunc; + PlainSocket().async_receive(basio::buffer(mBuffer), basio::socket_base::message_peek, + boost::bind(&AutoSocket::handle_autodetect, this, basio::placeholders::error)); + + } + } + + template StreamType& getSocket() + { + if (isSecure()) + return SSLSocket(); + if (!isSecure()) + return PlainSocket(); + } + + template void async_shutdown(ShutdownHandler handler) + { + if (isSecure()) + SSLSocket().async_shutdown(handler); + else + { + PlainSocket().shutdown(plain_socket::shutdown_both); + if (handler) + mSocket.get_io_service().post(handler); + } + } + + template void async_read_some(const Seq& buffers, Handler handler) + { + if (isSecure()) + SSLSocket().async_read_some(buffers, handler); + else + PlainSocket().async_read_some(buffers, handler); + } + + template void async_write_some(const Seq& buffers, Handler handler) + { + if (isSecure()) + SSLSocket().async_write_some(buffers, handler); + else + PlainSocket().async_write_some(buffers, handler); + } + +protected: + void handle_autodetect(const error_code&); +}; + +#endif From 9aaa3cc2fa0ddf95e3c9b6e96d021baf35eb2c49 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 23 Jan 2013 13:50:33 -0800 Subject: [PATCH 491/525] Buglet. --- src/cpp/ripple/AutoSocket.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cpp/ripple/AutoSocket.cpp b/src/cpp/ripple/AutoSocket.cpp index f421937fa..732716194 100644 --- a/src/cpp/ripple/AutoSocket.cpp +++ b/src/cpp/ripple/AutoSocket.cpp @@ -17,6 +17,7 @@ void AutoSocket::handle_autodetect(const error_code& ec) (mBuffer[2] < 127) && (mBuffer[2] > 31) && (mBuffer[3] < 127) && (mBuffer[3] > 31)) { // non-SSL + mSecure = false; if (mCallback) mCallback(ec); } @@ -26,3 +27,5 @@ void AutoSocket::handle_autodetect(const error_code& ec) SSLSocket().async_handshake(ssl_socket::server, mCallback); } } + +// vim:ts=4 From c9bdcc3cfdafb1bc71e864658e04931371cc44bf Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 23 Jan 2013 14:14:28 -0800 Subject: [PATCH 492/525] Tweaks. --- src/cpp/ripple/AutoSocket.cpp | 1 + src/cpp/ripple/AutoSocket.h | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cpp/ripple/AutoSocket.cpp b/src/cpp/ripple/AutoSocket.cpp index 732716194..dd553a4c5 100644 --- a/src/cpp/ripple/AutoSocket.cpp +++ b/src/cpp/ripple/AutoSocket.cpp @@ -25,6 +25,7 @@ void AutoSocket::handle_autodetect(const error_code& ec) { // ssl mSecure = true; SSLSocket().async_handshake(ssl_socket::server, mCallback); + mCallback = callback(); } } diff --git a/src/cpp/ripple/AutoSocket.h b/src/cpp/ripple/AutoSocket.h index 019618dbd..d8529ea28 100644 --- a/src/cpp/ripple/AutoSocket.h +++ b/src/cpp/ripple/AutoSocket.h @@ -10,7 +10,8 @@ // Socket wrapper that supports both SSL and non-SSL connections. // Generally, handle it as you would an SSL connection. -// For outbound non-SSL connections, just don't call async_handshake. +// To force a non-SSL connection, just don't call async_handshake. +// To force SSL only inbound, call setSSLOnly. namespace basio = boost::asio; namespace bassl = basio::ssl; @@ -37,10 +38,12 @@ public: ssl_socket& SSLSocket() { return mSocket; } plain_socket& PlainSocket() { return mSocket.next_layer(); } + void setSSLOnly() { mBuffer.clear(); } + void async_handshake(ssl_socket::handshake_type type, callback cbFunc) { mSecure = true; - if (type == ssl_socket::client) + if ((type == ssl_socket::client) || (mBuffer.empty())) SSLSocket().async_handshake(type, cbFunc); else { @@ -92,3 +95,5 @@ protected: }; #endif + +// vim:ts=4 From cd7b928ad5adec798850fd9034a399d97a81f241 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 23 Jan 2013 16:08:03 -0800 Subject: [PATCH 493/525] Fix error in OfferCreating taking. --- src/cpp/ripple/Amount.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/Amount.cpp b/src/cpp/ripple/Amount.cpp index 862613719..4f091ac79 100644 --- a/src/cpp/ripple/Amount.cpp +++ b/src/cpp/ripple/Amount.cpp @@ -1098,7 +1098,7 @@ bool STAmount::applyOffer( else { // Compute fees in a rounding safe way. - STAmount saTotal = STAmount::multiply(saTakerPaid, STAmount(CURRENCY_ONE, uTakerPaysRate, -9)); + STAmount saTotal = STAmount::multiply(saTakerGot, STAmount(CURRENCY_ONE, uOfferPaysRate, -9)); saOfferIssuerFee = (saTotal > saOfferFunds) ? saOfferFunds-saTakerGot : saTotal - saTakerGot; } From 5cff3cd10e7b4a830fa76c788c21ba5bd71102de Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 23 Jan 2013 16:48:58 -0800 Subject: [PATCH 494/525] Rollback a change. --- src/cpp/websocketpp/src/roles/server.hpp | 44 +++++++++++++++++------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index 754f4f6b6..48b4906b0 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -539,18 +539,36 @@ void server::connection::async_init() { // TODO: make this value configurable m_connection.register_timeout(5000,fail::status::TIMEOUT_WS, "Timeout on WebSocket handshake"); - - boost::asio::async_read_until( - m_connection.get_socket(), - m_connection.buffer(), - match_header, - m_connection.get_strand().wrap(boost::bind( - &type::handle_read_request, - m_connection.shared_from_this(), - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred - )) - ); + + if (m_connection.isSecure()) + { + boost::asio::async_read_until( + m_connection.SSLSocket(), + m_connection.buffer(), +// match_header, + "\r\n\r\n", + m_connection.get_strand().wrap(boost::bind( + &type::handle_read_request, + m_connection.shared_from_this(), + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred + )) + ); + } + else + { + boost::asio::async_read_until( + m_connection.PlainSocket(), + m_connection.buffer(), + match_header, + m_connection.get_strand().wrap(boost::bind( + &type::handle_read_request, + m_connection.shared_from_this(), + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred + )) + ); + } } /// processes the response from an async read for an HTTP header @@ -822,7 +840,7 @@ void server::connection::write_response() { m_endpoint.m_alog->at(log::alevel::DEBUG_HANDSHAKE) << raw << log::endl; - boost::asio::async_write( + boost::asio::async_write( // FIXME m_connection.get_socket(), //boost::asio::buffer(raw), buffer, From 24cac01e4718061ebc19757fe4567620b43d9275 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 23 Jan 2013 16:53:31 -0800 Subject: [PATCH 495/525] Rollback. --- src/cpp/websocketpp/src/roles/server.hpp | 70 +++++------------------- 1 file changed, 13 insertions(+), 57 deletions(-) diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index 48b4906b0..270a478a0 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -53,32 +53,6 @@ namespace websocketpp { -typedef boost::asio::buffers_iterator bufIterator; - -static std::pair match_header(bufIterator begin, bufIterator end) -{ - // Do we have a complete HTTP request - const std::string header_match = "\r\n\r\n"; - bufIterator it = std::search(begin, end, header_match.begin(), header_match.end()); - if (it != end) - return std::make_pair(it, true); - - // If we don't have a flash policy request, we're done - const std::string flash_match = ""; - it = std::search(begin, end, flash_match.begin(), flash_match.end()); - if (it == end) - return std::make_pair(end, false); - - // If we have a line ending before the flash policy request, treat as http - const std::string eol_match = "\r\n"; - bufIterator it2 = std::search(begin, end, eol_match.begin(), eol_match.end()); - if ((it2 != end) || (it < it2)) - return std::make_pair(end, false); - - // Treat as flash policy request - return std::make_pair(it, true); -} - // Forward declarations template struct endpoint_traits; @@ -539,36 +513,18 @@ void server::connection::async_init() { // TODO: make this value configurable m_connection.register_timeout(5000,fail::status::TIMEOUT_WS, "Timeout on WebSocket handshake"); - - if (m_connection.isSecure()) - { - boost::asio::async_read_until( - m_connection.SSLSocket(), - m_connection.buffer(), -// match_header, - "\r\n\r\n", - m_connection.get_strand().wrap(boost::bind( - &type::handle_read_request, - m_connection.shared_from_this(), - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred - )) - ); - } - else - { - boost::asio::async_read_until( - m_connection.PlainSocket(), - m_connection.buffer(), - match_header, - m_connection.get_strand().wrap(boost::bind( - &type::handle_read_request, - m_connection.shared_from_this(), - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred - )) - ); - } + + boost::asio::async_read_until( + m_connection.get_socket(), + m_connection.buffer(), + "\r\n\r\n", + m_connection.get_strand().wrap(boost::bind( + &type::handle_read_request, + m_connection.shared_from_this(), + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred + )) + ); } /// processes the response from an async read for an HTTP header @@ -840,7 +796,7 @@ void server::connection::write_response() { m_endpoint.m_alog->at(log::alevel::DEBUG_HANDSHAKE) << raw << log::endl; - boost::asio::async_write( // FIXME + boost::asio::async_write( m_connection.get_socket(), //boost::asio::buffer(raw), buffer, From a6d189e2da277ded67d2adb52a9029b9a9434f80 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 23 Jan 2013 17:50:45 -0800 Subject: [PATCH 496/525] Consider accounts that issue offer currencies as affected/mentioned. --- src/cpp/ripple/SerializedTransaction.cpp | 5 +++-- src/cpp/ripple/TransactionMeta.cpp | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/SerializedTransaction.cpp b/src/cpp/ripple/SerializedTransaction.cpp index e7b1ef7e5..5961d25f7 100644 --- a/src/cpp/ripple/SerializedTransaction.cpp +++ b/src/cpp/ripple/SerializedTransaction.cpp @@ -100,9 +100,10 @@ std::vector SerializedTransaction::getMentionedAccounts() const if (!found) accounts.push_back(na); } - if (it.getFName() == sfLimitAmount) + const STAmount* sam = dynamic_cast(&it); + if (sam) { - uint160 issuer = dynamic_cast(&it)->getIssuer(); + uint160 issuer = sam->getIssuer(); if (issuer.isNonZero()) { RippleAddress na; diff --git a/src/cpp/ripple/TransactionMeta.cpp b/src/cpp/ripple/TransactionMeta.cpp index 1e69ec6ae..bd87829a7 100644 --- a/src/cpp/ripple/TransactionMeta.cpp +++ b/src/cpp/ripple/TransactionMeta.cpp @@ -81,7 +81,8 @@ std::vector TransactionMetaSet::getAffectedAccounts() const STAccount* sa = dynamic_cast(&field); if (sa) addIfUnique(accounts, sa->getValueNCA()); - else if ((field.getFName() == sfLowLimit) || (field.getFName() == sfHighLimit)) + else if ((field.getFName() == sfLowLimit) || (field.getFName() == sfHighLimit) || + (field.getFName() == sfTakerPays) || (field.getFName() == sfTakerGets)) { const STAmount* lim = dynamic_cast(&field); if (lim != NULL) From ec7ce16f689bc94c8ea36c31769b7c5dbf52fc30 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Wed, 23 Jan 2013 21:36:37 -0800 Subject: [PATCH 497/525] Fix and improve offer taking and trust setting. --- src/cpp/ripple/LedgerEntrySet.cpp | 48 ++--- src/cpp/ripple/LedgerEntrySet.h | 2 +- src/cpp/ripple/TrustSetTransactor.cpp | 6 +- test/offer-test.js | 257 +++++++++++++++++++++++++- 4 files changed, 285 insertions(+), 28 deletions(-) diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 4bd70f53b..0f6aeb634 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -1147,15 +1147,15 @@ STAmount LedgerEntrySet::rippleTransferFee(const uint160& uSenderID, const uint1 } TER LedgerEntrySet::trustCreate( - const bool bSrcHigh, // Who to charge with reserve. + const bool bSrcHigh, const uint160& uSrcAccountID, - SLE::ref sleSrcAccount, const uint160& uDstAccountID, - const uint256& uIndex, - const STAmount& saSrcBalance, // Issuer should be ACCOUNT_ONE - const STAmount& saSrcLimit, - const uint32 uSrcQualityIn, - const uint32 uSrcQualityOut) + const uint256& uIndex, // --> ripple state entry + SLE::ref sleAccount, // --> the account being set. + const STAmount& saBalance, // --> balance of account being set. Issuer should be ACCOUNT_ONE + const STAmount& saLimit, // --> limit for account being set. Issuer should be the account being set. + const uint32 uQualityIn, + const uint32 uQualityOut) { const uint160& uLowAccountID = !bSrcHigh ? uSrcAccountID : uDstAccountID; const uint160& uHighAccountID = bSrcHigh ? uSrcAccountID : uDstAccountID; @@ -1182,23 +1182,26 @@ TER LedgerEntrySet::trustCreate( if (tesSUCCESS == terResult) { - sleRippleState->setFieldU64(sfLowNode, uLowNode); + const bool bSetDst = saLimit.getIssuer() == uDstAccountID; + const bool bSetHigh = bSrcHigh ^ bSetDst; + + sleRippleState->setFieldU64(sfLowNode, uLowNode); // Remember deletion hints. sleRippleState->setFieldU64(sfHighNode, uHighNode); - sleRippleState->setFieldAmount(!bSrcHigh ? sfLowLimit : sfHighLimit, saSrcLimit); - sleRippleState->setFieldAmount( bSrcHigh ? sfLowLimit : sfHighLimit, STAmount(saSrcBalance.getCurrency(), uDstAccountID)); + sleRippleState->setFieldAmount(!bSetHigh ? sfLowLimit : sfHighLimit, saLimit); + sleRippleState->setFieldAmount( bSetHigh ? sfLowLimit : sfHighLimit, STAmount(saBalance.getCurrency(), bSetDst ? uSrcAccountID : uDstAccountID)); - if (uSrcQualityIn) - sleRippleState->setFieldU32(bSrcHigh ? sfHighQualityIn : sfLowQualityIn, uSrcQualityIn); + if (uQualityIn) + sleRippleState->setFieldU32(!bSetHigh ? sfLowQualityIn : sfHighQualityIn, uQualityIn); - if (uSrcQualityOut) - sleRippleState->setFieldU32(bSrcHigh ? sfHighQualityOut : sfLowQualityOut, uSrcQualityIn); + if (uQualityOut) + sleRippleState->setFieldU32(!bSetHigh ? sfLowQualityOut : sfHighQualityOut, uQualityOut); - sleRippleState->setFieldU32(sfFlags, !bSrcHigh ? lsfLowReserve : lsfHighReserve); + sleRippleState->setFieldU32(sfFlags, !bSetHigh ? lsfLowReserve : lsfHighReserve); - ownerCountAdjust(uSrcAccountID, 1, sleSrcAccount); + ownerCountAdjust(!bSetDst ? uSrcAccountID : uDstAccountID, 1, sleAccount); - sleRippleState->setFieldAmount(sfBalance, bSrcHigh ? -saSrcBalance: saSrcBalance); + sleRippleState->setFieldAmount(sfBalance, bSetHigh ? -saBalance : saBalance); } return terResult; @@ -1223,25 +1226,24 @@ TER LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uRecei if (!sleRippleState) { - STAmount saSrcLimit = STAmount(uCurrencyID, uSenderID); - STAmount saBalance = saAmount; + STAmount saReceiverLimit = STAmount(uCurrencyID, uReceiverID); + STAmount saBalance = saAmount; saBalance.setIssuer(ACCOUNT_ONE); - cLog(lsDEBUG) << boost::str(boost::format("rippleCredit: create line: %s (%s) -> %s : %s") + cLog(lsDEBUG) << boost::str(boost::format("rippleCredit: create line: %s (0) -> %s : %s") % RippleAddress::createHumanAccountID(uSenderID) - % saBalance.getFullText() % RippleAddress::createHumanAccountID(uReceiverID) % saAmount.getFullText()); terResult = trustCreate( bSenderHigh, uSenderID, - entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(uSenderID)), uReceiverID, uIndex, + entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(uReceiverID)), saBalance, - saSrcLimit); + saReceiverLimit); } else { diff --git a/src/cpp/ripple/LedgerEntrySet.h b/src/cpp/ripple/LedgerEntrySet.h index 159ef4374..92f012a88 100644 --- a/src/cpp/ripple/LedgerEntrySet.h +++ b/src/cpp/ripple/LedgerEntrySet.h @@ -132,9 +132,9 @@ public: TER trustCreate( const bool bSrcHigh, const uint160& uSrcAccountID, - SLE::ref sleSrcAccount, const uint160& uDstAccountID, const uint256& uIndex, + SLE::ref sleAccount, const STAmount& saSrcBalance, const STAmount& saSrcLimit, const uint32 uSrcQualityIn = 0, diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index ca852b82f..b3fc39a41 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -287,13 +287,13 @@ TER TrustSetTransactor::doApply() // Create a new ripple line. terResult = mEngine->getNodes().trustCreate( - bHigh, // Who to charge with reserve. + bHigh, mTxnAccountID, - mTxnAccount, uDstAccountID, Ledger::getRippleStateIndex(mTxnAccountID, uDstAccountID, uCurrencyID), + mTxnAccount, saBalance, - saLimitAllow, + saLimitAllow, // Limit for who is being charged. uQualityIn, uQualityOut); } diff --git a/test/offer-test.js b/test/offer-test.js index 09d6aeb28..787e06c43 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -72,7 +72,7 @@ buster.testCase("Offer tests", { }); }, - "offer create then crossing offer, no trust lines" : + "offer create then crossing offer, no trust lines with self" : function (done) { var self = this; @@ -108,6 +108,261 @@ buster.testCase("Offer tests", { }); }, + // rippled broken: Balances are wrong. + "Offer create then crossing offer with XRP. Reverse order." : + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "100000.0", ["alice", "bob", "mtgox"], callback); + }, + function (callback) { + self.what = "Set limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "1000/USD/mtgox", + "bob" : "1000/USD/mtgox" + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "mtgox" : "500/USD/alice" + }, + callback); + }, + function (callback) { + self.what = "Create first offer."; + + self.remote.transaction() + .offer_create("bob", "1/USD/mtgox", "4000.0") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Create crossing offer."; + + self.remote.transaction() + .offer_create("alice", "150000.0", "50/USD/mtgox") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : [ "499/USD/mtgox", String(100000000000+4000000000-2*(Remote.fees['default'].to_number())) ], + "bob" : [ "1/USD/mtgox", String(100000000000-4000000000-2*(Remote.fees['default'].to_number())) ], + }, + callback); + }, +// function (callback) { +// self.what = "Display ledger"; +// +// self.remote.request_ledger('current', true) +// .on('success', function (m) { +// console.log("Ledger: %s", JSON.stringify(m, undefined, 2)); +// +// callback(); +// }) +// .request(); +// }, + ], function (error) { + // console.log("result: error=%s", error); + buster.refute(error, self.what); + done(); + }); + }, + + "Offer create then crossing offer with XRP." : + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "100000.0", ["alice", "bob", "mtgox"], callback); + }, + function (callback) { + self.what = "Set limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "1000/USD/mtgox", + "bob" : "1000/USD/mtgox" + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "mtgox" : "500/USD/alice" + }, + callback); + }, + function (callback) { + self.what = "Create first offer."; + + self.remote.transaction() + .offer_create("alice", "150000.0", "50/USD/mtgox") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Create crossing offer."; + + self.remote.transaction() + .offer_create("bob", "1/USD/mtgox", "4000.0") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : [ "499/USD/mtgox", String(100000000000+4000000000-2*(Remote.fees['default'].to_number())) ], + "bob" : [ "1/USD/mtgox", String(100000000000-4000000000-2*(Remote.fees['default'].to_number())) ], + }, + callback); + }, +// function (callback) { +// self.what = "Display ledger"; +// +// self.remote.request_ledger('current', true) +// .on('success', function (m) { +// console.log("Ledger: %s", JSON.stringify(m, undefined, 2)); +// +// callback(); +// }) +// .request(); +// }, + ], function (error) { + // console.log("result: error=%s", error); + buster.refute(error, self.what); + done(); + }); + }, + + "Offer create then crossing offer with XRP with limit override." : + function (done) { + var self = this; + + async.waterfall([ + function (callback) { + self.what = "Create accounts."; + + testutils.create_accounts(self.remote, "root", "100000.0", ["alice", "bob", "mtgox"], callback); + }, + function (callback) { + self.what = "Set limits."; + + testutils.credit_limits(self.remote, + { + "alice" : "1000/USD/mtgox", +// "bob" : "1000/USD/mtgox" + }, + callback); + }, + function (callback) { + self.what = "Distribute funds."; + + testutils.payments(self.remote, + { + "mtgox" : "500/USD/alice" + }, + callback); + }, + function (callback) { + self.what = "Create first offer."; + + self.remote.transaction() + .offer_create("alice", "150000.0", "50/USD/mtgox") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Display ledger"; + + self.remote.request_ledger('current', true) + .on('success', function (m) { + console.log("Ledger: %s", JSON.stringify(m, undefined, 2)); + + callback(); + }) + .request(); + }, + function (callback) { + self.what = "Create crossing offer."; + + self.remote.transaction() + .offer_create("bob", "1/USD/mtgox", "4000.0") + .on('proposed', function (m) { + // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); + + callback(m.result !== 'tesSUCCESS'); + }) + .submit(); + }, + function (callback) { + self.what = "Verify balances."; + + testutils.verify_balances(self.remote, + { + "alice" : [ "499/USD/mtgox", String(100000000000+4000000000-2*(Remote.fees['default'].to_number())) ], + "bob" : [ "1/USD/mtgox", String(100000000000-4000000000-1*(Remote.fees['default'].to_number())) ], + }, + callback); + }, +// function (callback) { +// self.what = "Display ledger"; +// +// self.remote.request_ledger('current', true) +// .on('success', function (m) { +// console.log("Ledger: %s", JSON.stringify(m, undefined, 2)); +// +// callback(); +// }) +// .request(); +// }, + ], function (error) { + // console.log("result: error=%s", error); + buster.refute(error, self.what); + done(); + }); + }, + "offer_create then ledger_accept then offer_cancel then ledger_accept." : function (done) { var self = this; From 851db1ce23d21dcd743b67a8be8c1e3927686d57 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Thu, 24 Jan 2013 17:09:08 +0100 Subject: [PATCH 498/525] Split Transaction class off into separate file. --- src/js/remote.js | 521 +---------------------------------------- src/js/transaction.js | 522 ++++++++++++++++++++++++++++++++++++++++++ test/offer-test.js | 23 +- test/reserve-test.js | 23 +- 4 files changed, 550 insertions(+), 539 deletions(-) create mode 100644 src/js/transaction.js diff --git a/src/js/remote.js b/src/js/remote.js index f9de6ed51..c1e45e03c 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -16,9 +16,10 @@ // npm var EventEmitter = require('events').EventEmitter; -var Amount = require('./amount.js').Amount; -var Currency = require('./amount.js').Currency; -var UInt160 = require('./amount.js').UInt160; +var Amount = require('./amount').Amount; +var Currency = require('./amount').Currency; +var UInt160 = require('./amount').UInt160; +var Transaction = require('./transaction').Transaction; var utils = require('./utils'); @@ -281,25 +282,6 @@ Remote.online_states = [ 'full' ]; -Remote.flags = { - 'OfferCreate' : { - 'Passive' : 0x00010000, - }, - - 'Payment' : { - 'NoRippleDirect' : 0x00010000, - 'PartialPayment' : 0x00020000, - 'LimitQuality' : 0x00040000, - }, -}; - -// XXX This needs to be determined from the network. -Remote.fees = { - 'default' : Amount.from_json("10"), - 'nickname_create' : Amount.from_json("1000"), - 'offer' : Amount.from_json("10"), -}; - // Inform remote that the remote server is not comming back. Remote.prototype.server_fatal = function () { this._server_fatal = true; @@ -1173,501 +1155,6 @@ Remote.prototype.transaction = function () { return new Transaction(this); }; -// -// Transactions -// -// Construction: -// remote.transaction() // Build a transaction object. -// .offer_create(...) // Set major parameters. -// .set_flags() // Set optional parameters. -// .on() // Register for events. -// .submit(); // Send to network. -// -// Events: -// 'success' : Transaction submitted without error. -// 'error' : Error submitting transaction. -// 'proposed' : Advisory proposed status transaction. -// - A client should expect 0 to multiple results. -// - Might not get back. The remote might just forward the transaction. -// - A success could be reverted in final. -// - local error: other remotes might like it. -// - malformed error: local server thought it was malformed. -// - The client should only trust this when talking to a trusted server. -// 'final' : Final status of transaction. -// - Only expect a final from dishonest servers after a tesSUCCESS or ter*. -// 'lost' : Gave up looking for on ledger_closed. -// 'pending' : Transaction was not found on ledger_closed. -// 'state' : Follow the state of a transaction. -// 'client_submitted' - Sent to remote -// |- 'remoteError' - Remote rejected transaction. -// \- 'client_proposed' - Remote provisionally accepted transaction. -// |- 'client_missing' - Transaction has not appeared in ledger as expected. -// | |\- 'client_lost' - No longer monitoring missing transaction. -// |/ -// |- 'tesSUCCESS' - Transaction in ledger as expected. -// |- 'ter...' - Transaction failed. -// \- 'tec...' - Transaction claimed fee only. -// -// Notes: -// - All transactions including those with local and malformed errors may be -// forwarded anyway. -// - A malicous server can: -// - give any proposed result. -// - it may declare something correct as incorrect or something correct as incorrect. -// - it may not communicate with the rest of the network. -// - may or may not forward. -// - -var SUBMIT_MISSING = 4; // Report missing. -var SUBMIT_LOST = 8; // Give up tracking. - -// A class to implement transactions. -// - Collects parameters -// - Allow event listeners to be attached to determine the outcome. -var Transaction = function (remote) { - // YYY Make private as many variables as possible. - var self = this; - - this.callback = undefined; - this.remote = remote; - this._secret = undefined; - this._build_path = false; - this.tx_json = { // Transaction data. - 'Flags' : 0, // XXX Would be nice if server did not require this. - }; - this.hash = undefined; - this.submit_index = undefined; // ledger_current_index was this when transaction was submited. - this.state = undefined; // Under construction. - - this.on('success', function (message) { - if (message.engine_result) { - self.hash = message.tx_json.hash; - - self.set_state('client_proposed'); - - self.emit('proposed', { - 'tx_json' : message.tx_json, - 'result' : message.engine_result, - 'result_code' : message.engine_result_code, - 'result_message' : message.engine_result_message, - 'rejected' : self.isRejected(message.engine_result_code), // If server is honest, don't expect a final if rejected. - }); - } - }); - - this.on('error', function (message) { - // Might want to give more detailed information. - self.set_state('remoteError'); - }); -}; - -Transaction.prototype = new EventEmitter; - -Transaction.prototype.consts = { - 'telLOCAL_ERROR' : -399, - 'temMALFORMED' : -299, - 'tefFAILURE' : -199, - 'terRETRY' : -99, - 'tesSUCCESS' : 0, - 'tecCLAIMED' : 100, -}; - -Transaction.prototype.isTelLocal = function (ter) { - return ter >= this.consts.telLOCAL_ERROR && ter < this.consts.temMALFORMED; -}; - -Transaction.prototype.isTemMalformed = function (ter) { - return ter >= this.consts.temMALFORMED && ter < this.consts.tefFAILURE; -}; - -Transaction.prototype.isTefFailure = function (ter) { - return ter >= this.consts.tefFAILURE && ter < this.consts.terRETRY; -}; - -Transaction.prototype.isTerRetry = function (ter) { - return ter >= this.consts.terRETRY && ter < this.consts.tesSUCCESS; -}; - -Transaction.prototype.isTepSuccess = function (ter) { - return ter >= this.consts.tesSUCCESS; -}; - -Transaction.prototype.isTecClaimed = function (ter) { - return ter >= this.consts.tecCLAIMED; -}; - -Transaction.prototype.isRejected = function (ter) { - return this.isTelLocal(ter) || this.isTemMalformed(ter) || this.isTefFailure(ter); -}; - -Transaction.prototype.set_state = function (state) { - if (this.state !== state) { - this.state = state; - this.emit('state', state); - } -}; - -// Submit a transaction to the network. -// XXX Don't allow a submit without knowing ledger_index. -// XXX Have a network canSubmit(), post events for following. -// XXX Also give broader status for tracking through network disconnects. -// callback = function (status, info) { -// // status is final status. Only works under a ledger_accepting conditions. -// switch status: -// case 'tesSUCCESS': all is well. -// case 'tejServerUntrusted': sending secret to untrusted server. -// case 'tejInvalidAccount': locally detected error. -// case 'tejLost': locally gave up looking -// default: some other TER -// } -Transaction.prototype.submit = function (callback) { - var self = this; - var tx_json = this.tx_json; - - this.callback = callback; - - if ('string' !== typeof tx_json.Account) - { - (this.callback || this.emit)('error', { - 'error' : 'tejInvalidAccount', - 'error_message' : 'Bad account.' - }); - return; - } - - // YYY Might check paths for invalid accounts. - - if (this.remote.local_fee && undefined === tx_json.Fee) { - tx_json.Fee = Remote.fees['default'].to_json(); - } - - if (this.callback || this.listeners('final').length || this.listeners('lost').length || this.listeners('pending').length) { - // There are listeners for callback, 'final', 'lost', or 'pending' arrange to emit them. - - this.submit_index = this.remote._ledger_current_index; - - // When a ledger closes, look for the result. - var on_ledger_closed = function (message) { - var ledger_hash = message.ledger_hash; - var ledger_index = message.ledger_index; - var stop = false; - -// XXX make sure self.hash is available. - self.remote.request_transaction_entry(self.hash) - .ledger_hash(ledger_hash) - .on('success', function (message) { - self.set_state(message.metadata.TransactionResult); - self.emit('final', message); - - if (self.callback) - self.callback(message.metadata.TransactionResult, message); - - stop = true; - }) - .on('error', function (message) { - if ('remoteError' === message.error - && 'transactionNotFound' === message.remote.error) { - if (self.submit_index + SUBMIT_LOST < ledger_index) { - self.set_state('client_lost'); // Gave up. - self.emit('lost'); - - if (self.callback) - self.callback('tejLost', message); - - stop = true; - } - else if (self.submit_index + SUBMIT_MISSING < ledger_index) { - self.set_state('client_missing'); // We don't know what happened to transaction, still might find. - self.emit('pending'); - } - else { - self.emit('pending'); - } - } - // XXX Could log other unexpectedness. - }) - .request(); - - if (stop) { - self.remote.removeListener('ledger_closed', on_ledger_closed); - self.emit('final', message); - } - }; - - this.remote.on('ledger_closed', on_ledger_closed); - - if (this.callback) { - this.on('error', function (message) { - self.callback(message.error, message); - }); - } - } - - this.set_state('client_submitted'); - - this.remote.submit(this); - - return this; -} - -// -// Set options for Transactions -// - -// --> build: true, to have server blindly construct a path. -// -// "blindly" because the sender has no idea of the actual cost except that is must be less than send max. -Transaction.prototype.build_path = function (build) { - this._build_path = build; - - return this; -} - -// tag should be undefined or a 32 bit integer. -// YYY Add range checking for tag. -Transaction.prototype.destination_tag = function (tag) { - if (undefined !== tag) - this.tx_json.DestinationTag = tag; - - return this; -} - -Transaction._path_rewrite = function (path) { - var path_new = []; - - for (var index in path) { - var node = path[index]; - var node_new = {}; - - if ('account' in node) - node_new.account = UInt160.json_rewrite(node.account); - - if ('issuer' in node) - node_new.issuer = UInt160.json_rewrite(node.issuer); - - if ('currency' in node) - node_new.currency = Currency.json_rewrite(node.currency); - - path_new.push(node_new); - } - - return path_new; -} - -Transaction.prototype.path_add = function (path) { - this.tx_json.Paths = this.tx_json.Paths || [] - this.tx_json.Paths.push(Transaction._path_rewrite(path)); - - return this; -} - -// --> paths: undefined or array of path -// A path is an array of objects containing some combination of: account, currency, issuer -Transaction.prototype.paths = function (paths) { - for (var index in paths) { - this.path_add(paths[index]); - } - - return this; -} - -// If the secret is in the config object, it does not need to be provided. -Transaction.prototype.secret = function (secret) { - this._secret = secret; -} - -Transaction.prototype.send_max = function (send_max) { - if (send_max) - this.tx_json.SendMax = Amount.json_rewrite(send_max); - - return this; -} - -// tag should be undefined or a 32 bit integer. -// YYY Add range checking for tag. -Transaction.prototype.source_tag = function (tag) { - if (undefined !== tag) - this.tx_json.SourceTag = tag; - - return this; -} - -// --> rate: In billionths. -Transaction.prototype.transfer_rate = function (rate) { - this.tx_json.TransferRate = Number(rate); - - if (this.tx_json.TransferRate < 1e9) - throw 'invalidTransferRate'; - - return this; -} - -// Add flags to a transaction. -// --> flags: undefined, _flag_, or [ _flags_ ] -Transaction.prototype.set_flags = function (flags) { - if (flags) { - var transaction_flags = Remote.flags[this.tx_json.TransactionType]; - - if (undefined == this.tx_json.Flags) // We plan to not define this field on new Transaction. - this.tx_json.Flags = 0; - - var flag_set = 'object' === typeof flags ? flags : [ flags ]; - - for (index in flag_set) { - var flag = flag_set[index]; - - if (flag in transaction_flags) - { - this.tx_json.Flags += transaction_flags[flag]; - } - else { - // XXX Immediately report an error or mark it. - } - } - } - - return this; -} - -// -// Transactions -// - -Transaction.prototype._account_secret = function (account) { - // Fill in secret from remote, if available. - return this.remote.secrets[account]; -}; - -// Options: -// .domain() NYI -// .message_key() NYI -// .transfer_rate() -// .wallet_locator() NYI -// .wallet_size() NYI -Transaction.prototype.account_set = function (src) { - this._secret = this._account_secret(src); - this.tx_json.TransactionType = 'AccountSet'; - this.tx_json.Account = UInt160.json_rewrite(src); - - return this; -}; - -Transaction.prototype.claim = function (src, generator, public_key, signature) { - this._secret = this._account_secret(src); - this.tx_json.TransactionType = 'Claim'; - this.tx_json.Generator = generator; - this.tx_json.PublicKey = public_key; - this.tx_json.Signature = signature; - - return this; -}; - -Transaction.prototype.offer_cancel = function (src, sequence) { - this._secret = this._account_secret(src); - this.tx_json.TransactionType = 'OfferCancel'; - this.tx_json.Account = UInt160.json_rewrite(src); - this.tx_json.OfferSequence = Number(sequence); - - return this; -}; - -// --> expiration : Date or Number -Transaction.prototype.offer_create = function (src, taker_pays, taker_gets, expiration) { - this._secret = this._account_secret(src); - this.tx_json.TransactionType = 'OfferCreate'; - this.tx_json.Account = UInt160.json_rewrite(src); - this.tx_json.TakerPays = Amount.json_rewrite(taker_pays); - this.tx_json.TakerGets = Amount.json_rewrite(taker_gets); - - if (this.remote.local_fee) { - this.tx_json.Fee = Remote.fees.offer.to_json(); - } - - if (expiration) - this.tx_json.Expiration = Date === expiration.constructor - ? expiration.getTime() - : Number(expiration); - - return this; -}; - -Transaction.prototype.password_fund = function (src, dst) { - this._secret = this._account_secret(src); - this.tx_json.TransactionType = 'PasswordFund'; - this.tx_json.Destination = UInt160.json_rewrite(dst); - - return this; -} - -Transaction.prototype.password_set = function (src, authorized_key, generator, public_key, signature) { - this._secret = this._account_secret(src); - this.tx_json.TransactionType = 'PasswordSet'; - this.tx_json.RegularKey = authorized_key; - this.tx_json.Generator = generator; - this.tx_json.PublicKey = public_key; - this.tx_json.Signature = signature; - - return this; -} - -// Construct a 'payment' transaction. -// -// When a transaction is submitted: -// - If the connection is reliable and the server is not merely forwarding and is not malicious, -// --> src : UInt160 or String -// --> dst : UInt160 or String -// --> deliver_amount : Amount or String. -// -// Options: -// .paths() -// .build_path() -// .destination_tag() -// .path_add() -// .secret() -// .send_max() -// .set_flags() -// .source_tag() -Transaction.prototype.payment = function (src, dst, deliver_amount) { - this._secret = this._account_secret(src); - this.tx_json.TransactionType = 'Payment'; - this.tx_json.Account = UInt160.json_rewrite(src); - this.tx_json.Amount = Amount.json_rewrite(deliver_amount); - this.tx_json.Destination = UInt160.json_rewrite(dst); - - return this; -} - -Transaction.prototype.ripple_line_set = function (src, limit, quality_in, quality_out) { - this._secret = this._account_secret(src); - this.tx_json.TransactionType = 'TrustSet'; - this.tx_json.Account = UInt160.json_rewrite(src); - - // Allow limit of 0 through. - if (undefined !== limit) - this.tx_json.LimitAmount = Amount.json_rewrite(limit); - - if (quality_in) - this.tx_json.QualityIn = quality_in; - - if (quality_out) - this.tx_json.QualityOut = quality_out; - - // XXX Throw an error if nothing is set. - - return this; -}; - -Transaction.prototype.wallet_add = function (src, amount, authorized_key, public_key, signature) { - this._secret = this._account_secret(src); - this.tx_json.TransactionType = 'WalletAdd'; - this.tx_json.Amount = Amount.json_rewrite(amount); - this.tx_json.RegularKey = authorized_key; - this.tx_json.PublicKey = public_key; - this.tx_json.Signature = signature; - - return this; -}; - exports.config = {}; exports.Remote = Remote; diff --git a/src/js/transaction.js b/src/js/transaction.js new file mode 100644 index 000000000..3fedb3dca --- /dev/null +++ b/src/js/transaction.js @@ -0,0 +1,522 @@ +// +// Transactions +// +// Construction: +// remote.transaction() // Build a transaction object. +// .offer_create(...) // Set major parameters. +// .set_flags() // Set optional parameters. +// .on() // Register for events. +// .submit(); // Send to network. +// +// Events: +// 'success' : Transaction submitted without error. +// 'error' : Error submitting transaction. +// 'proposed' : Advisory proposed status transaction. +// - A client should expect 0 to multiple results. +// - Might not get back. The remote might just forward the transaction. +// - A success could be reverted in final. +// - local error: other remotes might like it. +// - malformed error: local server thought it was malformed. +// - The client should only trust this when talking to a trusted server. +// 'final' : Final status of transaction. +// - Only expect a final from dishonest servers after a tesSUCCESS or ter*. +// 'lost' : Gave up looking for on ledger_closed. +// 'pending' : Transaction was not found on ledger_closed. +// 'state' : Follow the state of a transaction. +// 'client_submitted' - Sent to remote +// |- 'remoteError' - Remote rejected transaction. +// \- 'client_proposed' - Remote provisionally accepted transaction. +// |- 'client_missing' - Transaction has not appeared in ledger as expected. +// | |\- 'client_lost' - No longer monitoring missing transaction. +// |/ +// |- 'tesSUCCESS' - Transaction in ledger as expected. +// |- 'ter...' - Transaction failed. +// \- 'tec...' - Transaction claimed fee only. +// +// Notes: +// - All transactions including those with local and malformed errors may be +// forwarded anyway. +// - A malicous server can: +// - give any proposed result. +// - it may declare something correct as incorrect or something correct as incorrect. +// - it may not communicate with the rest of the network. +// - may or may not forward. +// + +var Amount = require('./amount').Amount; +var Currency = require('./amount').Currency; +var UInt160 = require('./amount').UInt160; +var EventEmitter = require('events').EventEmitter; + +var SUBMIT_MISSING = 4; // Report missing. +var SUBMIT_LOST = 8; // Give up tracking. + +// A class to implement transactions. +// - Collects parameters +// - Allow event listeners to be attached to determine the outcome. +var Transaction = function (remote) { + // YYY Make private as many variables as possible. + var self = this; + + this.callback = undefined; + this.remote = remote; + this._secret = undefined; + this._build_path = false; + this.tx_json = { // Transaction data. + 'Flags' : 0, // XXX Would be nice if server did not require this. + }; + this.hash = undefined; + this.submit_index = undefined; // ledger_current_index was this when transaction was submited. + this.state = undefined; // Under construction. + + this.on('success', function (message) { + if (message.engine_result) { + self.hash = message.tx_json.hash; + + self.set_state('client_proposed'); + + self.emit('proposed', { + 'tx_json' : message.tx_json, + 'result' : message.engine_result, + 'result_code' : message.engine_result_code, + 'result_message' : message.engine_result_message, + 'rejected' : self.isRejected(message.engine_result_code), // If server is honest, don't expect a final if rejected. + }); + } + }); + + this.on('error', function (message) { + // Might want to give more detailed information. + self.set_state('remoteError'); + }); +}; + +Transaction.prototype = new EventEmitter; + +// XXX This needs to be determined from the network. +Transaction.fees = { + 'default' : Amount.from_json("10"), + 'nickname_create' : Amount.from_json("1000"), + 'offer' : Amount.from_json("10"), +}; + +Transaction.flags = { + 'OfferCreate' : { + 'Passive' : 0x00010000, + }, + + 'Payment' : { + 'NoRippleDirect' : 0x00010000, + 'PartialPayment' : 0x00020000, + 'LimitQuality' : 0x00040000, + }, +}; + +Transaction.prototype.consts = { + 'telLOCAL_ERROR' : -399, + 'temMALFORMED' : -299, + 'tefFAILURE' : -199, + 'terRETRY' : -99, + 'tesSUCCESS' : 0, + 'tecCLAIMED' : 100, +}; + +Transaction.prototype.isTelLocal = function (ter) { + return ter >= this.consts.telLOCAL_ERROR && ter < this.consts.temMALFORMED; +}; + +Transaction.prototype.isTemMalformed = function (ter) { + return ter >= this.consts.temMALFORMED && ter < this.consts.tefFAILURE; +}; + +Transaction.prototype.isTefFailure = function (ter) { + return ter >= this.consts.tefFAILURE && ter < this.consts.terRETRY; +}; + +Transaction.prototype.isTerRetry = function (ter) { + return ter >= this.consts.terRETRY && ter < this.consts.tesSUCCESS; +}; + +Transaction.prototype.isTepSuccess = function (ter) { + return ter >= this.consts.tesSUCCESS; +}; + +Transaction.prototype.isTecClaimed = function (ter) { + return ter >= this.consts.tecCLAIMED; +}; + +Transaction.prototype.isRejected = function (ter) { + return this.isTelLocal(ter) || this.isTemMalformed(ter) || this.isTefFailure(ter); +}; + +Transaction.prototype.set_state = function (state) { + if (this.state !== state) { + this.state = state; + this.emit('state', state); + } +}; + +// Submit a transaction to the network. +// XXX Don't allow a submit without knowing ledger_index. +// XXX Have a network canSubmit(), post events for following. +// XXX Also give broader status for tracking through network disconnects. +// callback = function (status, info) { +// // status is final status. Only works under a ledger_accepting conditions. +// switch status: +// case 'tesSUCCESS': all is well. +// case 'tejServerUntrusted': sending secret to untrusted server. +// case 'tejInvalidAccount': locally detected error. +// case 'tejLost': locally gave up looking +// default: some other TER +// } +Transaction.prototype.submit = function (callback) { + var self = this; + var tx_json = this.tx_json; + + this.callback = callback; + + if ('string' !== typeof tx_json.Account) + { + (this.callback || this.emit)('error', { + 'error' : 'tejInvalidAccount', + 'error_message' : 'Bad account.' + }); + return; + } + + // YYY Might check paths for invalid accounts. + + if (this.remote.local_fee && undefined === tx_json.Fee) { + tx_json.Fee = Transaction.fees['default'].to_json(); + } + + if (this.callback || this.listeners('final').length || this.listeners('lost').length || this.listeners('pending').length) { + // There are listeners for callback, 'final', 'lost', or 'pending' arrange to emit them. + + this.submit_index = this.remote._ledger_current_index; + + // When a ledger closes, look for the result. + var on_ledger_closed = function (message) { + var ledger_hash = message.ledger_hash; + var ledger_index = message.ledger_index; + var stop = false; + +// XXX make sure self.hash is available. + self.remote.request_transaction_entry(self.hash) + .ledger_hash(ledger_hash) + .on('success', function (message) { + self.set_state(message.metadata.TransactionResult); + self.emit('final', message); + + if (self.callback) + self.callback(message.metadata.TransactionResult, message); + + stop = true; + }) + .on('error', function (message) { + if ('remoteError' === message.error + && 'transactionNotFound' === message.remote.error) { + if (self.submit_index + SUBMIT_LOST < ledger_index) { + self.set_state('client_lost'); // Gave up. + self.emit('lost'); + + if (self.callback) + self.callback('tejLost', message); + + stop = true; + } + else if (self.submit_index + SUBMIT_MISSING < ledger_index) { + self.set_state('client_missing'); // We don't know what happened to transaction, still might find. + self.emit('pending'); + } + else { + self.emit('pending'); + } + } + // XXX Could log other unexpectedness. + }) + .request(); + + if (stop) { + self.remote.removeListener('ledger_closed', on_ledger_closed); + self.emit('final', message); + } + }; + + this.remote.on('ledger_closed', on_ledger_closed); + + if (this.callback) { + this.on('error', function (message) { + self.callback(message.error, message); + }); + } + } + + this.set_state('client_submitted'); + + this.remote.submit(this); + + return this; +} + +// +// Set options for Transactions +// + +// --> build: true, to have server blindly construct a path. +// +// "blindly" because the sender has no idea of the actual cost except that is must be less than send max. +Transaction.prototype.build_path = function (build) { + this._build_path = build; + + return this; +} + +// tag should be undefined or a 32 bit integer. +// YYY Add range checking for tag. +Transaction.prototype.destination_tag = function (tag) { + if (undefined !== tag) + this.tx_json.DestinationTag = tag; + + return this; +} + +Transaction._path_rewrite = function (path) { + var path_new = []; + + for (var index in path) { + var node = path[index]; + var node_new = {}; + + if ('account' in node) + node_new.account = UInt160.json_rewrite(node.account); + + if ('issuer' in node) + node_new.issuer = UInt160.json_rewrite(node.issuer); + + if ('currency' in node) + node_new.currency = Currency.json_rewrite(node.currency); + + path_new.push(node_new); + } + + return path_new; +} + +Transaction.prototype.path_add = function (path) { + this.tx_json.Paths = this.tx_json.Paths || [] + this.tx_json.Paths.push(Transaction._path_rewrite(path)); + + return this; +} + +// --> paths: undefined or array of path +// A path is an array of objects containing some combination of: account, currency, issuer +Transaction.prototype.paths = function (paths) { + for (var index in paths) { + this.path_add(paths[index]); + } + + return this; +} + +// If the secret is in the config object, it does not need to be provided. +Transaction.prototype.secret = function (secret) { + this._secret = secret; +} + +Transaction.prototype.send_max = function (send_max) { + if (send_max) + this.tx_json.SendMax = Amount.json_rewrite(send_max); + + return this; +} + +// tag should be undefined or a 32 bit integer. +// YYY Add range checking for tag. +Transaction.prototype.source_tag = function (tag) { + if (undefined !== tag) + this.tx_json.SourceTag = tag; + + return this; +} + +// --> rate: In billionths. +Transaction.prototype.transfer_rate = function (rate) { + this.tx_json.TransferRate = Number(rate); + + if (this.tx_json.TransferRate < 1e9) + throw 'invalidTransferRate'; + + return this; +} + +// Add flags to a transaction. +// --> flags: undefined, _flag_, or [ _flags_ ] +Transaction.prototype.set_flags = function (flags) { + if (flags) { + var transaction_flags = Transaction.flags[this.tx_json.TransactionType]; + + if (undefined == this.tx_json.Flags) // We plan to not define this field on new Transaction. + this.tx_json.Flags = 0; + + var flag_set = 'object' === typeof flags ? flags : [ flags ]; + + for (index in flag_set) { + var flag = flag_set[index]; + + if (flag in transaction_flags) + { + this.tx_json.Flags += transaction_flags[flag]; + } + else { + // XXX Immediately report an error or mark it. + } + } + } + + return this; +} + +// +// Transactions +// + +Transaction.prototype._account_secret = function (account) { + // Fill in secret from remote, if available. + return this.remote.secrets[account]; +}; + +// Options: +// .domain() NYI +// .message_key() NYI +// .transfer_rate() +// .wallet_locator() NYI +// .wallet_size() NYI +Transaction.prototype.account_set = function (src) { + this._secret = this._account_secret(src); + this.tx_json.TransactionType = 'AccountSet'; + this.tx_json.Account = UInt160.json_rewrite(src); + + return this; +}; + +Transaction.prototype.claim = function (src, generator, public_key, signature) { + this._secret = this._account_secret(src); + this.tx_json.TransactionType = 'Claim'; + this.tx_json.Generator = generator; + this.tx_json.PublicKey = public_key; + this.tx_json.Signature = signature; + + return this; +}; + +Transaction.prototype.offer_cancel = function (src, sequence) { + this._secret = this._account_secret(src); + this.tx_json.TransactionType = 'OfferCancel'; + this.tx_json.Account = UInt160.json_rewrite(src); + this.tx_json.OfferSequence = Number(sequence); + + return this; +}; + +// --> expiration : Date or Number +Transaction.prototype.offer_create = function (src, taker_pays, taker_gets, expiration) { + this._secret = this._account_secret(src); + this.tx_json.TransactionType = 'OfferCreate'; + this.tx_json.Account = UInt160.json_rewrite(src); + this.tx_json.TakerPays = Amount.json_rewrite(taker_pays); + this.tx_json.TakerGets = Amount.json_rewrite(taker_gets); + + if (this.remote.local_fee) { + this.tx_json.Fee = Transaction.fees.offer.to_json(); + } + + if (expiration) + this.tx_json.Expiration = Date === expiration.constructor + ? expiration.getTime() + : Number(expiration); + + return this; +}; + +Transaction.prototype.password_fund = function (src, dst) { + this._secret = this._account_secret(src); + this.tx_json.TransactionType = 'PasswordFund'; + this.tx_json.Destination = UInt160.json_rewrite(dst); + + return this; +} + +Transaction.prototype.password_set = function (src, authorized_key, generator, public_key, signature) { + this._secret = this._account_secret(src); + this.tx_json.TransactionType = 'PasswordSet'; + this.tx_json.RegularKey = authorized_key; + this.tx_json.Generator = generator; + this.tx_json.PublicKey = public_key; + this.tx_json.Signature = signature; + + return this; +} + +// Construct a 'payment' transaction. +// +// When a transaction is submitted: +// - If the connection is reliable and the server is not merely forwarding and is not malicious, +// --> src : UInt160 or String +// --> dst : UInt160 or String +// --> deliver_amount : Amount or String. +// +// Options: +// .paths() +// .build_path() +// .destination_tag() +// .path_add() +// .secret() +// .send_max() +// .set_flags() +// .source_tag() +Transaction.prototype.payment = function (src, dst, deliver_amount) { + this._secret = this._account_secret(src); + this.tx_json.TransactionType = 'Payment'; + this.tx_json.Account = UInt160.json_rewrite(src); + this.tx_json.Amount = Amount.json_rewrite(deliver_amount); + this.tx_json.Destination = UInt160.json_rewrite(dst); + + return this; +} + +Transaction.prototype.ripple_line_set = function (src, limit, quality_in, quality_out) { + this._secret = this._account_secret(src); + this.tx_json.TransactionType = 'TrustSet'; + this.tx_json.Account = UInt160.json_rewrite(src); + + // Allow limit of 0 through. + if (undefined !== limit) + this.tx_json.LimitAmount = Amount.json_rewrite(limit); + + if (quality_in) + this.tx_json.QualityIn = quality_in; + + if (quality_out) + this.tx_json.QualityOut = quality_out; + + // XXX Throw an error if nothing is set. + + return this; +}; + +Transaction.prototype.wallet_add = function (src, amount, authorized_key, public_key, signature) { + this._secret = this._account_secret(src); + this.tx_json.TransactionType = 'WalletAdd'; + this.tx_json.Amount = Amount.json_rewrite(amount); + this.tx_json.RegularKey = authorized_key; + this.tx_json.PublicKey = public_key; + this.tx_json.Signature = signature; + + return this; +}; + +exports.Transaction = Transaction; + +// vim:sw=2:sts=2:ts=8:et diff --git a/test/offer-test.js b/test/offer-test.js index 09d6aeb28..ebfd1721a 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -1,15 +1,16 @@ -var async = require("async"); -var buster = require("buster"); +var async = require("async"); +var buster = require("buster"); -var Amount = require("../src/js/amount.js").Amount; -var Remote = require("../src/js/remote.js").Remote; -var Server = require("./server.js").Server; +var Amount = require("../src/js/amount").Amount; +var Remote = require("../src/js/remote").Remote; +var Transaction = require("../src/js/transaction").Transaction; +var Server = require("./server").Server; -var testutils = require("./testutils.js"); +var testutils = require("./testutils"); -require("../src/js/amount.js").config = require("./config.js"); -require("../src/js/remote.js").config = require("./config.js"); +require("../src/js/amount").config = require("./config"); +require("../src/js/remote").config = require("./config"); buster.testRunner.timeout = 5000; @@ -461,7 +462,7 @@ buster.testCase("Offer tests", { testutils.verify_balances(self.remote, { - "alice" : [ "0/USD/mtgox", String(10000000000+500-2*(Remote.fees['default'].to_number())) ], + "alice" : [ "0/USD/mtgox", String(10000000000+500-2*(Transaction.fees['default'].to_number())) ], "bob" : "100/USD/mtgox", }, callback); @@ -624,7 +625,7 @@ buster.testCase("Offer tests", { testutils.verify_balances(self.remote, { - "alice" : [ "160/USD/mtgox", String(10000000000+200-2*(Remote.fees['default'].to_number())) ], + "alice" : [ "160/USD/mtgox", String(10000000000+200-2*(Transaction.fees['default'].to_number())) ], "bob" : "40/USD/mtgox", }, callback); @@ -666,7 +667,7 @@ buster.testCase("Offer tests", { testutils.verify_balances(self.remote, { - "alice" : [ "100/USD/mtgox", String(10000000000+200+300-4*(Remote.fees['default'].to_number())) ], + "alice" : [ "100/USD/mtgox", String(10000000000+200+300-4*(Transaction.fees['default'].to_number())) ], "bob" : "100/USD/mtgox", }, callback); diff --git a/test/reserve-test.js b/test/reserve-test.js index 995345ccc..1abd4fe7d 100644 --- a/test/reserve-test.js +++ b/test/reserve-test.js @@ -1,15 +1,16 @@ -var async = require("async"); -var buster = require("buster"); +var async = require("async"); +var buster = require("buster"); -var Amount = require("../src/js/amount.js").Amount; -var Remote = require("../src/js/remote.js").Remote; -var Server = require("./server.js").Server; +var Amount = require("../src/js/amount").Amount; +var Remote = require("../src/js/remote").Remote; +var Transaction = require("../src/js/transaction").Transaction; +var Server = require("./server").Server; -var testutils = require("./testutils.js"); +var testutils = require("./testutils"); -require("../src/js/amount.js").config = require("./config.js"); -require("../src/js/remote.js").config = require("./config.js"); +require("../src/js/amount").config = require("./config"); +require("../src/js/remote").config = require("./config"); buster.testRunner.timeout = 5000; @@ -425,7 +426,7 @@ buster.testCase("Reserve", { testutils.verify_balances(self.remote, { - "alice" : [ "0/USD/mtgox", String(10000000000+500-2*(Remote.fees['default'].to_number())) ], + "alice" : [ "0/USD/mtgox", String(10000000000+500-2*(Transaction.fees['default'].to_number())) ], "bob" : "100/USD/mtgox", }, callback); @@ -588,7 +589,7 @@ buster.testCase("Reserve", { testutils.verify_balances(self.remote, { - "alice" : [ "160/USD/mtgox", String(10000000000+200-2*(Remote.fees['default'].to_number())) ], + "alice" : [ "160/USD/mtgox", String(10000000000+200-2*(Transaction.fees['default'].to_number())) ], "bob" : "40/USD/mtgox", }, callback); @@ -630,7 +631,7 @@ buster.testCase("Reserve", { testutils.verify_balances(self.remote, { - "alice" : [ "100/USD/mtgox", String(10000000000+200+300-4*(Remote.fees['default'].to_number())) ], + "alice" : [ "100/USD/mtgox", String(10000000000+200+300-4*(Transaction.fees['default'].to_number())) ], "bob" : "100/USD/mtgox", }, callback); From dba8ae2db6ff158a65d73408516c623a3ec08353 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 12:50:48 -0800 Subject: [PATCH 499/525] Updates. --- src/cpp/ripple/AutoSocket.cpp | 32 -------------------- src/cpp/ripple/AutoSocket.h | 57 ++++++++++++++++++++++++----------- 2 files changed, 39 insertions(+), 50 deletions(-) delete mode 100644 src/cpp/ripple/AutoSocket.cpp diff --git a/src/cpp/ripple/AutoSocket.cpp b/src/cpp/ripple/AutoSocket.cpp deleted file mode 100644 index dd553a4c5..000000000 --- a/src/cpp/ripple/AutoSocket.cpp +++ /dev/null @@ -1,32 +0,0 @@ - -#include "AutoSocket.h" - -#include - -void AutoSocket::handle_autodetect(const error_code& ec) -{ - if (ec) - { - if (mCallback) - mCallback(ec); - return; - } - - if ((mBuffer[0] < 127) && (mBuffer[0] > 31) && - (mBuffer[1] < 127) && (mBuffer[1] > 31) && - (mBuffer[2] < 127) && (mBuffer[2] > 31) && - (mBuffer[3] < 127) && (mBuffer[3] > 31)) - { // non-SSL - mSecure = false; - if (mCallback) - mCallback(ec); - } - else - { // ssl - mSecure = true; - SSLSocket().async_handshake(ssl_socket::server, mCallback); - mCallback = callback(); - } -} - -// vim:ts=4 diff --git a/src/cpp/ripple/AutoSocket.h b/src/cpp/ripple/AutoSocket.h index d8529ea28..5f59c7d0a 100644 --- a/src/cpp/ripple/AutoSocket.h +++ b/src/cpp/ripple/AutoSocket.h @@ -8,6 +8,9 @@ #include #include +#include "Log.h" +extern LogPartition AutoSocketPartition; + // Socket wrapper that supports both SSL and non-SSL connections. // Generally, handle it as you would an SSL connection. // To force a non-SSL connection, just don't call async_handshake. @@ -21,13 +24,14 @@ class AutoSocket public: typedef bassl::stream ssl_socket; typedef ssl_socket::next_layer_type plain_socket; + typedef ssl_socket::lowest_layer_type lowest_layer_type; + typedef ssl_socket::handshake_type handshake_type; typedef boost::system::error_code error_code; - typedef boost::function callback; + typedef boost::function callback; protected: ssl_socket mSocket; bool mSecure; - callback mCallback; std::vector mBuffer; @@ -37,21 +41,20 @@ public: bool isSecure() { return mSecure; } ssl_socket& SSLSocket() { return mSocket; } plain_socket& PlainSocket() { return mSocket.next_layer(); } - void setSSLOnly() { mBuffer.clear(); } - void async_handshake(ssl_socket::handshake_type type, callback cbFunc) + lowest_layer_type& lowest_layer() { return mSocket.lowest_layer(); } + + void async_handshake(handshake_type type, callback cbFunc) { - mSecure = true; if ((type == ssl_socket::client) || (mBuffer.empty())) - SSLSocket().async_handshake(type, cbFunc); - else { - mCallback = cbFunc; - PlainSocket().async_receive(basio::buffer(mBuffer), basio::socket_base::message_peek, - boost::bind(&AutoSocket::handle_autodetect, this, basio::placeholders::error)); - + mSecure = true; + mSocket.async_handshake(type, cbFunc); } + else + mSocket.next_layer().async_receive(basio::buffer(mBuffer), basio::socket_base::message_peek, + boost::bind(&AutoSocket::handle_autodetect, this, cbFunc, basio::placeholders::error)); } template StreamType& getSocket() @@ -65,19 +68,18 @@ public: template void async_shutdown(ShutdownHandler handler) { if (isSecure()) - SSLSocket().async_shutdown(handler); + mSocket.async_shutdown(handler); else { - PlainSocket().shutdown(plain_socket::shutdown_both); - if (handler) - mSocket.get_io_service().post(handler); + lowest_layer().shutdown(plain_socket::shutdown_both); + mSocket.get_io_service().post(boost::bind(handler, error_code())); } } template void async_read_some(const Seq& buffers, Handler handler) { if (isSecure()) - SSLSocket().async_read_some(buffers, handler); + mSocket.async_read_some(buffers, handler); else PlainSocket().async_read_some(buffers, handler); } @@ -85,13 +87,32 @@ public: template void async_write_some(const Seq& buffers, Handler handler) { if (isSecure()) - SSLSocket().async_write_some(buffers, handler); + mSocket.async_write_some(buffers, handler); else PlainSocket().async_write_some(buffers, handler); } protected: - void handle_autodetect(const error_code&); + void handle_autodetect(callback cbFunc, const error_code& ec) + { + if (ec) + { + Log(lsWARNING, AutoSocketPartition) << "Handle autodetect error: " << ec; + cbFunc(ec); + } + else if ((mBuffer[0] < 127) && (mBuffer[0] > 31) && + (mBuffer[1] < 127) && (mBuffer[1] > 31) && + (mBuffer[2] < 127) && (mBuffer[2] > 31) && + (mBuffer[3] < 127) && (mBuffer[3] > 31)) + { // not ssl + cbFunc(ec); + } + else + { // ssl + mSecure = true; + mSocket.async_handshake(ssl_socket::server, cbFunc); + } + } }; #endif From 848824ded0b534552d759ed2bdd44c37a4ab512d Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 12:51:17 -0800 Subject: [PATCH 500/525] Cleanup. --- src/cpp/ripple/TransactionEngine.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/cpp/ripple/TransactionEngine.cpp b/src/cpp/ripple/TransactionEngine.cpp index 4ab5cad74..4a31227cc 100644 --- a/src/cpp/ripple/TransactionEngine.cpp +++ b/src/cpp/ripple/TransactionEngine.cpp @@ -127,28 +127,23 @@ TER TransactionEngine::applyTransaction(const SerializedTransaction& txn, Transa uint32 t_seq = txn.getSequence(); uint32 a_seq = txnAcct->getFieldU32(sfSequence); - if (t_seq != a_seq) - { - if (a_seq < t_seq) - terResult = terPRE_SEQ; - else - terResult = tefPAST_SEQ; - } + if (a_seq < t_seq) + terResult = terPRE_SEQ; + else if (a_seq > t_seq) + terResult = tefPAST_SEQ; else { STAmount fee = txn.getTransactionFee(); STAmount balance = txnAcct->getFieldAmount(sfBalance); if (balance < fee) - { terResult = terINSUF_FEE_B; - } else { txnAcct->setFieldAmount(sfBalance, balance - fee); txnAcct->setFieldU32(sfSequence, t_seq + 1); - didApply = true; entryModify(txnAcct); + didApply = true; } } } From a1a31bceffb097e0f0df7aebe3913ceb4935bec9 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 15:05:05 -0800 Subject: [PATCH 501/525] Cleanups. Support socket swapping. --- src/cpp/ripple/AutoSocket.h | 45 ++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/cpp/ripple/AutoSocket.h b/src/cpp/ripple/AutoSocket.h index 5f59c7d0a..106c101d2 100644 --- a/src/cpp/ripple/AutoSocket.h +++ b/src/cpp/ripple/AutoSocket.h @@ -5,6 +5,8 @@ #include #include +#include +#include #include #include @@ -23,6 +25,7 @@ class AutoSocket { public: typedef bassl::stream ssl_socket; + typedef boost::shared_ptr socket_ptr; typedef ssl_socket::next_layer_type plain_socket; typedef ssl_socket::lowest_layer_type lowest_layer_type; typedef ssl_socket::handshake_type handshake_type; @@ -30,56 +33,58 @@ public: typedef boost::function callback; protected: - ssl_socket mSocket; + socket_ptr mSocket; bool mSecure; std::vector mBuffer; public: - AutoSocket(basio::io_service& s, bassl::context& c) : mSocket(s, c), mSecure(false), mBuffer(4) { ; } + AutoSocket(basio::io_service& s, bassl::context& c) : mSecure(false), mBuffer(4) + { + mSocket = boost::make_shared(boost::ref(s), boost::ref(c)); + } bool isSecure() { return mSecure; } - ssl_socket& SSLSocket() { return mSocket; } - plain_socket& PlainSocket() { return mSocket.next_layer(); } + ssl_socket& SSLSocket() { return *mSocket; } + plain_socket& PlainSocket() { return mSocket->next_layer(); } void setSSLOnly() { mBuffer.clear(); } - lowest_layer_type& lowest_layer() { return mSocket.lowest_layer(); } + lowest_layer_type& lowest_layer() { return mSocket->lowest_layer(); } + + void swap(AutoSocket& s) + { + mBuffer.swap(s.mBuffer); + mSocket.swap(s.mSocket); + std::swap(mSecure, s.mSecure); + } void async_handshake(handshake_type type, callback cbFunc) { if ((type == ssl_socket::client) || (mBuffer.empty())) { mSecure = true; - mSocket.async_handshake(type, cbFunc); + mSocket->async_handshake(type, cbFunc); } else - mSocket.next_layer().async_receive(basio::buffer(mBuffer), basio::socket_base::message_peek, + mSocket->next_layer().async_receive(basio::buffer(mBuffer), basio::socket_base::message_peek, boost::bind(&AutoSocket::handle_autodetect, this, cbFunc, basio::placeholders::error)); } - template StreamType& getSocket() - { - if (isSecure()) - return SSLSocket(); - if (!isSecure()) - return PlainSocket(); - } - template void async_shutdown(ShutdownHandler handler) { if (isSecure()) - mSocket.async_shutdown(handler); + mSocket->async_shutdown(handler); else { lowest_layer().shutdown(plain_socket::shutdown_both); - mSocket.get_io_service().post(boost::bind(handler, error_code())); + mSocket->get_io_service().post(boost::bind(handler, error_code())); } } template void async_read_some(const Seq& buffers, Handler handler) { if (isSecure()) - mSocket.async_read_some(buffers, handler); + mSocket->async_read_some(buffers, handler); else PlainSocket().async_read_some(buffers, handler); } @@ -87,7 +92,7 @@ public: template void async_write_some(const Seq& buffers, Handler handler) { if (isSecure()) - mSocket.async_write_some(buffers, handler); + mSocket->async_write_some(buffers, handler); else PlainSocket().async_write_some(buffers, handler); } @@ -110,7 +115,7 @@ protected: else { // ssl mSecure = true; - mSocket.async_handshake(ssl_socket::server, cbFunc); + mSocket->async_handshake(ssl_socket::server, cbFunc); } } }; From 802f357ff117f6c3b82b3fc5634f573f786cf0c7 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 15:25:14 -0800 Subject: [PATCH 502/525] Tweaks to the AutoSocket code. --- src/cpp/ripple/Application.cpp | 1 + src/cpp/ripple/AutoSocket.h | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/Application.cpp b/src/cpp/ripple/Application.cpp index ec034eedf..58b75e8b4 100644 --- a/src/cpp/ripple/Application.cpp +++ b/src/cpp/ripple/Application.cpp @@ -20,6 +20,7 @@ SETUP_LOG(); LogPartition TaggedCachePartition("TaggedCache"); +LogPartition AutoSocketPartition("AutoSocket"); Application* theApp = NULL; DatabaseCon::DatabaseCon(const std::string& strName, const char *initStrings[], int initCount) diff --git a/src/cpp/ripple/AutoSocket.h b/src/cpp/ripple/AutoSocket.h index 106c101d2..ccf82ab50 100644 --- a/src/cpp/ripple/AutoSocket.h +++ b/src/cpp/ripple/AutoSocket.h @@ -44,10 +44,17 @@ public: mSocket = boost::make_shared(boost::ref(s), boost::ref(c)); } + AutoSocket(basio::io_service& s, bassl::context& c, bool secureOnly, bool plainOnly) + : mSecure(secureOnly), mBuffer((plainOnly || secureOnly) ? 0 : 4) + { + mSocket = boost::make_shared(boost::ref(s), boost::ref(c)); + } + bool isSecure() { return mSecure; } ssl_socket& SSLSocket() { return *mSocket; } plain_socket& PlainSocket() { return mSocket->next_layer(); } - void setSSLOnly() { mBuffer.clear(); } + void setSSLOnly() { mSecure = true;} + void setPlainOnly() { mBuffer.clear(); } lowest_layer_type& lowest_layer() { return mSocket->lowest_layer(); } @@ -60,14 +67,21 @@ public: void async_handshake(handshake_type type, callback cbFunc) { - if ((type == ssl_socket::client) || (mBuffer.empty())) - { + if ((type == ssl_socket::client) || (mSecure)) + { // must be ssl mSecure = true; mSocket->async_handshake(type, cbFunc); } + else if (mBuffer.empty()) + { // must be plain + mSecure = false; + cbFunc(error_code()); + } else + { // autodetect mSocket->next_layer().async_receive(basio::buffer(mBuffer), basio::socket_base::message_peek, boost::bind(&AutoSocket::handle_autodetect, this, cbFunc, basio::placeholders::error)); + } } template void async_shutdown(ShutdownHandler handler) @@ -110,6 +124,7 @@ protected: (mBuffer[2] < 127) && (mBuffer[2] > 31) && (mBuffer[3] < 127) && (mBuffer[3] > 31)) { // not ssl + mSecure = false; cbFunc(ec); } else From a028bbea9230ad9aaf4efd2eb4ac0632e45c38ab Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 15:51:36 -0800 Subject: [PATCH 503/525] Document new auto-detect options. --- rippled-example.cfg | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/rippled-example.cfg b/rippled-example.cfg index ef45147b7..8bd553b9c 100644 --- a/rippled-example.cfg +++ b/rippled-example.cfg @@ -157,9 +157,10 @@ # connections. # # [websocket_public_secure] -# 0 or 1. +# 0, 1 or 2. # 0: Provide ws service for websocket_public_ip/websocket_public_port. -# 1: Provide wss service for websocket_public_ip/websocket_public_port. [default] +# 1: Provide both ws and wss service for websocket_public_ip/websocket_public_port. [default] +# 2: Provide wss service only for websocket_public_ip/websocket_public_port. # # Browser pages like the Ripple client will not be able to connect to a secure # websocket connection if a self-signed certificate is used. As the Ripple @@ -177,9 +178,10 @@ # Port to bind to allow trusted ADMIN connections from backend applications. # # [websocket_secure] -# 0 or 1. -# 0: Provide ws service for websocket_ip/websocket_port. [default] -# 1: Provide wss service for websocket_ip/websocket_port. +# 0, 1, or 2. +# 0: Provide ws service only for websocket_ip/websocket_port. [default] +# 1: Provide ws and wss service for websocket_ip/websocket_port +# 2: Provide wss service for websocket_ip/websocket_port. # # [websocket_ssl_key]: # Specify the filename holding the SSL key in PEM format. From c56174c16a6b500699d30c1d43eb3d45e8ec6363 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 15:51:52 -0800 Subject: [PATCH 504/525] Don't invoke callback funcition directly. --- src/cpp/ripple/AutoSocket.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/ripple/AutoSocket.h b/src/cpp/ripple/AutoSocket.h index ccf82ab50..9f04d3b4e 100644 --- a/src/cpp/ripple/AutoSocket.h +++ b/src/cpp/ripple/AutoSocket.h @@ -75,7 +75,7 @@ public: else if (mBuffer.empty()) { // must be plain mSecure = false; - cbFunc(error_code()); + mSocket->get_io_service().post(boost::bind(cbFunc, error_code())); } else { // autodetect From 089d5119723a13e258788e607c21dd1bc4ccc59c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 15:52:17 -0800 Subject: [PATCH 505/525] New auto-detect TLS configuration code. --- src/cpp/ripple/Config.cpp | 8 ++++---- src/cpp/ripple/Config.h | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index 1eee97fba..d45d35d65 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -178,8 +178,8 @@ Config::Config() RPC_PORT = 5001; WEBSOCKET_PORT = SYSTEM_WEBSOCKET_PORT; WEBSOCKET_PUBLIC_PORT = SYSTEM_WEBSOCKET_PUBLIC_PORT; - WEBSOCKET_PUBLIC_SECURE = true; - WEBSOCKET_SECURE = false; + WEBSOCKET_PUBLIC_SECURE = 1; + WEBSOCKET_SECURE = 0; NUMBER_CONNECTIONS = 30; // a new ledger every minute @@ -340,10 +340,10 @@ void Config::load() WEBSOCKET_PUBLIC_PORT = boost::lexical_cast(strTemp); if (sectionSingleB(secConfig, SECTION_WEBSOCKET_SECURE, strTemp)) - WEBSOCKET_SECURE = boost::lexical_cast(strTemp); + WEBSOCKET_SECURE = boost::lexical_cast(strTemp); if (sectionSingleB(secConfig, SECTION_WEBSOCKET_PUBLIC_SECURE, strTemp)) - WEBSOCKET_PUBLIC_SECURE = boost::lexical_cast(strTemp); + WEBSOCKET_PUBLIC_SECURE = boost::lexical_cast(strTemp); sectionSingleB(secConfig, SECTION_WEBSOCKET_SSL_CERT, WEBSOCKET_SSL_CERT); sectionSingleB(secConfig, SECTION_WEBSOCKET_SSL_CHAIN, WEBSOCKET_SSL_CHAIN); diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index abb1c5662..6fe20fcc4 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -101,11 +101,12 @@ public: // Websocket networking parameters std::string WEBSOCKET_PUBLIC_IP; // XXX Going away. Merge with the inbound peer connction. int WEBSOCKET_PUBLIC_PORT; - bool WEBSOCKET_PUBLIC_SECURE; + int WEBSOCKET_PUBLIC_SECURE; std::string WEBSOCKET_IP; int WEBSOCKET_PORT; - bool WEBSOCKET_SECURE; + int WEBSOCKET_SECURE; + std::string WEBSOCKET_SSL_CERT; std::string WEBSOCKET_SSL_CHAIN; std::string WEBSOCKET_SSL_KEY; From ff41c3c5cc80f47aad5ca04504a8541a016c82da Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 15:52:38 -0800 Subject: [PATCH 506/525] Add auto-TLS support. --- src/cpp/ripple/WSConnection.h | 2 +- src/cpp/ripple/WSDoor.cpp | 102 ++++++++++------------------------ 2 files changed, 31 insertions(+), 73 deletions(-) diff --git a/src/cpp/ripple/WSConnection.h b/src/cpp/ripple/WSConnection.h index ca088225e..d6fe475f4 100644 --- a/src/cpp/ripple/WSConnection.h +++ b/src/cpp/ripple/WSConnection.h @@ -1,5 +1,5 @@ -#include "../websocketpp/src/sockets/tls.hpp" +#include "../websocketpp/src/sockets/autotls.hpp" #include "../websocketpp/src/websocketpp.hpp" #include "../json/value.h" diff --git a/src/cpp/ripple/WSDoor.cpp b/src/cpp/ripple/WSDoor.cpp index 961ec3f3c..ec4a84e89 100644 --- a/src/cpp/ripple/WSDoor.cpp +++ b/src/cpp/ripple/WSDoor.cpp @@ -2,7 +2,7 @@ #include "Log.h" #define WSDOOR_CPP -#include "../websocketpp/src/sockets/tls.hpp" +#include "../websocketpp/src/sockets/autotls.hpp" #include "../websocketpp/src/websocketpp.hpp" SETUP_LOG(); @@ -59,80 +59,40 @@ void WSDoor::startListening() SSL_CTX_set_tmp_dh_callback(mCtx->native_handle(), handleTmpDh); - if (mPublic ? theConfig.WEBSOCKET_PUBLIC_SECURE : theConfig.WEBSOCKET_SECURE) + // Construct a single handler for all requests. + websocketpp::server_autotls::handler::ptr handler(new WSServerHandler(mCtx, mPublic)); + + // Construct a websocket server. + mSEndpoint = new websocketpp::server_autotls(handler); + + // mEndpoint->alog().unset_level(websocketpp::log::alevel::ALL); + // mEndpoint->elog().unset_level(websocketpp::log::elevel::ALL); + + // Call the main-event-loop of the websocket server. + try { - // Construct a single handler for all requests. - websocketpp::server_tls::handler::ptr handler(new WSServerHandler(mCtx, mPublic)); - - // Construct a websocket server. - mSEndpoint = new websocketpp::server_tls(handler); - - // mEndpoint->alog().unset_level(websocketpp::log::alevel::ALL); - // mEndpoint->elog().unset_level(websocketpp::log::elevel::ALL); - - // Call the main-event-loop of the websocket server. - try - { - mSEndpoint->listen( - boost::asio::ip::tcp::endpoint( - boost::asio::ip::address().from_string(mIp), mPort)); - } - catch (websocketpp::exception& e) - { - cLog(lsWARNING) << "websocketpp exception: " << e.what(); - while (1) // temporary workaround for websocketpp throwing exceptions on access/close races - { // https://github.com/zaphoyd/websocketpp/issues/98 - try - { - mSEndpoint->get_io_service().run(); - break; - } - catch (websocketpp::exception& e) - { - cLog(lsWARNING) << "websocketpp exception: " << e.what(); - } + mSEndpoint->listen( + boost::asio::ip::tcp::endpoint( + boost::asio::ip::address().from_string(mIp), mPort)); + } + catch (websocketpp::exception& e) + { + cLog(lsWARNING) << "websocketpp exception: " << e.what(); + while (1) // temporary workaround for websocketpp throwing exceptions on access/close races + { // https://github.com/zaphoyd/websocketpp/issues/98 + try + { + mSEndpoint->get_io_service().run(); + break; + } + catch (websocketpp::exception& e) + { + cLog(lsWARNING) << "websocketpp exception: " << e.what(); } } - - delete mSEndpoint; } - else - { - // Construct a single handler for all requests. - websocketpp::server::handler::ptr handler(new WSServerHandler(mCtx, mPublic)); - // Construct a websocket server. - mEndpoint = new websocketpp::server(handler); - - // mEndpoint->alog().unset_level(websocketpp::log::alevel::ALL); - // mEndpoint->elog().unset_level(websocketpp::log::elevel::ALL); - - // Call the main-event-loop of the websocket server. - try - { - mEndpoint->listen( - boost::asio::ip::tcp::endpoint( - boost::asio::ip::address().from_string(mIp), mPort)); - } - catch (websocketpp::exception& e) - { - cLog(lsWARNING) << "websocketpp exception: " << e.what(); - while (1) // temporary workaround for websocketpp throwing exceptions on access/close races - { // https://github.com/zaphoyd/websocketpp/issues/98 - try - { - mEndpoint->get_io_service().run(); - break; - } - catch (websocketpp::exception& e) - { - cLog(lsWARNING) << "websocketpp exception: " << e.what(); - } - } - } - - delete mEndpoint; - } + delete mSEndpoint; } WSDoor* WSDoor::createWSDoor(const std::string& strIp, const int iPort, bool bPublic) @@ -154,8 +114,6 @@ void WSDoor::stop() { if (mThread) { - if (mEndpoint) - mEndpoint->stop(); if (mSEndpoint) mSEndpoint->stop(); From bc07943e79433389d83c8a2f74c1324d6d739636 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 15:53:26 -0800 Subject: [PATCH 507/525] Moderate bastardization to support auto-TLS. --- src/cpp/websocketpp/src/connection.hpp | 81 +++++++++++---- src/cpp/websocketpp/src/endpoint.hpp | 4 +- src/cpp/websocketpp/src/roles/server.hpp | 121 +++++++++++++++++----- src/cpp/websocketpp/src/sockets/plain.hpp | 2 + src/cpp/websocketpp/src/sockets/tls.hpp | 2 + src/cpp/websocketpp/src/websocketpp.hpp | 4 + 6 files changed, 164 insertions(+), 50 deletions(-) diff --git a/src/cpp/websocketpp/src/connection.hpp b/src/cpp/websocketpp/src/connection.hpp index 53f37a559..9883148ac 100644 --- a/src/cpp/websocketpp/src/connection.hpp +++ b/src/cpp/websocketpp/src/connection.hpp @@ -898,20 +898,39 @@ public: !m_protocol_error) { // TODO: read timeout timer? - - boost::asio::async_read( - socket_type::get_socket(), - m_buf, - boost::asio::transfer_at_least(std::min( - m_read_threshold, - static_cast(m_processor->get_bytes_needed()) - )), - m_strand.wrap(boost::bind( - &type::handle_read_frame, - type::shared_from_this(), - boost::asio::placeholders::error - )) - ); + + if (socket_type::get_socket().isSecure()) + { + boost::asio::async_read( + socket_type::get_socket().SSLSocket(), + m_buf, + boost::asio::transfer_at_least(std::min( + m_read_threshold, + static_cast(m_processor->get_bytes_needed()) + )), + m_strand.wrap(boost::bind( + &type::handle_read_frame, + type::shared_from_this(), + boost::asio::placeholders::error + )) + ); + } + else + { + boost::asio::async_read( + socket_type::get_socket().PlainSocket(), + m_buf, + boost::asio::transfer_at_least(std::min( + m_read_threshold, + static_cast(m_processor->get_bytes_needed()) + )), + m_strand.wrap(boost::bind( + &type::handle_read_frame, + type::shared_from_this(), + boost::asio::placeholders::error + )) + ); + } } } public: @@ -1209,15 +1228,31 @@ public: //m_endpoint.alog().at(log::alevel::DEVEL) << "write header: " << zsutil::to_hex(m_write_queue.front()->get_header()) << log::endl; - boost::asio::async_write( - socket_type::get_socket(), - m_write_buf, - m_strand.wrap(boost::bind( - &type::handle_write, - type::shared_from_this(), - boost::asio::placeholders::error - )) - ); + if (socket_type::get_socket().isSecure()) + { + boost::asio::async_write( + socket_type::get_socket().SSLSocket(), + m_write_buf, + m_strand.wrap(boost::bind( + &type::handle_write, + type::shared_from_this(), + boost::asio::placeholders::error + )) + ); + } + else + { + boost::asio::async_write( + socket_type::get_socket().PlainSocket(), + m_write_buf, + m_strand.wrap(boost::bind( + &type::handle_write, + type::shared_from_this(), + boost::asio::placeholders::error + )) + ); + } + } else { // if we are in an inturrupted state and had nothing else to write // it is safe to terminate the connection. diff --git a/src/cpp/websocketpp/src/endpoint.hpp b/src/cpp/websocketpp/src/endpoint.hpp index f9ac5a582..862243c1c 100644 --- a/src/cpp/websocketpp/src/endpoint.hpp +++ b/src/cpp/websocketpp/src/endpoint.hpp @@ -29,7 +29,7 @@ #define WEBSOCKETPP_ENDPOINT_HPP #include "connection.hpp" -#include "sockets/plain.hpp" // should this be here? +#include "sockets/autotls.hpp" // should this be here? #include "logger/logger.hpp" #include @@ -74,7 +74,7 @@ protected: */ template < template class role, - template class socket = socket::plain, + template class socket = socket::autotls, template class logger = log::logger> class endpoint : public endpoint_base, diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index 270a478a0..7ee35ca32 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -53,6 +53,42 @@ namespace websocketpp { +typedef boost::asio::buffers_iterator bufIterator; + +static std::pair match_header(bufIterator begin, bufIterator end) +{ + static const std::string eol_match = "\n"; + static const std::string header_match = "\n\r\n"; + static const std::string alt_header_match = "\n\n"; + static const std::string flash_match = ""; + + // Do we have a complete HTTP request + bufIterator it = std::search(begin, end, header_match.begin(), header_match.end()); + if (it != end) + it += header_match.size() - 1; + else + { + it = std::search(begin, end, alt_header_match.begin(), alt_header_match.end()); + if (it != end) + it += alt_header_match.size() - 1; + } + if (it != end) // Yes, this is HTTP + return std::make_pair(it, true); + + // If we don't have a flash policy request, we're done + it = std::search(begin, end, flash_match.begin(), flash_match.end()); + if (it == end) // No match + return std::make_pair(end, false); + + // If we have a line ending before the flash policy request, treat as http + bufIterator it2 = std::search(begin, end, eol_match.begin(), eol_match.end()); + if ((it2 != end) || (it < it2)) + return std::make_pair(end, false); + + // Treat as flash policy request + return std::make_pair(it + flash_match.size() - 1, true); +} + // Forward declarations template struct endpoint_traits; @@ -513,18 +549,37 @@ void server::connection::async_init() { // TODO: make this value configurable m_connection.register_timeout(5000,fail::status::TIMEOUT_WS, "Timeout on WebSocket handshake"); - - boost::asio::async_read_until( - m_connection.get_socket(), - m_connection.buffer(), - "\r\n\r\n", - m_connection.get_strand().wrap(boost::bind( - &type::handle_read_request, - m_connection.shared_from_this(), - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred - )) - ); + + if (m_connection.get_socket().isSecure()) + { + boost::asio::async_read_until( + m_connection.get_socket().SSLSocket(), + m_connection.buffer(), +// match_header, + "\r\n\r\n", + m_connection.get_strand().wrap(boost::bind( + &type::handle_read_request, + m_connection.shared_from_this(), + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred + )) + ); + } + else + { + boost::asio::async_read_until( + m_connection.get_socket().PlainSocket(), + m_connection.buffer(), +// match_header, + "\r\n\r\n", + m_connection.get_strand().wrap(boost::bind( + &type::handle_read_request, + m_connection.shared_from_this(), + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred + )) + ); + } } /// processes the response from an async read for an HTTP header @@ -673,9 +728,9 @@ void server::connection::handle_read_request( { // TODO: this makes the assumption that WS and HTTP // default ports are the same. - m_uri.reset(new uri(m_endpoint.is_secure(),h,m_request.uri())); + m_uri.reset(new uri(m_connection.is_secure(),h,m_request.uri())); } else { - m_uri.reset(new uri(m_endpoint.is_secure(), + m_uri.reset(new uri(m_connection.is_secure(), h.substr(0,last_colon), h.substr(last_colon+1), m_request.uri())); @@ -795,17 +850,33 @@ void server::connection::write_response() { shared_const_buffer buffer(raw); m_endpoint.m_alog->at(log::alevel::DEBUG_HANDSHAKE) << raw << log::endl; - - boost::asio::async_write( - m_connection.get_socket(), - //boost::asio::buffer(raw), - buffer, - boost::bind( - &type::handle_write_response, - m_connection.shared_from_this(), - boost::asio::placeholders::error - ) - ); + + if (m_connection.get_socket().isSecure()) + { + boost::asio::async_write( + m_connection.get_socket().SSLSocket(), + //boost::asio::buffer(raw), + buffer, + boost::bind( + &type::handle_write_response, + m_connection.shared_from_this(), + boost::asio::placeholders::error + ) + ); + } + else + { + boost::asio::async_write( + m_connection.get_socket().PlainSocket(), + //boost::asio::buffer(raw), + buffer, + boost::bind( + &type::handle_write_response, + m_connection.shared_from_this(), + boost::asio::placeholders::error + ) + ); + } } template diff --git a/src/cpp/websocketpp/src/sockets/plain.hpp b/src/cpp/websocketpp/src/sockets/plain.hpp index 48aa91079..c7ecaa96b 100644 --- a/src/cpp/websocketpp/src/sockets/plain.hpp +++ b/src/cpp/websocketpp/src/sockets/plain.hpp @@ -25,6 +25,8 @@ * */ +#error Use Auto TLS only + #ifndef WEBSOCKETPP_SOCKET_PLAIN_HPP #define WEBSOCKETPP_SOCKET_PLAIN_HPP diff --git a/src/cpp/websocketpp/src/sockets/tls.hpp b/src/cpp/websocketpp/src/sockets/tls.hpp index 156901a4e..34e7af8ca 100644 --- a/src/cpp/websocketpp/src/sockets/tls.hpp +++ b/src/cpp/websocketpp/src/sockets/tls.hpp @@ -25,6 +25,8 @@ * */ +#error Use auto TLS only + #ifndef WEBSOCKETPP_SOCKET_TLS_HPP #define WEBSOCKETPP_SOCKET_TLS_HPP diff --git a/src/cpp/websocketpp/src/websocketpp.hpp b/src/cpp/websocketpp/src/websocketpp.hpp index 221d66e6f..c6692a9ba 100644 --- a/src/cpp/websocketpp/src/websocketpp.hpp +++ b/src/cpp/websocketpp/src/websocketpp.hpp @@ -41,6 +41,10 @@ namespace websocketpp { typedef websocketpp::endpoint server_tls; #endif + #ifdef WEBSOCKETPP_SOCKET_AUTOTLS_HPP + typedef websocketpp::endpoint server_autotls; + #endif #endif From 96e2e7497eaa84daa2aa268e63dae27879ea3013 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 15:53:52 -0800 Subject: [PATCH 508/525] Auto-TLS support. --- src/cpp/ripple/WSDoor.h | 15 +++++++-------- src/cpp/ripple/WSHandler.h | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/WSDoor.h b/src/cpp/ripple/WSDoor.h index 24ba138a8..bdac87ea7 100644 --- a/src/cpp/ripple/WSDoor.h +++ b/src/cpp/ripple/WSDoor.h @@ -12,7 +12,7 @@ namespace websocketpp { class server; - class server_tls; + class server_autotls; } #endif @@ -20,19 +20,18 @@ namespace websocketpp class WSDoor { private: - websocketpp::server* mEndpoint; - websocketpp::server_tls* mSEndpoint; + websocketpp::server_autotls* mSEndpoint; - boost::thread* mThread; - bool mPublic; - std::string mIp; - int mPort; + boost::thread* mThread; + bool mPublic; + std::string mIp; + int mPort; void startListening(); public: - WSDoor(const std::string& strIp, int iPort, bool bPublic) : mEndpoint(0), mSEndpoint(0), mThread(0), mPublic(bPublic), mIp(strIp), mPort(iPort) { ; } + WSDoor(const std::string& strIp, int iPort, bool bPublic) : mSEndpoint(0), mThread(0), mPublic(bPublic), mIp(strIp), mPort(iPort) { ; } void stop(); diff --git a/src/cpp/ripple/WSHandler.h b/src/cpp/ripple/WSHandler.h index 793ca98b8..4324e7bfc 100644 --- a/src/cpp/ripple/WSHandler.h +++ b/src/cpp/ripple/WSHandler.h @@ -37,7 +37,7 @@ protected: public: WSServerHandler(boost::shared_ptr spCtx, bool bPublic) : mCtx(spCtx), mPublic(bPublic) { - if (theConfig.WEBSOCKET_SECURE) + if (theConfig.WEBSOCKET_SECURE != 0) { initSSLContext(*mCtx, theConfig.WEBSOCKET_SSL_KEY, theConfig.WEBSOCKET_SSL_CERT, theConfig.WEBSOCKET_SSL_CHAIN); From e27b3d1fe949653ff3b06fd64f00e189b1271a35 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 19:22:00 -0800 Subject: [PATCH 509/525] Return an iterator one past the end of the matched portion, as async_read_until requires. --- src/cpp/websocketpp/src/roles/server.hpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index 7ee35ca32..16a377151 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -65,15 +65,9 @@ static std::pair match_header(bufIterator begin, bufIterator // Do we have a complete HTTP request bufIterator it = std::search(begin, end, header_match.begin(), header_match.end()); if (it != end) - it += header_match.size() - 1; - else - { - it = std::search(begin, end, alt_header_match.begin(), alt_header_match.end()); - if (it != end) - it += alt_header_match.size() - 1; - } - if (it != end) // Yes, this is HTTP - return std::make_pair(it, true); + return std::make_pair(it + header_match.size()); + it = std::search(begin, end, alt_header_match.begin(), alt_header_match.end()); + return std::make_pair(it + alt_header_match_size(), true); // If we don't have a flash policy request, we're done it = std::search(begin, end, flash_match.begin(), flash_match.end()); @@ -86,7 +80,7 @@ static std::pair match_header(bufIterator begin, bufIterator return std::make_pair(end, false); // Treat as flash policy request - return std::make_pair(it + flash_match.size() - 1, true); + return std::make_pair(it + flash_match.size(), true); } // Forward declarations From c04b76e1caff4a61d7ebacd6c498966b2cfc9462 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 19:23:12 -0800 Subject: [PATCH 510/525] Fix typos. --- src/cpp/websocketpp/src/roles/server.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index 16a377151..e0621d8ac 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -65,9 +65,9 @@ static std::pair match_header(bufIterator begin, bufIterator // Do we have a complete HTTP request bufIterator it = std::search(begin, end, header_match.begin(), header_match.end()); if (it != end) - return std::make_pair(it + header_match.size()); + return std::make_pair(it + header_match.size(), true); it = std::search(begin, end, alt_header_match.begin(), alt_header_match.end()); - return std::make_pair(it + alt_header_match_size(), true); + return std::make_pair(it + alt_header_match.size(), true); // If we don't have a flash policy request, we're done it = std::search(begin, end, flash_match.begin(), flash_match.end()); From 938357b7ae075b0fd710edcf542991a214ab3c84 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Thu, 24 Jan 2013 21:04:42 -0800 Subject: [PATCH 511/525] Start cleaning up some of the bastardization. --- src/cpp/ripple/AutoSocket.h | 26 ++++++++++++++++++ src/cpp/websocketpp/src/roles/server.hpp | 35 ++++++------------------ 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/src/cpp/ripple/AutoSocket.h b/src/cpp/ripple/AutoSocket.h index 9f04d3b4e..d96582525 100644 --- a/src/cpp/ripple/AutoSocket.h +++ b/src/cpp/ripple/AutoSocket.h @@ -103,6 +103,32 @@ public: PlainSocket().async_read_some(buffers, handler); } + template void async_write(const Buf& buffers, Handler handler) + { + if (isSecure()) + boost::asio::async_write(*mSocket, buffers, handler); + else + boost::asio::async_write(PlainSocket(), buffers, handler); + } + + + template + void async_read(const Buf& buffers, Condition cond, Handler handler) + { + if (isSecure()) + boost::asio::async_read(*mSocket, buffers, cond, handler); + else + boost::asio::async_read(PlainSocket(), buffers, cond, handler); + } + + template void async_read(const Buf& buffers, Handler handler) + { + if (isSecure()) + boost::asio::async_read(*mSocket, buffers, handler); + else + boost::asio::async_read(PlainSocket(), buffers, handler); + } + template void async_write_some(const Seq& buffers, Handler handler) { if (isSecure()) diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index e0621d8ac..0e3de9db8 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -845,32 +845,15 @@ void server::connection::write_response() { m_endpoint.m_alog->at(log::alevel::DEBUG_HANDSHAKE) << raw << log::endl; - if (m_connection.get_socket().isSecure()) - { - boost::asio::async_write( - m_connection.get_socket().SSLSocket(), - //boost::asio::buffer(raw), - buffer, - boost::bind( - &type::handle_write_response, - m_connection.shared_from_this(), - boost::asio::placeholders::error - ) - ); - } - else - { - boost::asio::async_write( - m_connection.get_socket().PlainSocket(), - //boost::asio::buffer(raw), - buffer, - boost::bind( - &type::handle_write_response, - m_connection.shared_from_this(), - boost::asio::placeholders::error - ) - ); - } + m_connection.get_socket().async_write( + //boost::asio::buffer(raw), + buffer, + boost::bind( + &type::handle_write_response, + m_connection.shared_from_this(), + boost::asio::placeholders::error + ) + ); } template From 01920bdef9ebda82f97866cb0b2a20537ae67772 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 25 Jan 2013 02:59:58 -0800 Subject: [PATCH 512/525] Flag setting for authorized accounts. --- src/cpp/ripple/AccountSetTransactor.cpp | 32 +++++++++++++++++++++++++ src/cpp/ripple/LedgerEntrySet.cpp | 11 ++++++++- src/cpp/ripple/LedgerEntrySet.h | 1 + src/cpp/ripple/LedgerFormats.h | 3 +++ src/cpp/ripple/TransactionErr.cpp | 2 ++ src/cpp/ripple/TransactionErr.h | 2 ++ src/cpp/ripple/TransactionFormats.h | 9 +++++-- src/cpp/ripple/TrustSetTransactor.cpp | 24 +++++++++++++++---- 8 files changed, 77 insertions(+), 7 deletions(-) diff --git a/src/cpp/ripple/AccountSetTransactor.cpp b/src/cpp/ripple/AccountSetTransactor.cpp index 7834dd1bd..9ffa635e5 100644 --- a/src/cpp/ripple/AccountSetTransactor.cpp +++ b/src/cpp/ripple/AccountSetTransactor.cpp @@ -19,6 +19,38 @@ TER AccountSetTransactor::doApply() return temINVALID_FLAG; } + // + // RequireAuth + // + + if ((tfRequireAuth|tfOptionalAuth) == (uTxFlags & (tfRequireAuth|tfOptionalAuth))) + { + cLog(lsINFO) << "AccountSet: Malformed transaction: Contradictory flags set."; + + return temINVALID_FLAG; + } + + if ((uTxFlags & tfRequireAuth) && !isSetBit(uFlagsIn, lsfRequireAuth)) + { + if (mTxn.getFieldU32(sfOwnerCount)) + { + cLog(lsINFO) << "AccountSet: Retry: OwnerCount not zero."; + + return terOWNERS; + } + + cLog(lsINFO) << "AccountSet: Set RequireAuth."; + + uFlagsOut |= lsfRequireAuth; + } + + if (uTxFlags & tfOptionalAuth) + { + cLog(lsINFO) << "AccountSet: Clear RequireAuth."; + + uFlagsOut &= ~lsfRequireAuth; + } + // // RequireDestTag // diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index 0f6aeb634..99c00018f 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -1152,6 +1152,7 @@ TER LedgerEntrySet::trustCreate( const uint160& uDstAccountID, const uint256& uIndex, // --> ripple state entry SLE::ref sleAccount, // --> the account being set. + const bool bAuth, // --> authorize account. const STAmount& saBalance, // --> balance of account being set. Issuer should be ACCOUNT_ONE const STAmount& saLimit, // --> limit for account being set. Issuer should be the account being set. const uint32 uQualityIn, @@ -1197,7 +1198,14 @@ TER LedgerEntrySet::trustCreate( if (uQualityOut) sleRippleState->setFieldU32(!bSetHigh ? sfLowQualityOut : sfHighQualityOut, uQualityOut); - sleRippleState->setFieldU32(sfFlags, !bSetHigh ? lsfLowReserve : lsfHighReserve); + uint32 uFlags = !bSetHigh ? lsfLowReserve : lsfHighReserve; + + if (bAuth) + { + uFlags |= (!bSetHigh ? lsfLowAuth : lsfHighAuth); + } + + sleRippleState->setFieldU32(sfFlags, uFlags); ownerCountAdjust(!bSetDst ? uSrcAccountID : uDstAccountID, 1, sleAccount); @@ -1242,6 +1250,7 @@ TER LedgerEntrySet::rippleCredit(const uint160& uSenderID, const uint160& uRecei uReceiverID, uIndex, entryCache(ltACCOUNT_ROOT, Ledger::getAccountRootIndex(uReceiverID)), + false, saBalance, saReceiverLimit); } diff --git a/src/cpp/ripple/LedgerEntrySet.h b/src/cpp/ripple/LedgerEntrySet.h index 92f012a88..197a55208 100644 --- a/src/cpp/ripple/LedgerEntrySet.h +++ b/src/cpp/ripple/LedgerEntrySet.h @@ -135,6 +135,7 @@ public: const uint160& uDstAccountID, const uint256& uIndex, SLE::ref sleAccount, + const bool bAuth, const STAmount& saSrcBalance, const STAmount& saSrcLimit, const uint32 uSrcQualityIn = 0, diff --git a/src/cpp/ripple/LedgerFormats.h b/src/cpp/ripple/LedgerFormats.h index 7e575650f..a491a58e3 100644 --- a/src/cpp/ripple/LedgerFormats.h +++ b/src/cpp/ripple/LedgerFormats.h @@ -41,6 +41,7 @@ enum LedgerSpecificFlags // ltACCOUNT_ROOT lsfPasswordSpent = 0x00010000, // True, if password set fee is spent. lsfRequireDestTag = 0x00020000, // True, to require a DestinationTag for payments. + lsfRequireAuth = 0x00040000, // True, to require a authorization to hold IOUs. // ltOFFER lsfPassive = 0x00010000, @@ -48,6 +49,8 @@ enum LedgerSpecificFlags // ltRIPPLE_STATE lsfLowReserve = 0x00010000, // True, if entry counts toward reserve. lsfHighReserve = 0x00020000, + lsfLowAuth = 0x00040000, + lsfHighAuth = 0x00080000, }; class LedgerEntryFormat diff --git a/src/cpp/ripple/TransactionErr.cpp b/src/cpp/ripple/TransactionErr.cpp index 953a8aeb2..3ffe6d639 100644 --- a/src/cpp/ripple/TransactionErr.cpp +++ b/src/cpp/ripple/TransactionErr.cpp @@ -35,6 +35,7 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { tefEXCEPTION, "tefEXCEPTION", "Unexpected program state." }, { tefCREATED, "tefCREATED", "Can't add an already created account." }, { tefGEN_IN_USE, "tefGEN_IN_USE", "Generator already in use." }, + { tefNO_AUTH_REQUIRED, "tefNO_AUTH_REQUIRED", "Auth is not required." }, { tefPAST_SEQ, "tefPAST_SEQ", "This sequence number has already past." }, { telLOCAL_ERROR, "telLOCAL_ERROR", "Local failure." }, @@ -81,6 +82,7 @@ bool transResultInfo(TER terCode, std::string& strToken, std::string& strHuman) { terNO_ACCOUNT, "terNO_ACCOUNT", "The source account does not exist." }, { terNO_LINE, "terNO_LINE", "No such line." }, { terPRE_SEQ, "terPRE_SEQ", "Missing/inapplicable prior transaction." }, + { terOWNERS, "terOWNERS", "Non-zero owner count." }, { tesSUCCESS, "tesSUCCESS", "The transaction was applied." }, }; diff --git a/src/cpp/ripple/TransactionErr.h b/src/cpp/ripple/TransactionErr.h index b5bfeea5c..97f33f091 100644 --- a/src/cpp/ripple/TransactionErr.h +++ b/src/cpp/ripple/TransactionErr.h @@ -78,6 +78,7 @@ enum TER // aka TransactionEngineResult tefCREATED, tefEXCEPTION, tefGEN_IN_USE, + tefNO_AUTH_REQUIRED, // Can't set auth if auth is not required. tefPAST_SEQ, // -99 .. -1: R Retry (sequence too high, no funds for txn fee, originating account non-existent) @@ -94,6 +95,7 @@ enum TER // aka TransactionEngineResult terINSUF_FEE_B, // Can't pay fee, therefore don't burden network. terNO_ACCOUNT, // Can't pay fee, therefore don't burden network. terNO_LINE, // Internal flag. + terOWNERS, // Can't succeed with non-zero owner count. terPRE_SEQ, // Can't pay fee, no point in forwarding, therefore don't burden network. // 0: S Success (success) diff --git a/src/cpp/ripple/TransactionFormats.h b/src/cpp/ripple/TransactionFormats.h index f761c5c70..ceb5c9b7d 100644 --- a/src/cpp/ripple/TransactionFormats.h +++ b/src/cpp/ripple/TransactionFormats.h @@ -62,7 +62,9 @@ const int TransactionMaxLen = 1048576; // AccountSet flags: const uint32 tfRequireDestTag = 0x00010000; const uint32 tfOptionalDestTag = 0x00020000; -const uint32 tfAccountSetMask = ~(tfRequireDestTag|tfOptionalDestTag); +const uint32 tfRequireAuth = 0x00040000; +const uint32 tfOptionalAuth = 0x00080000; +const uint32 tfAccountSetMask = ~(tfRequireDestTag|tfOptionalDestTag|tfRequireAuth|tfOptionalAuth); // OfferCreate flags: const uint32 tfPassive = 0x00010000; @@ -72,8 +74,11 @@ const uint32 tfOfferCreateMask = ~(tfPassive); const uint32 tfNoRippleDirect = 0x00010000; const uint32 tfPartialPayment = 0x00020000; const uint32 tfLimitQuality = 0x00040000; - const uint32 tfPaymentMask = ~(tfPartialPayment|tfLimitQuality|tfNoRippleDirect); +// TrustSet flags: +const uint32 tfSetfAuth = 0x00010000; +const uint32 tfTrustSetMask = ~(tfSetfAuth); + #endif // vim:ts=4 diff --git a/src/cpp/ripple/TrustSetTransactor.cpp b/src/cpp/ripple/TrustSetTransactor.cpp index b3fc39a41..4a66bcd78 100644 --- a/src/cpp/ripple/TrustSetTransactor.cpp +++ b/src/cpp/ripple/TrustSetTransactor.cpp @@ -27,14 +27,21 @@ TER TrustSetTransactor::doApply() const uint32 uTxFlags = mTxn.getFlags(); - if (uTxFlags) + if (uTxFlags & tfTrustSetMask) { cLog(lsINFO) << "doTrustSet: Malformed transaction: Invalid flags set."; return temINVALID_FLAG; } - // Check if destination makes sense. + const bool bSetAuth = isSetBit(uTxFlags, tfSetfAuth); + + if (bSetAuth && !isSetBit(mTxnAccount->getFieldU32(sfFlags), lsfRequireAuth)) + { + cLog(lsINFO) << "doTrustSet: Retry: Auth not required."; + + return tefNO_AUTH_REQUIRED; + } if (saLimitAmount.isNegative()) { @@ -42,13 +49,16 @@ TER TrustSetTransactor::doApply() return temBAD_LIMIT; } - else if (!uDstAccountID || uDstAccountID == ACCOUNT_ONE) + + // Check if destination makes sense. + if (!uDstAccountID || uDstAccountID == ACCOUNT_ONE) { cLog(lsINFO) << "doTrustSet: Malformed transaction: Destination account not specified."; return temDST_NEEDED; } - else if (mTxnAccountID == uDstAccountID) + + if (mTxnAccountID == uDstAccountID) { cLog(lsINFO) << "doTrustSet: Malformed transaction: Can not extend credit to self."; @@ -185,6 +195,11 @@ TER TrustSetTransactor::doApply() bool bReserveIncrease = false; + if (bSetAuth) + { + uFlagsOut |= (bHigh ? lsfHighAuth : lsfLowAuth); + } + if (bLowReserveSet && !bLowReserved) { // Set reserve for low account. @@ -292,6 +307,7 @@ TER TrustSetTransactor::doApply() uDstAccountID, Ledger::getRippleStateIndex(mTxnAccountID, uDstAccountID, uCurrencyID), mTxnAccount, + bSetAuth, saBalance, saLimitAllow, // Limit for who is being charged. uQualityIn, From 2fb4df3ba32177e9f8a2c68e89c174de7b336612 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 25 Jan 2013 11:08:49 -0800 Subject: [PATCH 513/525] More de-bastardizing. --- src/cpp/ripple/AutoSocket.h | 29 +++++++++ src/cpp/websocketpp/src/connection.hpp | 77 ++++++------------------ src/cpp/websocketpp/src/roles/server.hpp | 41 ++++--------- 3 files changed, 60 insertions(+), 87 deletions(-) diff --git a/src/cpp/ripple/AutoSocket.h b/src/cpp/ripple/AutoSocket.h index d96582525..95f513872 100644 --- a/src/cpp/ripple/AutoSocket.h +++ b/src/cpp/ripple/AutoSocket.h @@ -2,6 +2,7 @@ #define __AUTOSOCKET_H_ #include +#include #include #include @@ -9,6 +10,7 @@ #include #include #include +#include #include "Log.h" extern LogPartition AutoSocketPartition; @@ -103,6 +105,24 @@ public: PlainSocket().async_read_some(buffers, handler); } + template + void async_read_until(const Seq& buffers, Condition condition, Handler handler) + { + if (isSecure()) + basio::async_read_until(*mSocket, buffers, condition, handler); + else + basio::async_read_until(PlainSocket(), buffers, condition, handler); + } + + template + void async_read_until(basio::basic_streambuf& buffers, const std::string& delim, Handler handler) + { + if (isSecure()) + basio::async_read_until(*mSocket, buffers, delim, handler); + else + basio::async_read_until(PlainSocket(), buffers, delim, handler); + } + template void async_write(const Buf& buffers, Handler handler) { if (isSecure()) @@ -121,6 +141,15 @@ public: boost::asio::async_read(PlainSocket(), buffers, cond, handler); } + template + void async_read(basio::basic_streambuf& buffers, Condition cond, Handler handler) + { + if (isSecure()) + boost::asio::async_read(*mSocket, buffers, cond, handler); + else + boost::asio::async_read(PlainSocket(), buffers, cond, handler); + } + template void async_read(const Buf& buffers, Handler handler) { if (isSecure()) diff --git a/src/cpp/websocketpp/src/connection.hpp b/src/cpp/websocketpp/src/connection.hpp index 9883148ac..50a71b58c 100644 --- a/src/cpp/websocketpp/src/connection.hpp +++ b/src/cpp/websocketpp/src/connection.hpp @@ -899,38 +899,18 @@ public: { // TODO: read timeout timer? - if (socket_type::get_socket().isSecure()) - { - boost::asio::async_read( - socket_type::get_socket().SSLSocket(), - m_buf, - boost::asio::transfer_at_least(std::min( - m_read_threshold, - static_cast(m_processor->get_bytes_needed()) - )), - m_strand.wrap(boost::bind( - &type::handle_read_frame, - type::shared_from_this(), - boost::asio::placeholders::error - )) - ); - } - else - { - boost::asio::async_read( - socket_type::get_socket().PlainSocket(), - m_buf, - boost::asio::transfer_at_least(std::min( - m_read_threshold, - static_cast(m_processor->get_bytes_needed()) - )), - m_strand.wrap(boost::bind( - &type::handle_read_frame, - type::shared_from_this(), - boost::asio::placeholders::error - )) - ); - } + socket_type::get_socket().async_read( + m_buf, + boost::asio::transfer_at_least(std::min( + m_read_threshold, + static_cast(m_processor->get_bytes_needed()) + )), + m_strand.wrap(boost::bind( + &type::handle_read_frame, + type::shared_from_this(), + boost::asio::placeholders::error + )) + ); } } public: @@ -1228,31 +1208,14 @@ public: //m_endpoint.alog().at(log::alevel::DEVEL) << "write header: " << zsutil::to_hex(m_write_queue.front()->get_header()) << log::endl; - if (socket_type::get_socket().isSecure()) - { - boost::asio::async_write( - socket_type::get_socket().SSLSocket(), - m_write_buf, - m_strand.wrap(boost::bind( - &type::handle_write, - type::shared_from_this(), - boost::asio::placeholders::error - )) - ); - } - else - { - boost::asio::async_write( - socket_type::get_socket().PlainSocket(), - m_write_buf, - m_strand.wrap(boost::bind( - &type::handle_write, - type::shared_from_this(), - boost::asio::placeholders::error - )) - ); - } - + socket_type::get_socket().async_write( + m_write_buf, + m_strand.wrap(boost::bind( + &type::handle_write, + type::shared_from_this(), + boost::asio::placeholders::error + )) + ); } else { // if we are in an inturrupted state and had nothing else to write // it is safe to terminate the connection. diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index 0e3de9db8..abffa3f3b 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -544,36 +544,17 @@ void server::connection::async_init() { m_connection.register_timeout(5000,fail::status::TIMEOUT_WS, "Timeout on WebSocket handshake"); - if (m_connection.get_socket().isSecure()) - { - boost::asio::async_read_until( - m_connection.get_socket().SSLSocket(), - m_connection.buffer(), -// match_header, - "\r\n\r\n", - m_connection.get_strand().wrap(boost::bind( - &type::handle_read_request, - m_connection.shared_from_this(), - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred - )) - ); - } - else - { - boost::asio::async_read_until( - m_connection.get_socket().PlainSocket(), - m_connection.buffer(), -// match_header, - "\r\n\r\n", - m_connection.get_strand().wrap(boost::bind( - &type::handle_read_request, - m_connection.shared_from_this(), - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred - )) - ); - } + m_connection.get_socket().async_read_until( + m_connection.buffer(), +// match_header, + std::string("\r\n\r\n"), + m_connection.get_strand().wrap(boost::bind( + &type::handle_read_request, + m_connection.shared_from_this(), + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred + )) + ); } /// processes the response from an async read for an HTTP header From ef9d76b0fb5d7d8f14070214a269c5ced261f0dc Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 25 Jan 2013 11:11:04 -0800 Subject: [PATCH 514/525] Missing handler. --- src/cpp/ripple/AutoSocket.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/cpp/ripple/AutoSocket.h b/src/cpp/ripple/AutoSocket.h index 95f513872..1a3b6db7b 100644 --- a/src/cpp/ripple/AutoSocket.h +++ b/src/cpp/ripple/AutoSocket.h @@ -123,6 +123,15 @@ public: basio::async_read_until(PlainSocket(), buffers, delim, handler); } + template + void async_read_until(basio::basic_streambuf& buffers, MatchCondition cond, Handler handler) + { + if (isSecure()) + basio::async_read_until(*mSocket, buffers, cond, handler); + else + basio::async_read_until(PlainSocket(), buffers, cond, handler); + } + template void async_write(const Buf& buffers, Handler handler) { if (isSecure()) From ef46e76f22ee5f79131583487ce703cc59ae6b62 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 25 Jan 2013 11:24:44 -0800 Subject: [PATCH 515/525] Missing in previous commits. --- src/cpp/websocketpp/src/sockets/autotls.hpp | 181 ++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 src/cpp/websocketpp/src/sockets/autotls.hpp diff --git a/src/cpp/websocketpp/src/sockets/autotls.hpp b/src/cpp/websocketpp/src/sockets/autotls.hpp new file mode 100644 index 000000000..cdbe0632b --- /dev/null +++ b/src/cpp/websocketpp/src/sockets/autotls.hpp @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2011, Peter Thorson. 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. + * * Neither the name of the WebSocket++ Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * 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 PETER THORSON 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. + * + */ + +#ifndef WEBSOCKETPP_SOCKET_AUTOTLS_HPP +#define WEBSOCKETPP_SOCKET_AUTOTLS_HPP + +#include "../common.hpp" +#include "socket_base.hpp" +#include "../../../ripple/AutoSocket.h" + +#include +#include +#include + +#include + +namespace websocketpp { +namespace socket { + +template +class autotls { +public: + typedef autotls type; + typedef AutoSocket autotls_socket; + typedef boost::shared_ptr autotls_socket_ptr; + + // should be private friended + boost::asio::io_service& get_io_service() { + return m_io_service; + } + + static void handle_shutdown(autotls_socket_ptr, const boost::system::error_code&) { + } + + void set_secure_only() { + m_secure_only = true; + } + + void set_plain_only() { + m_plain_only = true; + } + + // should be private friended? + autotls_socket::handshake_type get_handshake_type() { + if (static_cast< endpoint_type* >(this)->is_server()) { + return boost::asio::ssl::stream_base::server; + } else { + return boost::asio::ssl::stream_base::client; + } + } + + // TLS policy adds the on_autotls_init method to the handler to allow the user + // to set up their asio TLS context. + class handler_interface { + public: + virtual ~handler_interface() {} + + virtual void on_tcp_init() {}; + virtual boost::shared_ptr on_tls_init() = 0; + }; + + // Connection specific details + template + class connection { + public: + // should these two be public or protected. If protected, how? + autotls_socket::lowest_layer_type& get_raw_socket() { + return m_socket_ptr->lowest_layer(); + } + + autotls_socket& get_socket() { + return *m_socket_ptr; + } + + bool is_secure() { + return m_socket_ptr->isSecure(); + } + protected: + connection(autotls& e) + : m_endpoint(e) + , m_connection(static_cast< connection_type& >(*this)) {} + + void init() { + m_context_ptr = m_connection.get_handler()->on_tls_init(); + + if (!m_context_ptr) { + throw "handler was unable to init autotls, connection error"; + } + + m_socket_ptr = + autotls_socket_ptr(new autotls_socket(m_endpoint.get_io_service(), *m_context_ptr, + m_endpoint.m_secure_only, m_endpoint.m_plain_only)); + } + + void async_init(boost::function callback) + { + m_connection.get_handler()->on_tcp_init(); + + // wait for TLS handshake + // TODO: configurable value + m_connection.register_timeout(5000, + fail::status::TIMEOUT_TLS, + "Timeout on TLS handshake"); + + m_socket_ptr->async_handshake( + m_endpoint.get_handshake_type(), + boost::bind( + &connection::handle_init, + this, + callback, + boost::asio::placeholders::error + ) + ); + } + + void handle_init(socket_init_callback callback,const boost::system::error_code& error) { + m_connection.cancel_timeout(); + callback(error); + } + + // note, this function for some reason shouldn't/doesn't need to be + // called for plain HTTP connections. not sure why. + bool shutdown() { + boost::system::error_code ignored_ec; + + m_socket_ptr->async_shutdown( // Don't block on connection shutdown DJS + boost::bind( + &autotls::handle_shutdown, + m_socket_ptr, + boost::asio::placeholders::error + ) + ); + + if (ignored_ec) { + return false; + } else { + return true; + } + } + private: + boost::shared_ptr m_context_ptr; + autotls_socket_ptr m_socket_ptr; + autotls& m_endpoint; + connection_type& m_connection; + }; +protected: + autotls (boost::asio::io_service& m) : m_io_service(m), m_secure_only(false), m_plain_only(false) {} +private: + boost::asio::io_service& m_io_service; + bool m_secure_only; + bool m_plain_only; +}; + +} // namespace socket +} // namespace websocketpp + +#endif // WEBSOCKETPP_SOCKET_AUTOTLS_HPP From 85a17e0d6b776a1e52b924da1227673838337e2f Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 25 Jan 2013 11:59:24 -0800 Subject: [PATCH 516/525] Stash the first line in the method so we can get it. --- src/cpp/websocketpp/src/http/parser.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cpp/websocketpp/src/http/parser.hpp b/src/cpp/websocketpp/src/http/parser.hpp index 632346537..f79a3753c 100644 --- a/src/cpp/websocketpp/src/http/parser.hpp +++ b/src/cpp/websocketpp/src/http/parser.hpp @@ -159,6 +159,7 @@ public: ss >> val; set_version(val); } else { + set_method(request); return false; } From a2424396b3308b9b5b352c36be7973c6abebbc35 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 25 Jan 2013 12:25:13 -0800 Subject: [PATCH 517/525] Flash policy server. --- src/cpp/websocketpp/src/roles/server.hpp | 33 +++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index abffa3f3b..969eb3109 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -67,6 +67,7 @@ static std::pair match_header(bufIterator begin, bufIterator if (it != end) return std::make_pair(it + header_match.size(), true); it = std::search(begin, end, alt_header_match.begin(), alt_header_match.end()); + if (it != end) return std::make_pair(it + alt_header_match.size(), true); // If we don't have a flash policy request, we're done @@ -76,7 +77,7 @@ static std::pair match_header(bufIterator begin, bufIterator // If we have a line ending before the flash policy request, treat as http bufIterator it2 = std::search(begin, end, eol_match.begin(), eol_match.end()); - if ((it2 != end) || (it < it2)) + if ((it2 != end) && (it2 < it)) return std::make_pair(end, false); // Treat as flash policy request @@ -546,8 +547,7 @@ void server::connection::async_init() { m_connection.get_socket().async_read_until( m_connection.buffer(), -// match_header, - std::string("\r\n\r\n"), + match_header, m_connection.get_strand().wrap(boost::bind( &type::handle_read_request, m_connection.shared_from_this(), @@ -579,6 +579,27 @@ void server::connection::handle_read_request( if (!m_request.parse_complete(request)) { // not a valid HTTP request/response + if (m_request.method().find("") != std::string::npos) + { // set m_version to -1, call async_write->handle_write_response + std::string reply = + "" + "(m_connection.get_raw_socket().local_endpoint().port()); + reply += "\"/>"; + reply.append("\0", 1); + + m_version = -1; + shared_const_buffer buffer(reply); + m_connection.get_socket().async_write( + buffer, + boost::bind( + &type::handle_write_response, + m_connection.shared_from_this(), + boost::asio::placeholders::error + ) + ); + return; + } throw http::exception("Received invalid HTTP Request",http::status_code::BAD_REQUEST); } @@ -826,9 +847,9 @@ void server::connection::write_response() { m_endpoint.m_alog->at(log::alevel::DEBUG_HANDSHAKE) << raw << log::endl; - m_connection.get_socket().async_write( - //boost::asio::buffer(raw), - buffer, + m_connection.get_socket().async_write( + //boost::asio::buffer(raw), + buffer, boost::bind( &type::handle_write_response, m_connection.shared_from_this(), From d5477dc83256beef679f73bf7720989195cf5cc5 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 25 Jan 2013 14:23:42 -0800 Subject: [PATCH 518/525] Fix applyOffer() to use rate and other stuff. --- src/cpp/ripple/Amount.cpp | 96 ++++++++++++++---------- src/cpp/ripple/OfferCreateTransactor.cpp | 6 +- src/cpp/ripple/SerializedTypes.h | 3 +- 3 files changed, 61 insertions(+), 44 deletions(-) diff --git a/src/cpp/ripple/Amount.cpp b/src/cpp/ripple/Amount.cpp index 4f091ac79..1d300f48e 100644 --- a/src/cpp/ripple/Amount.cpp +++ b/src/cpp/ripple/Amount.cpp @@ -1007,15 +1007,26 @@ STAmount STAmount::setRate(uint64 rate) return STAmount(CURRENCY_ONE, ACCOUNT_ONE, mantissa, exponent); } -// Taker gets all taker can pay for with saTakerFunds, limited by saOfferPays and saOfferFunds. -// --> uTakerPaysRate: >= QUALITY_ONE -// --> uOfferPaysRate: >= QUALITY_ONE -// --> saOfferFunds: Limit for saOfferPays +// Taker gets all taker can pay for with saTakerFunds/uTakerPaysRate, limited by saOfferPays and saOfferFunds/uOfferPaysRate. +// +// Existing offer is on the books. Offer owner get's their rate. +// +// Taker pays what they can. If taker is an offer, doesn't matter what rate taker is. Taker is spending at same or better rate +// than they wanted. Taker should consider themselves as wanting to buy X amount. Taker is willing to pay at most the rate of Y/X +// each. Therefore, after having some part of their offer fulfilled at a better rate their offer should be reduced accordingly. +// +// YYY Could have a flag for spend up to behaviour vs current limit spend rate. +// +// There are no quality costs for offer vs offer taking. +// +// --> uTakerPaysRate: >= QUALITY_ONE | TransferRate for third party IOUs paid by taker. +// --> uOfferPaysRate: >= QUALITY_ONE | TransferRate for third party IOUs paid by offer owner. +// --> saOfferRate: Original saOfferGets/saOfferPays, when offer was made. +// --> saOfferFunds: Limit for saOfferPays : How much can pay including fees. // --> saTakerFunds: Limit for saOfferGets : How much taker really wants. : Driver // --> saOfferPays: Request : this should be reduced as the offer is fullfilled. // --> saOfferGets: Request : this should be reduced as the offer is fullfilled. -// --> saTakerPays: Total : Used to know the approximate ratio of the exchange. -// --> saTakerGets: Total : Used to know the approximate ratio of the exchange. +// --> saTakerGets: Limit for taker to get. // <-- saTakerPaid: Actual // <-- saTakerGot: Actual // <-- saTakerIssuerFee: Actual @@ -1023,62 +1034,63 @@ STAmount STAmount::setRate(uint64 rate) // <-- bRemove: remove offer it is either fullfilled or unfunded bool STAmount::applyOffer( const uint32 uTakerPaysRate, const uint32 uOfferPaysRate, + const STAmount& saOfferRate, const STAmount& saOfferFunds, const STAmount& saTakerFunds, const STAmount& saOfferPays, const STAmount& saOfferGets, - const STAmount& saTakerPays, const STAmount& saTakerGets, + const STAmount& saTakerGets, STAmount& saTakerPaid, STAmount& saTakerGot, STAmount& saTakerIssuerFee, STAmount& saOfferIssuerFee) { - saOfferGets.throwComparable(saTakerPays); + saOfferGets.throwComparable(saTakerFunds); assert(!saOfferFunds.isZero() && !saTakerFunds.isZero()); // Must have funds. assert(!saOfferGets.isZero() && !saOfferPays.isZero()); // Must not be a null offer. - // Amount offer can pay out, limited by funds and fees. + // Limit offerer funds available, by transfer fees. STAmount saOfferFundsAvailable = QUALITY_ONE == uOfferPaysRate ? saOfferFunds : STAmount::divide(saOfferFunds, STAmount(CURRENCY_ONE, uOfferPaysRate, -9)); - // Amount offer can pay out, limited by offer and funds. - STAmount saOfferPaysAvailable = std::min(saOfferFundsAvailable, saOfferPays); + cLog(lsINFO) << "applyOffer: uOfferPaysRate=" << uOfferPaysRate; + cLog(lsINFO) << "applyOffer: saOfferFundsAvailable=" << saOfferFundsAvailable.getFullText(); - // Amount offer can get in proportion, limited by offer funds. - STAmount saOfferGetsAvailable = - saOfferFundsAvailable == saOfferPays - ? saOfferGets // Offer was fully funded, avoid shenanigans. - : divide(multiply(saTakerPays, saOfferPaysAvailable, CURRENCY_ONE, ACCOUNT_ONE), saTakerGets, saOfferGets.getCurrency(), saOfferGets.getIssuer()); + // Limit taker funds available, by transfer fees. + STAmount saTakerFundsAvailable = QUALITY_ONE == uTakerPaysRate + ? saTakerFunds + : STAmount::divide(saTakerFunds, STAmount(CURRENCY_ONE, uTakerPaysRate, -9)); - // Amount taker can spend, limited by funds and fees. - STAmount saTakerFundsAvailable = QUALITY_ONE == uTakerPaysRate - ? saTakerFunds - : STAmount::divide(saTakerFunds, STAmount(CURRENCY_ONE, uTakerPaysRate, -9)); + cLog(lsINFO) << "applyOffer: uTakerPaysRate=" << uTakerPaysRate; + cLog(lsINFO) << "applyOffer: saTakerFundsAvailable=" << saTakerFundsAvailable.getFullText(); - if (saOfferGets == saOfferGetsAvailable && saTakerFundsAvailable >= saOfferGets) + STAmount saOfferPaysAvailable; // Amount offer can pay out, limited by offer and offerer funds. + STAmount saOfferGetsAvailable; // Amount offer would get, limited by offer funds. + + if (saOfferFundsAvailable >= saOfferPays) { - // Taker gets all of offer available. - saTakerPaid = saOfferGets; // Taker paid what offer could get. - saTakerGot = saOfferPays; // Taker got what offer could pay. + // Offer was fully funded, avoid math shenanigans. - cLog(lsINFO) << "applyOffer: took all outright"; - } - else if (saTakerFunds >= saOfferGetsAvailable) - { - // Taker gets all of offer available. - saTakerPaid = saOfferGetsAvailable; // Taker paid what offer could get. - saTakerGot = saOfferPaysAvailable; // Taker got what offer could pay. - - cLog(lsINFO) << "applyOffer: took all available"; + saOfferPaysAvailable = saOfferPays; + saOfferGetsAvailable = saOfferGets; } else { - // Taker only get's a portion of offer. - saTakerPaid = saTakerFunds; // Taker paid all he had. - saTakerGot = divide(multiply(saTakerFunds, saOfferPaysAvailable, CURRENCY_ONE, ACCOUNT_ONE), saOfferGetsAvailable, saOfferPays.getCurrency(), saOfferPays.getIssuer()); - - cLog(lsINFO) << "applyOffer: saTakerGot=" << saTakerGot.getFullText(); - cLog(lsINFO) << "applyOffer: saOfferPaysAvailable=" << saOfferPaysAvailable.getFullText(); + // Offer has limited funding, limit offer gets and pays by funds available. + saOfferPaysAvailable = saOfferFundsAvailable; + saOfferGetsAvailable = multiply(saOfferFundsAvailable, saOfferRate, saOfferGets); } + cLog(lsINFO) << "applyOffer: saOfferPaysAvailable=" << saOfferFundsAvailable.getFullText(); + cLog(lsINFO) << "applyOffer: saOfferGetsAvailable=" << saOfferGetsAvailable.getFullText(); + + STAmount saTakerGetsAvailable = saTakerFunds >= saOfferGetsAvailable + ? saTakerGets + : multiply(saTakerFunds, saOfferRate, saTakerGets); // Amount can afford. + + saTakerGot = std::min(saTakerGets, saOfferPaysAvailable); // Limit by wanted and available. + saTakerPaid = saTakerGot == saOfferPaysAvailable + ? saOfferGetsAvailable + : multiply(saTakerGot, saOfferRate, saTakerFunds); + if (uTakerPaysRate == QUALITY_ONE) { saTakerIssuerFee = STAmount(saTakerPaid.getCurrency(), saTakerPaid.getIssuer()); @@ -1088,7 +1100,7 @@ bool STAmount::applyOffer( // Compute fees in a rounding safe way. STAmount saTotal = STAmount::multiply(saTakerPaid, STAmount(CURRENCY_ONE, uTakerPaysRate, -9)); - saTakerIssuerFee = (saTotal > saTakerFunds) ? saTakerFunds-saTakerPaid : saTotal - saTakerPaid; + saTakerIssuerFee = (saTotal > saTakerFunds) ? saTakerFunds-saTakerPaid : saTotal-saTakerPaid; } if (uOfferPaysRate == QUALITY_ONE) @@ -1100,9 +1112,11 @@ bool STAmount::applyOffer( // Compute fees in a rounding safe way. STAmount saTotal = STAmount::multiply(saTakerGot, STAmount(CURRENCY_ONE, uOfferPaysRate, -9)); - saOfferIssuerFee = (saTotal > saOfferFunds) ? saOfferFunds-saTakerGot : saTotal - saTakerGot; + saOfferIssuerFee = (saTotal > saOfferFunds) ? saOfferFunds-saTakerGot : saTotal-saTakerGot; } + cLog(lsINFO) << "applyOffer: saTakerGot=" << saTakerGot.getFullText(); + return saTakerGot >= saOfferPays; } diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index 66baf22af..5b46c53e1 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -147,6 +147,7 @@ TER OfferCreateTransactor::takeOffers( STAmount saSubTakerGot; STAmount saTakerIssuerFee; STAmount saOfferIssuerFee; + STAmount saOfferRate = STAmount::setRate(uTipQuality); cLog(lsINFO) << "takeOffers: applyOffer: saTakerPays: " << saTakerPays.getFullText(); cLog(lsINFO) << "takeOffers: applyOffer: saTakerPaid: " << saTakerPaid.getFullText(); @@ -155,17 +156,18 @@ TER OfferCreateTransactor::takeOffers( cLog(lsINFO) << "takeOffers: applyOffer: saPay: " << saPay.getFullText(); cLog(lsINFO) << "takeOffers: applyOffer: saOfferPays: " << saOfferPays.getFullText(); cLog(lsINFO) << "takeOffers: applyOffer: saOfferGets: " << saOfferGets.getFullText(); + cLog(lsINFO) << "takeOffers: applyOffer: saOfferRate: " << saOfferRate.getFullText(); cLog(lsINFO) << "takeOffers: applyOffer: saTakerPays: " << saTakerPays.getFullText(); cLog(lsINFO) << "takeOffers: applyOffer: saTakerGets: " << saTakerGets.getFullText(); bool bOfferDelete = STAmount::applyOffer( mEngine->getNodes().rippleTransferRate(uTakerAccountID, uOfferOwnerID, uTakerPaysAccountID), mEngine->getNodes().rippleTransferRate(uOfferOwnerID, uTakerAccountID, uTakerGetsAccountID), + saOfferRate, saOfferFunds, - saPay, // Driver XXX need to account for fees. + saPay, saOfferPays, saOfferGets, - saTakerPays, saTakerGets, saSubTakerPaid, saSubTakerGot, diff --git a/src/cpp/ripple/SerializedTypes.h b/src/cpp/ripple/SerializedTypes.h index b6d202446..baa995e72 100644 --- a/src/cpp/ripple/SerializedTypes.h +++ b/src/cpp/ripple/SerializedTypes.h @@ -373,9 +373,10 @@ public: // And what's left of the offer? And how much do I actually pay? static bool applyOffer( const uint32 uTakerPaysRate, const uint32 uOfferPaysRate, + const STAmount& saOfferRate, const STAmount& saOfferFunds, const STAmount& saTakerFunds, const STAmount& saOfferPays, const STAmount& saOfferGets, - const STAmount& saTakerPays, const STAmount& saTakerGets, + const STAmount& saTakerGets, STAmount& saTakerPaid, STAmount& saTakerGot, STAmount& saTakerIssuerFee, STAmount& saOfferIssuerFee); From fa37152e2027ea201ea5e887f45d43958ecad3d8 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 25 Jan 2013 14:24:34 -0800 Subject: [PATCH 519/525] UT: Update offer-test for new Transaction split. --- test/offer-test.js | 24 ++++++++++++------------ test/testutils.js | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/test/offer-test.js b/test/offer-test.js index 9e4fd417b..c5ea1e062 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -15,8 +15,8 @@ require("../src/js/remote").config = require("./config"); buster.testRunner.timeout = 5000; buster.testCase("Offer tests", { - 'setUp' : testutils.build_setup(), - // 'setUp' : testutils.build_setup({ verbose: true, standalone: false }), + // 'setUp' : testutils.build_setup(), + 'setUp' : testutils.build_setup({ verbose: true, standalone: false }), 'tearDown' : testutils.build_teardown(), "offer create then cancel in one ledger" : @@ -168,8 +168,8 @@ buster.testCase("Offer tests", { testutils.verify_balances(self.remote, { - "alice" : [ "499/USD/mtgox", String(100000000000+4000000000-2*(Remote.fees['default'].to_number())) ], - "bob" : [ "1/USD/mtgox", String(100000000000-4000000000-2*(Remote.fees['default'].to_number())) ], + "alice" : [ "499/USD/mtgox", String(100000000000+4000000000-2*(Transaction.fees['default'].to_number())) ], + "bob" : [ "1/USD/mtgox", String(100000000000-4000000000-2*(Transaction.fees['default'].to_number())) ], }, callback); }, @@ -224,7 +224,7 @@ buster.testCase("Offer tests", { self.what = "Create first offer."; self.remote.transaction() - .offer_create("alice", "150000.0", "50/USD/mtgox") + .offer_create("alice", "150000.0", "50/USD/mtgox") // 3000 XRP = 1 USD .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); @@ -236,7 +236,7 @@ buster.testCase("Offer tests", { self.what = "Create crossing offer."; self.remote.transaction() - .offer_create("bob", "1/USD/mtgox", "4000.0") + .offer_create("bob", "1/USD/mtgox", "3000.0") .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); @@ -249,8 +249,8 @@ buster.testCase("Offer tests", { testutils.verify_balances(self.remote, { - "alice" : [ "499/USD/mtgox", String(100000000000+4000000000-2*(Remote.fees['default'].to_number())) ], - "bob" : [ "1/USD/mtgox", String(100000000000-4000000000-2*(Remote.fees['default'].to_number())) ], + "alice" : [ "499/USD/mtgox", String(100000000000+3000000000-2*(Transaction.fees['default'].to_number())) ], + "bob" : [ "1/USD/mtgox", String(100000000000-3000000000-2*(Transaction.fees['default'].to_number())) ], }, callback); }, @@ -305,7 +305,7 @@ buster.testCase("Offer tests", { self.what = "Create first offer."; self.remote.transaction() - .offer_create("alice", "150000.0", "50/USD/mtgox") + .offer_create("alice", "150000.0", "50/USD/mtgox") // 300 XRP = 1 USD .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); @@ -328,7 +328,7 @@ buster.testCase("Offer tests", { self.what = "Create crossing offer."; self.remote.transaction() - .offer_create("bob", "1/USD/mtgox", "4000.0") + .offer_create("bob", "1/USD/mtgox", "3000.0") // .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); @@ -341,8 +341,8 @@ buster.testCase("Offer tests", { testutils.verify_balances(self.remote, { - "alice" : [ "499/USD/mtgox", String(100000000000+4000000000-2*(Remote.fees['default'].to_number())) ], - "bob" : [ "1/USD/mtgox", String(100000000000-4000000000-1*(Remote.fees['default'].to_number())) ], + "alice" : [ "499/USD/mtgox", String(100000000000+3000000000-2*(Transaction.fees['default'].to_number())) ], + "bob" : [ "1/USD/mtgox", String(100000000000-3000000000-1*(Transaction.fees['default'].to_number())) ], }, callback); }, diff --git a/test/testutils.js b/test/testutils.js index c0775c1e4..deddc3009 100644 --- a/test/testutils.js +++ b/test/testutils.js @@ -309,7 +309,7 @@ var verify_balance = function (remote, src, amount_json, callback) { var account_balance = Amount.from_json(m.account_balance); if (!account_balance.equals(amount_req)) { - console.log("verify_balance: failed: %s vs %s is %s: %s", src, account_balance.to_text_full(), amount_req.to_text_full(), account_balance.not_equals_why(amount_req)); + console.log("verify_balance: failed: %s vs %s / %s: %s", src, account_balance.to_text_full(), amount_req.to_text_full(), account_balance.not_equals_why(amount_req)); } callback(!account_balance.equals(amount_req)); From 1653709dc28fb37123bac39ee1c829e05fc3d3a1 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 25 Jan 2013 15:13:04 -0800 Subject: [PATCH 520/525] UT: Improve offer tests. --- test/offer-test.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/test/offer-test.js b/test/offer-test.js index c5ea1e062..97ca2548d 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -15,8 +15,8 @@ require("../src/js/remote").config = require("./config"); buster.testRunner.timeout = 5000; buster.testCase("Offer tests", { - // 'setUp' : testutils.build_setup(), - 'setUp' : testutils.build_setup({ verbose: true, standalone: false }), + 'setUp' : testutils.build_setup(), + // 'setUp' : testutils.build_setup({ verbose: true, standalone: false }), 'tearDown' : testutils.build_teardown(), "offer create then cancel in one ledger" : @@ -109,7 +109,6 @@ buster.testCase("Offer tests", { }); }, - // rippled broken: Balances are wrong. "Offer create then crossing offer with XRP. Reverse order." : function (done) { var self = this; @@ -143,7 +142,7 @@ buster.testCase("Offer tests", { self.what = "Create first offer."; self.remote.transaction() - .offer_create("bob", "1/USD/mtgox", "4000.0") + .offer_create("bob", "1/USD/mtgox", "4000.0") // get 1/USD pay 4000/XRP : offer pays 4000 XRP for 1 USD .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); @@ -154,8 +153,12 @@ buster.testCase("Offer tests", { function (callback) { self.what = "Create crossing offer."; + // Existing offer pays better than this wants. + // Fully consume existing offer. + // Pay 1 USD, get 4000 XRP. + self.remote.transaction() - .offer_create("alice", "150000.0", "50/USD/mtgox") + .offer_create("alice", "150000.0", "50/USD/mtgox") // get 150,000/XRP pay 50/USD : offer pays 1 USD for 3000 XRP .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); @@ -224,7 +227,7 @@ buster.testCase("Offer tests", { self.what = "Create first offer."; self.remote.transaction() - .offer_create("alice", "150000.0", "50/USD/mtgox") // 3000 XRP = 1 USD + .offer_create("alice", "150000.0", "50/USD/mtgox") // pays 1 USD for 3000 XRP .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); @@ -236,7 +239,7 @@ buster.testCase("Offer tests", { self.what = "Create crossing offer."; self.remote.transaction() - .offer_create("bob", "1/USD/mtgox", "3000.0") + .offer_create("bob", "1/USD/mtgox", "4000.0") // pays 4000 XRP for 1 USD .on('proposed', function (m) { // console.log("PROPOSED: offer_create: %s", JSON.stringify(m)); @@ -247,6 +250,10 @@ buster.testCase("Offer tests", { function (callback) { self.what = "Verify balances."; + // New offer pays better than old wants. + // Fully consume new offer. + // Pay 1 USD, get 3000 XRP. + testutils.verify_balances(self.remote, { "alice" : [ "499/USD/mtgox", String(100000000000+3000000000-2*(Transaction.fees['default'].to_number())) ], From c12399a44e3d6eea229c11301e400fa30cfa14c9 Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 25 Jan 2013 16:00:31 -0800 Subject: [PATCH 521/525] Remove unhelpful test. --- test/test-test.js | 90 ----------------------------------------------- 1 file changed, 90 deletions(-) delete mode 100644 test/test-test.js diff --git a/test/test-test.js b/test/test-test.js deleted file mode 100644 index 109454e99..000000000 --- a/test/test-test.js +++ /dev/null @@ -1,90 +0,0 @@ -var async = require("async"); -var buster = require("buster"); - -var Amount = require("../src/js/amount.js").Amount; -var Remote = require("../src/js/remote.js").Remote; -var Server = require("./server.js").Server; - - -var child = require("child_process"); //Testing spawn - - -var testutils = require("./testutils.js"); - -buster.spec.expose(); - -describe("My thing", function () { - it("states the obvious", function () { - expect(true).toBe(true);; - }); - - //var spawn = child.spawn, - - ls = child.spawn('ls', ['-lh', '/']); - - ls.stdout.on('data', function (data) { - console.log('stdout: ' + data); - }); - - ls.stderr.on('data', function (data) { - console.log('stderr: ' + data); - }); - - ls.on('exit', function (code) { - console.log('child process exited with code ' + code); - }); - -}); - -/* - -buster.testCase("Basic Path finding", { - 'setUp' : testutils.build_setup(), - 'tearDown' : testutils.build_teardown(), - - "two parallel paths, a -> c and a -> b -> c" : - function (done) { - var self = this; - - async.waterfall([ - function (callback) { - self.what = "Create accounts."; - - testutils.create_accounts(self.remote, "root", "10000.0", ["sally","bob","rod"], callback); - }, - function (callback) { - self.what = "Set credit limits."; - - testutils.credit_limits(self.remote, - { - "rod" : "40/USD/alice", - "bob" : "100/USD/alice", - "rod" : "37/USD/bob", - }, - callback); - }, - - function (callback) { - self.what = "Find path from alice to rod"; - - self.remote.request_ripple_path_find("alice", "rod", "55/USD/rod", - [ { 'currency' : "USD" } ]) - .on('success', function (m) { - // 2 alternatives. - buster.assert.equals(2, m.alternatives.length) - // Path is empty. - //buster.assert.equals(0, m.alternatives[0].paths_canonical.length) - - callback(); - }) - .request(); - }, - ], function (error) { - buster.refute(error, self.what); - done(); - }); - }, - -}); - -*/ \ No newline at end of file From 1bc5fa3e419f1e4cbe9a96f377935750510f026a Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 25 Jan 2013 16:05:02 -0800 Subject: [PATCH 522/525] UT: Clean up output. --- test/offer-test.js | 22 +++++++++++----------- test/server-test.js | 4 +--- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/test/offer-test.js b/test/offer-test.js index 97ca2548d..725ebd230 100644 --- a/test/offer-test.js +++ b/test/offer-test.js @@ -320,17 +320,17 @@ buster.testCase("Offer tests", { }) .submit(); }, - function (callback) { - self.what = "Display ledger"; - - self.remote.request_ledger('current', true) - .on('success', function (m) { - console.log("Ledger: %s", JSON.stringify(m, undefined, 2)); - - callback(); - }) - .request(); - }, +// function (callback) { +// self.what = "Display ledger"; +// +// self.remote.request_ledger('current', true) +// .on('success', function (m) { +// console.log("Ledger: %s", JSON.stringify(m, undefined, 2)); +// +// callback(); +// }) +// .request(); +// }, function (callback) { self.what = "Create crossing offer."; diff --git a/test/server-test.js b/test/server-test.js index c4502e5f0..dd73127e0 100644 --- a/test/server-test.js +++ b/test/server-test.js @@ -8,10 +8,8 @@ var Server = require("./server.js").Server; var alpha; buster.testCase("Standalone server startup", { - - "server start and stop" : function (done) { - alpha = Server.from_config("alpha",true); //ADD ,true for verbosity + alpha = Server.from_config("alpha", false); //ADD ,true for verbosity alpha .on('started', function () { From 9f61d9514c2b72d940588839f0727d3eadc8e2c4 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 25 Jan 2013 17:03:44 -0800 Subject: [PATCH 523/525] Quick and dirty possible fix. --- src/cpp/websocketpp/src/connection.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cpp/websocketpp/src/connection.hpp b/src/cpp/websocketpp/src/connection.hpp index 50a71b58c..ed1b67bb8 100644 --- a/src/cpp/websocketpp/src/connection.hpp +++ b/src/cpp/websocketpp/src/connection.hpp @@ -894,7 +894,8 @@ public: // try and read more if (m_state != session::state::CLOSED && - m_processor->get_bytes_needed() > 0 && + m_processor && + m_processor->get_bytes_needed() > 0 && // FIXME: m_processor had been reset here !m_protocol_error) { // TODO: read timeout timer? From 2fe728bf4e214fd50115774c3ca8dd41e697292a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 25 Jan 2013 19:14:53 -0800 Subject: [PATCH 524/525] Cleanups. --- src/cpp/websocketpp/src/roles/server.hpp | 2 +- src/cpp/websocketpp/src/sockets/autotls.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cpp/websocketpp/src/roles/server.hpp b/src/cpp/websocketpp/src/roles/server.hpp index 969eb3109..7f1758f01 100644 --- a/src/cpp/websocketpp/src/roles/server.hpp +++ b/src/cpp/websocketpp/src/roles/server.hpp @@ -591,7 +591,7 @@ void server::connection::handle_read_request( m_version = -1; shared_const_buffer buffer(reply); m_connection.get_socket().async_write( - buffer, + shared_const_buffer(reply), boost::bind( &type::handle_write_response, m_connection.shared_from_this(), diff --git a/src/cpp/websocketpp/src/sockets/autotls.hpp b/src/cpp/websocketpp/src/sockets/autotls.hpp index cdbe0632b..8ab2bca94 100644 --- a/src/cpp/websocketpp/src/sockets/autotls.hpp +++ b/src/cpp/websocketpp/src/sockets/autotls.hpp @@ -73,7 +73,7 @@ public: } } - // TLS policy adds the on_autotls_init method to the handler to allow the user + // TLS policy adds the on_tls_init method to the handler to allow the user // to set up their asio TLS context. class handler_interface { public: From ab8389609bcdde3af0fde6591bf1e9acc289f615 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 26 Jan 2013 09:41:17 -0800 Subject: [PATCH 525/525] Mark a caution in the code. A small cleanup. And dispatch on_close's to the thread pool rather than handling them with a websocket lock. --- src/cpp/ripple/WSHandler.h | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/WSHandler.h b/src/cpp/ripple/WSHandler.h index 4324e7bfc..04dadefd3 100644 --- a/src/cpp/ripple/WSHandler.h +++ b/src/cpp/ripple/WSHandler.h @@ -11,14 +11,17 @@ extern void initSSLContext(boost::asio::ssl::context& context, template class WSConnection; +// CAUTION: on_* functions are called by the websocket code while holding a lock + // A single instance of this object is made. // This instance dispatches all events. There is no per connection persistence. template class WSServerHandler : public endpoint_type::handler { public: - typedef typename endpoint_type::handler::connection_ptr connection_ptr; - typedef typename endpoint_type::handler::message_ptr message_ptr; + typedef typename endpoint_type::handler::connection_ptr connection_ptr; + typedef typename endpoint_type::handler::message_ptr message_ptr; + typedef boost::shared_ptr< WSConnection > wsc_ptr; // Private reasons to close. enum { @@ -83,7 +86,6 @@ public: void pingTimer(connection_ptr cpClient) { - typedef boost::shared_ptr< WSConnection > wsc_ptr; wsc_ptr ptr; { boost::mutex::scoped_lock sl(mMapLock); @@ -105,8 +107,6 @@ public: void on_send_empty(connection_ptr cpClient) { - typedef boost::shared_ptr< WSConnection > wsc_ptr; - wsc_ptr ptr; { boost::mutex::scoped_lock sl(mMapLock); @@ -128,8 +128,6 @@ public: void on_pong(connection_ptr cpClient, std::string) { - cLog(lsTRACE) << "Pong received"; - typedef boost::shared_ptr< WSConnection > wsc_ptr; wsc_ptr ptr; { boost::mutex::scoped_lock sl(mMapLock); @@ -143,7 +141,6 @@ public: void on_close(connection_ptr cpClient) { // we cannot destroy the connection while holding the map lock or we deadlock with pubLedger - typedef boost::shared_ptr< WSConnection > wsc_ptr; wsc_ptr ptr; { boost::mutex::scoped_lock sl(mMapLock); @@ -156,7 +153,8 @@ public: ptr->preDestroy(); // Must be done before we return // Must be done without holding the websocket send lock - theApp->getAuxService().post(boost::bind(&WSConnection::destroy, ptr)); + theApp->getJobQueue().addJob(jtCLIENT, + boost::bind(&WSConnection::destroy, ptr)); } void on_message(connection_ptr cpClient, message_ptr mpMessage)