{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/date-fns/esm/toDate/index.js","webpack:///./packages/loot-core/src/server/db/sort.js","webpack:///./packages/loot-core/src/server/db/index.js","webpack:///./packages/loot-core/src/shared/months.js","webpack:///./node_modules/date-fns/esm/_lib/toInteger/index.js","webpack:///./packages/loot-core/src/platform/server/fs/index.web.js","webpack:///./packages/loot-core/src/server/sheet.js","webpack:///./packages/loot-core/src/server/mutators.js","webpack:///./packages/loot-core/src/server/sync/index.js","webpack:///./packages/loot-core/src/server/prefs.js","webpack:///./packages/loot-core/src/platform/server/asyncStorage/index.web.js","webpack:///./node_modules/node-libs-browser/node_modules/buffer/index.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./packages/loot-core/src/shared/util.js","webpack:///./packages/loot-core/src/server/timestamp.js","webpack:///./packages/loot-core/src/server/undo.js","webpack:///./packages/loot-core/src/platform/server/sqlite/index.web.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./packages/loot-core/src/server/models.js","webpack:///./packages/loot-core/src/server/errors.js","webpack:///./node_modules/process/browser.js","webpack:///./packages/loot-core/src/server/server-config.js","webpack:///./packages/loot-core/src/server/accounts/transaction-rules.js","webpack:///./node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack:///(webpack)/buildin/global.js","webpack:///./packages/loot-core/src/platform/exceptions/index.web.js","webpack:///./packages/loot-core/src/shared/query.js","webpack:///./packages/loot-core/src/server/aql/exec.js","webpack:///./packages/loot-core/src/server/aql/schema/executors.js","webpack:///./packages/loot-core/src/server/aql/schema/run-query.js","webpack:///./node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack:///./packages/loot-core/src/server/main-app.js","webpack:///./packages/loot-core/src/server/accounts/rules.js","webpack:///./packages/loot-core/src/server/post.js","webpack:///./packages/loot-core/src/server/encryption.js","webpack:///./packages/loot-core/src/server/budget/actions.js","webpack:///./packages/loot-core/src/server/aql/schema/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack:///./node_modules/date-fns/esm/format/index.js","webpack:///./node_modules/bn.js/lib/bn.js","webpack:///./node_modules/date-fns/esm/compareAsc/index.js","webpack:///./packages/loot-core/src/server/cloud-storage.js","webpack:///./packages/loot-core/src/shared/rules.js","webpack:///./packages/loot-core/src/server/api-models.js","webpack:///./packages/loot-core/src/server/accounts/sync.js","webpack:///./packages/loot-core/src/shared/schedules.js","webpack:///./packages/loot-core/src/platform/uuid/index.web.js","webpack:///./packages/loot-core/src/server/platform.web.js","webpack:///./node_modules/minimalistic-assert/index.js","webpack:///./node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarDays/index.js","webpack:///./node_modules/date-fns/esm/addDays/index.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./packages/loot-core/src/server/spreadsheet/util.js","webpack:///./node_modules/date-fns/esm/subMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack:///./packages/loot-core/src/platform/server/connection/index.web.js","webpack:///./node_modules/hash.js/lib/hash/utils.js","webpack:///./node_modules/call-bind/callBound.js","webpack:///./node_modules/date-fns/esm/addMilliseconds/index.js","webpack:///./packages/loot-core/src/server/app.js","webpack:///./node_modules/date-fns/esm/addMonths/index.js","webpack:///./packages/loot-core/src/server/aql/compiler.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack:///./packages/loot-core/src/server/budget/util.js","webpack:///./packages/loot-core/src/server/budget/report.js","webpack:///./packages/loot-core/src/server/budget/rollover.js","webpack:///./packages/loot-core/src/server/budget/base.js","webpack:///./node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/date-fns/esm/addHours/index.js","webpack:///./node_modules/date-fns/esm/startOfWeek/index.js","webpack:///./node_modules/date-fns/esm/startOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/getISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/startOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/setISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/addISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/addMinutes/index.js","webpack:///./node_modules/date-fns/esm/addQuarters/index.js","webpack:///./node_modules/date-fns/esm/addSeconds/index.js","webpack:///./node_modules/date-fns/esm/areIntervalsOverlapping/index.js","webpack:///./node_modules/date-fns/esm/closestIndexTo/index.js","webpack:///./node_modules/date-fns/esm/closestTo/index.js","webpack:///./node_modules/date-fns/esm/compareDesc/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarISOWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarMonths/index.js","webpack:///./node_modules/date-fns/esm/getQuarter/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarQuarters/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInHours/index.js","webpack:///./node_modules/date-fns/esm/subISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInMinutes/index.js","webpack:///./node_modules/date-fns/esm/differenceInMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInQuarters/index.js","webpack:///./node_modules/date-fns/esm/differenceInSeconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInYears/index.js","webpack:///./node_modules/date-fns/esm/eachDayOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekOfInterval/index.js","webpack:///./node_modules/date-fns/esm/isSunday/index.js","webpack:///./node_modules/date-fns/esm/isWeekend/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfMonth/index.js","webpack:///./node_modules/date-fns/esm/startOfYear/index.js","webpack:///./node_modules/date-fns/esm/endOfYear/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfYear/index.js","webpack:///./node_modules/date-fns/esm/endOfDay/index.js","webpack:///./node_modules/date-fns/esm/endOfDecade/index.js","webpack:///./node_modules/date-fns/esm/endOfHour/index.js","webpack:///./node_modules/date-fns/esm/endOfWeek/index.js","webpack:///./node_modules/date-fns/esm/endOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/endOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/endOfMinute/index.js","webpack:///./node_modules/date-fns/esm/endOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/endOfSecond/index.js","webpack:///./node_modules/date-fns/esm/_lib/assign/index.js","webpack:///./node_modules/date-fns/esm/_lib/cloneObject/index.js","webpack:///./node_modules/date-fns/esm/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/formatDistanceStrict/index.js","webpack:///./node_modules/date-fns/esm/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/fromUnixTime/index.js","webpack:///./node_modules/date-fns/esm/getDay/index.js","webpack:///./node_modules/date-fns/esm/getDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/isLeapYear/index.js","webpack:///./node_modules/date-fns/esm/getDaysInYear/index.js","webpack:///./node_modules/date-fns/esm/getDecade/index.js","webpack:///./node_modules/date-fns/esm/getHours/index.js","webpack:///./node_modules/date-fns/esm/getISODay/index.js","webpack:///./node_modules/date-fns/esm/getISOWeek/index.js","webpack:///./node_modules/date-fns/esm/getISOWeeksInYear/index.js","webpack:///./node_modules/date-fns/esm/getMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/getMinutes/index.js","webpack:///./node_modules/date-fns/esm/getMonth/index.js","webpack:///./node_modules/date-fns/esm/getOverlappingDaysInIntervals/index.js","webpack:///./node_modules/date-fns/esm/getSeconds/index.js","webpack:///./node_modules/date-fns/esm/getTime/index.js","webpack:///./node_modules/date-fns/esm/getUnixTime/index.js","webpack:///./node_modules/date-fns/esm/getWeekYear/index.js","webpack:///./node_modules/date-fns/esm/startOfWeekYear/index.js","webpack:///./node_modules/date-fns/esm/getWeek/index.js","webpack:///./node_modules/date-fns/esm/getWeekOfMonth/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/getWeeksInMonth/index.js","webpack:///./node_modules/date-fns/esm/getYear/index.js","webpack:///./node_modules/date-fns/esm/isDate/index.js","webpack:///./node_modules/date-fns/esm/isEqual/index.js","webpack:///./node_modules/date-fns/esm/isFirstDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/isFriday/index.js","webpack:///./node_modules/date-fns/esm/isLastDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/isMonday/index.js","webpack:///./node_modules/date-fns/esm/isSameDay/index.js","webpack:///./node_modules/date-fns/esm/startOfHour/index.js","webpack:///./node_modules/date-fns/esm/isSameHour/index.js","webpack:///./node_modules/date-fns/esm/isSameWeek/index.js","webpack:///./node_modules/date-fns/esm/isSameISOWeek/index.js","webpack:///./node_modules/date-fns/esm/isSameISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/startOfMinute/index.js","webpack:///./node_modules/date-fns/esm/isSameMinute/index.js","webpack:///./node_modules/date-fns/esm/isSameMonth/index.js","webpack:///./node_modules/date-fns/esm/startOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/isSameQuarter/index.js","webpack:///./node_modules/date-fns/esm/startOfSecond/index.js","webpack:///./node_modules/date-fns/esm/isSameSecond/index.js","webpack:///./node_modules/date-fns/esm/isSameYear/index.js","webpack:///./node_modules/date-fns/esm/isSaturday/index.js","webpack:///./node_modules/date-fns/esm/isThursday/index.js","webpack:///./node_modules/date-fns/esm/isTuesday/index.js","webpack:///./node_modules/date-fns/esm/isWednesday/index.js","webpack:///./node_modules/date-fns/esm/isWithinInterval/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfDecade/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfWeek/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/lightFormat/index.js","webpack:///./node_modules/date-fns/esm/max/index.js","webpack:///./node_modules/date-fns/esm/min/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCDay/index.js","webpack:///./node_modules/date-fns/esm/parse/_lib/parsers/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISODay/index.js","webpack:///./node_modules/date-fns/esm/parse/index.js","webpack:///./node_modules/date-fns/esm/roundToNearestMinutes/index.js","webpack:///./node_modules/date-fns/esm/setDate/index.js","webpack:///./node_modules/date-fns/esm/setDay/index.js","webpack:///./node_modules/date-fns/esm/setDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/setHours/index.js","webpack:///./node_modules/date-fns/esm/setISODay/index.js","webpack:///./node_modules/date-fns/esm/setISOWeek/index.js","webpack:///./node_modules/date-fns/esm/setMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/setMinutes/index.js","webpack:///./node_modules/date-fns/esm/setMonth/index.js","webpack:///./node_modules/date-fns/esm/setQuarter/index.js","webpack:///./node_modules/date-fns/esm/setSeconds/index.js","webpack:///./node_modules/date-fns/esm/setWeek/index.js","webpack:///./node_modules/date-fns/esm/setWeekYear/index.js","webpack:///./node_modules/date-fns/esm/setYear/index.js","webpack:///./node_modules/date-fns/esm/startOfDecade/index.js","webpack:///./node_modules/date-fns/esm/subHours/index.js","webpack:///./node_modules/date-fns/esm/subMinutes/index.js","webpack:///./node_modules/date-fns/esm/subQuarters/index.js","webpack:///./node_modules/date-fns/esm/subSeconds/index.js","webpack:///./node_modules/date-fns/esm/startOfMonth/index.js","webpack:///./node_modules/date-fns/esm/isValid/index.js","webpack:///./packages/loot-core/src/server/aql/schema-helpers.js","webpack:///./packages/loot-core/src/server/accounts/transactions.js","webpack:///./packages/loot-core/src/platform/server/log/index.web.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/cipher-base/index.js","webpack:///./node_modules/has-tostringtag/shams.js","webpack:///./node_modules/date-fns/esm/addWeeks/index.js","webpack:///./node_modules/date-fns/esm/startOfDay/index.js","webpack:///./packages/loot-core/src/server/merkle.js","webpack:///./packages/loot-core/src/server/encryption-internals.web.js","webpack:///./packages/loot-core/src/shared/transactions.js","webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/get-intrinsic/index.js","webpack:///./node_modules/define-properties/index.js","webpack:///./node_modules/date-fns/esm/endOfMonth/index.js","webpack:///./node_modules/memfs/lib/index.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/sha.js/hash.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/date-fns/esm/getDaysInMonth/index.js","webpack:///./packages/loot-core/src/shared/async.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack:///./node_modules/@rschedule/core/es2015/main.js","webpack:///./node_modules/@rschedule/core/es2015/generators.js","webpack:///./node_modules/@rschedule/core/es2015/rules.js","webpack:///./node_modules/@rschedule/standard-date-adapter/es2015/main.js","webpack:///./node_modules/@rschedule/standard-date-adapter/es2015/setup.js","webpack:///./node_modules/@rschedule/json-tools/es2015/main.js","webpack:///./node_modules/@rschedule/json-tools/es2015/Schedule.js","webpack:///./node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack:///./packages/loot-core/src/server/backups.js","webpack:///./packages/loot-core/src/server/tracking/events.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/memfs/lib/constants.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/readable-stream/node_modules/core-util-is/lib/util.js","webpack:///./node_modules/create-hash/browser.js","webpack:///./node_modules/buffer-xor/index.js","webpack:///./node_modules/hash.js/lib/hash/common.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/index.js","webpack:///./node_modules/adm-zip/util/index.js","webpack:///./node_modules/date-fns/esm/isBefore/index.js","webpack:///./packages/loot-core/src/server/db/util.js","webpack:///./node_modules/date-fns/esm/parseISO/index.js","webpack:///./packages/loot-core/src/server/db/mappings.js","webpack:///./packages/loot-core/src/server/accounts/transfer.js","webpack:///./node_modules/util/util.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/evp_bytestokey/index.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/uuid/index.js","webpack:///./node_modules/browserify-zlib/lib/index.js","webpack:///./node_modules/pako/lib/utils/common.js","webpack:///./node_modules/has-symbols/shams.js","webpack:///./node_modules/call-bind/index.js","webpack:///./packages/loot-core/src/server/spreadsheet/globals.js","webpack:///./packages/loot-core/src/server/sync/repair.js","webpack:///./node_modules/date-fns/esm/addYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInDays/index.js","webpack:///./node_modules/date-fns/esm/getDate/index.js","webpack:///../src/index.ts","webpack:///./packages/loot-core/src/platform/server/fetch/index.web.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/subMonths/index.js","webpack:///./node_modules/date-fns/esm/subDays/index.js","webpack:///./packages/loot-core/src/shared/accounts.js","webpack:///./packages/loot-core/src/server/accounts/payees.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack:///./packages/loot-core/src/server/accounts/link.js","webpack:///./node_modules/memfs/lib/Stats.js","webpack:///./node_modules/memfs/lib/internal/buffer.js","webpack:///./node_modules/assert/assert.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/readable-stream/node_modules/safe-buffer/index.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/md5.js/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/ripemd160/index.js","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/des.js/lib/des/cipher.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/brorand/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/hash.js/lib/hash.js","webpack:///./node_modules/safer-buffer/safer.js","webpack:///./node_modules/asn1.js/lib/asn1/base/node.js","webpack:///./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///./packages/loot-core/src/server/sync/proto/sync_pb.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/fileSystem.js","webpack:///./node_modules/object-keys/index.js","webpack:///./node_modules/has-symbols/index.js","webpack:///./node_modules/function-bind/index.js","webpack:///./node_modules/date-fns/esm/isAfter/index.js","webpack:///./packages/api/injected.js","webpack:///./packages/loot-core/src/server/migrate/migrations.js","webpack:///./packages/loot-core/migrations/1632571489012_remove_cache.js","webpack:///./packages/loot-core/src/server/aql/views.js","webpack:///./packages/loot-core/src/server/update.js","webpack:///./node_modules/lru-cache/index.js","webpack:///./packages/loot-core/src/server/spreadsheet/spreadsheet.js","webpack:///./packages/loot-core/src/server/sync/encoder.js","webpack:///./packages/loot-core/src/server/util/budget-name.js","webpack:///./packages/loot-core/src/server/accounts/export-to-csv.js","webpack:///./node_modules/csv-stringify/lib/sync.js","webpack:///./node_modules/deep-equal/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./packages/loot-core/src/platform/server/indexeddb/index.web.js","webpack:///./node_modules/memfs/lib/Dirent.js","webpack:///./node_modules/memfs/lib/encoding.js","webpack:///./node_modules/memfs/lib/internal/errors.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/memfs/lib/process.js","webpack:///./node_modules/memfs/lib/setImmediate.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/crypto-browserify/index.js","webpack:///./node_modules/hash-base/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/create-hmac/browser.js","webpack:///./node_modules/create-hash/md5.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/pbkdf2/lib/to-buffer.js","webpack:///./node_modules/des.js/lib/des/utils.js","webpack:///./node_modules/des.js/lib/des/des.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/diffie-hellman/lib/generatePrime.js","webpack:///./node_modules/miller-rabin/lib/mr.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/hash.js/lib/hash/sha/common.js","webpack:///./node_modules/hash.js/lib/hash/sha/256.js","webpack:///./node_modules/hash.js/lib/hash/sha/512.js","webpack:///./node_modules/browserify-sign/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/public-encrypt/mgf.js","webpack:///./node_modules/public-encrypt/xor.js","webpack:///./node_modules/public-encrypt/withPublic.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./packages/loot-core/src/server/sync/make-test-message.js","webpack:///./packages/loot-core/src/server/sync/reset.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/constants.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/errors.js","webpack:///./packages/loot-core/node_modules/adm-zip/zipEntry.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/index.js","webpack:///./node_modules/pako/lib/zlib/adler32.js","webpack:///./node_modules/pako/lib/zlib/crc32.js","webpack:///./node_modules/charenc/charenc.js","webpack:///./node_modules/date-fns/esm/subWeeks/index.js","webpack:///./node_modules/date-fns/esm/subYears/index.js","webpack:///./node_modules/@jlongster/mixpanel/lib/utils.js","webpack:///./node_modules/@jlongster/mixpanel/lib/profile_helpers.js","webpack:///./node_modules/object-keys/isArguments.js","webpack:///./node_modules/is-arguments/index.js","webpack:///./node_modules/object-is/implementation.js","webpack:///./node_modules/object-is/polyfill.js","webpack:///./node_modules/regexp.prototype.flags/implementation.js","webpack:///./node_modules/regexp.prototype.flags/polyfill.js","webpack:///./node_modules/is-string/index.js","webpack:///./node_modules/is-map/index.js","webpack:///./node_modules/is-set/index.js","webpack:///./node_modules/foreach/index.js","webpack:///./node_modules/available-typed-arrays/index.js","webpack:///./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js","webpack:///./node_modules/object.assign/implementation.js","webpack:///./node_modules/object.assign/polyfill.js","webpack:///./node_modules/adm-zip/util/fileSystem.js","webpack:///./node_modules/adm-zip/util/constants.js","webpack:///./node_modules/adm-zip/zipEntry.js","webpack:///./node_modules/adm-zip/headers/index.js","webpack:///./packages/api/methods.js","webpack:///./node_modules/@jlongster/sql.js/dist/sql-wasm.js","webpack:///./node_modules/murmurhash/murmurhash.js","webpack:///./node_modules/md5/md5.js","webpack:///./packages/loot-core/src/server/accounts/title/index.js","webpack:///./packages/loot-core/src/server/sync/migrate.js","webpack:///./node_modules/csv-parse/lib/sync.js","webpack:///./packages/loot-core/src/server/api.js","webpack:///./packages/loot-core/src/mocks/budget.js","webpack:///./packages/loot-core/src/server/budget/app.js","webpack:///./packages/loot-core/src/server/notes/app.js","webpack:///./packages/loot-core/src/server/tools/app.js","webpack:///./packages/loot-core/src/server/accounts/parse-file.js","webpack:///./packages/loot-core/src/server/accounts/qif2json.js","webpack:///./packages/loot-core/src/server/schedules/find-schedules.js","webpack:///./packages/loot-core/src/server/schedules/app.js","webpack:///./packages/loot-core/src/server/main.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/lru-cache/node_modules/yallist/yallist.js","webpack:///./node_modules/lru-cache/node_modules/yallist/iterator.js","webpack:///./node_modules/memfs/lib/getBigInt.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/util/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/memfs/lib/volume.js","webpack:///./node_modules/memfs/lib/node.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/memfs/lib/setTimeoutUnref.js","webpack:///./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/readable-stream/writable-browser.js","webpack:///./node_modules/readable-stream/duplex-browser.js","webpack:///./node_modules/readable-stream/transform.js","webpack:///./node_modules/readable-stream/passthrough.js","webpack:///./node_modules/memfs/lib/promises.js","webpack:///./node_modules/url/url.js","webpack:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js","webpack:///./node_modules/url/util.js","webpack:///./node_modules/querystring-es3/index.js","webpack:///./node_modules/querystring-es3/decode.js","webpack:///./node_modules/querystring-es3/encode.js","webpack:///./node_modules/fs-monkey/lib/correctPath.js","webpack:///./node_modules/fs-monkey/lib/util/lists.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/create-hmac/legacy.js","webpack:///./node_modules/browserify-sign/algos.js","webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/browserify-des/index.js","webpack:///./node_modules/des.js/lib/des.js","webpack:///./node_modules/des.js/lib/des/cbc.js","webpack:///./node_modules/des.js/lib/des/ede.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/diffie-hellman/browser.js","webpack:///./node_modules/diffie-hellman/lib/dh.js","webpack:///./node_modules/browserify-sign/browser/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///./node_modules/browserify-sign/browser/sign.js","webpack:///./node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///./node_modules/hash.js/lib/hash/sha.js","webpack:///./node_modules/hash.js/lib/hash/sha/1.js","webpack:///./node_modules/hash.js/lib/hash/sha/224.js","webpack:///./node_modules/hash.js/lib/hash/sha/384.js","webpack:///./node_modules/hash.js/lib/hash/ripemd.js","webpack:///./node_modules/hash.js/lib/hash/hmac.js","webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///./node_modules/parse-asn1/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/browserify-sign/browser/verify.js","webpack:///./node_modules/create-ecdh/browser.js","webpack:///./node_modules/public-encrypt/browser.js","webpack:///./node_modules/public-encrypt/publicEncrypt.js","webpack:///./node_modules/public-encrypt/privateDecrypt.js","webpack:///./node_modules/randomfill/browser.js","webpack:///./node_modules/absurd-sql/dist/index.js","webpack:///./node_modules/absurd-sql/dist/indexeddb-backend.js","webpack:///./packages/loot-core/src/platform/server/fs/index.electron.js","webpack:///./packages/loot-core/src/platform/server/fs/path-join.web.js","webpack:///./node_modules/currency-formatter/index.js","webpack:///./node_modules/accounting/accounting.js","webpack:///./node_modules/locale-currency/index.js","webpack:///./node_modules/locale-currency/map.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/uuid/v4.js","webpack:///./packages/loot-core/src/server/spreadsheet/graph-data-structure.js","webpack:///./packages/loot-core/src/platform/uuid/index.electron.js","webpack:///./node_modules/google-protobuf/google-protobuf.js","webpack:///./packages/loot-core/node_modules/adm-zip/adm-zip.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/utils.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/fattr.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/entryHeader.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/mainHeader.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/index.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/deflater.js","webpack:///./node_modules/browserify-zlib/lib/binding.js","webpack:///./node_modules/pako/lib/zlib/zstream.js","webpack:///./node_modules/pako/lib/zlib/deflate.js","webpack:///./node_modules/pako/lib/zlib/trees.js","webpack:///./node_modules/pako/lib/zlib/messages.js","webpack:///./node_modules/pako/lib/zlib/inflate.js","webpack:///./node_modules/pako/lib/zlib/inffast.js","webpack:///./node_modules/pako/lib/zlib/inftrees.js","webpack:///./node_modules/pako/lib/zlib/constants.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/inflater.js","webpack:///./packages/loot-core/node_modules/adm-zip/zipFile.js","webpack:///./node_modules/crypt/crypt.js","webpack:///./node_modules/is-buffer/index.js","webpack:///./packages/loot-core/src/server/accounts/title/lower-case.js","webpack:///./packages/loot-core/src/server/accounts/title/specials.js","webpack:///./node_modules/damerau-levenshtein/index.js","webpack:///./node_modules/csv-parse/lib/index.js","webpack:///./node_modules/csv-parse/lib/ResizeableBuffer.js","webpack:///./node_modules/csv-stringify/lib/index.js","webpack:///./node_modules/@jlongster/mixpanel/lib/mixpanel-node.js","webpack:///./node_modules/@jlongster/mixpanel/lib/groups.js","webpack:///./node_modules/@jlongster/mixpanel/lib/people.js","webpack:///./node_modules/object-keys/implementation.js","webpack:///./node_modules/function-bind/implementation.js","webpack:///./node_modules/has/src/index.js","webpack:///./node_modules/object-is/index.js","webpack:///./node_modules/object-is/shim.js","webpack:///./node_modules/is-regex/index.js","webpack:///./node_modules/regexp.prototype.flags/index.js","webpack:///./node_modules/regexp.prototype.flags/shim.js","webpack:///./node_modules/deep-equal/node_modules/isarray/index.js","webpack:///./node_modules/is-date-object/index.js","webpack:///./node_modules/which-boxed-primitive/index.js","webpack:///./node_modules/is-number-object/index.js","webpack:///./node_modules/is-boolean-object/index.js","webpack:///./node_modules/is-symbol/index.js","webpack:///./node_modules/is-bigint/index.js","webpack:///./node_modules/has-bigints/index.js","webpack:///./node_modules/which-collection/index.js","webpack:///./node_modules/is-weakmap/index.js","webpack:///./node_modules/is-weakset/index.js","webpack:///./node_modules/es-get-iterator/index.js","webpack:///./node_modules/es-get-iterator/node_modules/isarray/index.js","webpack:///./node_modules/side-channel/index.js","webpack:///./node_modules/object-inspect/index.js","webpack:///./node_modules/which-typed-array/index.js","webpack:///./node_modules/is-typed-array/index.js","webpack:///./node_modules/object.assign/index.js","webpack:///./node_modules/object.assign/shim.js","webpack:///./packages/import-ynab4/importer.js","webpack:///./node_modules/slash/index.js","webpack:///./node_modules/adm-zip/adm-zip.js","webpack:///./node_modules/adm-zip/util/utils.js","webpack:///./node_modules/adm-zip/util/errors.js","webpack:///./node_modules/adm-zip/util/fattr.js","webpack:///./node_modules/adm-zip/headers/entryHeader.js","webpack:///./node_modules/adm-zip/headers/mainHeader.js","webpack:///./node_modules/adm-zip/methods/index.js","webpack:///./node_modules/adm-zip/methods/deflater.js","webpack:///./node_modules/adm-zip/methods/inflater.js","webpack:///./node_modules/adm-zip/methods/zipcrypto.js","webpack:///./node_modules/adm-zip/zipFile.js","webpack:///./packages/api/app/query.js","webpack:///./packages/import-ynab4/node_modules/@actual-app/api/utils.js","webpack:///./packages/import-ynab5/importer.js","webpack:///./packages/import-ynab5/node_modules/@actual-app/api/utils.js"],"names":["self","chunkIds","moreModules","moduleId","modules","length","installedChunks","pop","installedModules","__webpack_require__","exports","module","i","l","call","e","chunkId","promises","push","Promise","resolve","then","importScripts","p","all","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","s","toDate","argument","arguments","TypeError","argStr","toString","Date","getTime","console","warn","Error","stack","NaN","midpoint","items","to","below","above","sort_order","shoveSortOrders","targetId","findIndex","item","id","target","before","updates","next","order","uuid","require","dbPath","db","getDatabasePath","async","openDatabase","sqlite","fs","join","getBudgetDir","setDatabase","reopenDatabase","closeDatabase","db_","_queryCache","LRU","max","getDatabase","loadClock","row","first","clock","deserializeClock","setClock","timestamp","Timestamp","makeClientId","makeClock","runQuery","serializeClock","sql","params","fetchAll","execQuery","cache","cached","prepared","set","transaction","fn","asyncTransaction","arr","firstSync","run","select","table","update","fields","keys","filter","k","sendMessages","map","dataset","column","send","insertWithUUID","v4Sync","insert","delete_","selectWithSchema","convertFromSelect","schema","schemaConfig","Boolean","selectFirstWithSchema","rows","insertWithSchema","convertForInsert","updateWithSchema","convertForUpdate","getCategories","getCategoriesGrouped","groups","group","categories","cat_group","insertCategoryGroup","lastGroup","categoryGroupModel","validate","updateCategoryGroup","moveCategoryGroup","info","deleteCategoryGroup","transferId","cat","deleteCategory","insertCategory","category","atEnd","id_","batchMessages","lastCat","categoryModel","updateCategory","moveCategory","groupId","existingTransfers","mapping","getPayee","insertPayee","payee","payeeModel","deletePayee","transfer_acct","rules","rule","deletePayeeRule","deleteTransferPayee","updatePayee","mergePayees","ids","payees","groupById","mappings","getPayees","getOrphanedPayees","getPayeeByName","toLowerCase","insertPayeeRule","payeeRuleModel","updatePayeeRule","getPayeeRules","getAccounts","insertAccount","account","undefined","type","offbudget","accountModel","updateAccount","deleteAccount","moveAccount","accounts","closed","getTransaction","getTransactionsByDate","accountId","startDate","endDate","options","getTransactions","arg2","insertTransaction","updateTransaction","deleteTransaction","_parse","split","year","month","day","parseInt","parseDate","yearFromDate","date","monthFromDate","dayFromDate","currentMonth","global","IS_TESTING","currentDay","prevMonth","addMonths","subMonths","addDays","subDays","isBefore","month1","month2","isAfter","bounds","start","end","_range","inclusive","months","range","rangeInclusive","getMonth","slice","sheetForMonth","replace","format","str","memoizeOne","RegExp","regex","toInteger","dirtyNumber","number","Number","isNaN","Math","ceil","floor","SQLiteFS","IndexedDBBackend","default","connection","_getModule","idb","baseAPI","FS","BFS","pathToId","filepath","_exists","stat","_mkdirRecursively","dir","parts","path","part","mkdir","_createFile","startsWith","endsWith","symlink","writeFile","_readFile","opts","store","getStore","encoding","ArrayBuffer","isView","contents","String","fromCharCode","apply","Uint16Array","buffer","readFile","resolveLink","lookupPath","follow","node","link","readlink","_writeFile","Uint8Array","isDb","populateDefaultFilesystem","files","fetch","process","text","trim","url","file","res","arrayBuffer","populateFileHeirarchy","req","getAllKeys","paths","reject","onsuccess","result","onerror","basename","listDir","readdir","exists","removeFile","del","linked","unlink","_removeFile","removeDir","rmdir","init","Module","__TESTING__","backend","register_for_idb","mount","shutdown","bundledDatabasePath","migrationsPath","demoBudgetPath","getDataDir","getDocumentDir","_setDocumentDir","size","copyFile","frompath","topath","removeDirRecursively","dirpath","fullpath","attr","isDir","getModifiedTime","resolveName","globalSheet","globalOnChange","globalCacheDb","updateSpreadsheetCache","rawDb","names","forEach","_getNode","JSON","stringify","setCacheStatus","mainDb","cacheDb","clean","num","random","loadSpreadsheet","onSheetChange","sheet","cacheEnabled","Platform","isDesktop","cachePath","Spreadsheet","captureBreadcrumb","message","addEventListener","isCacheDirty","cachedRows","log","parsed","parse","load","loadUserBudgets","unloadSpreadsheet","unload","reloadSpreadsheet","budgetType","prefs","budgets","startTransaction","budget","sheetName","amount","carryover","budgetMonths","budgetMonth","buffered","endTransaction","getCell","getCellValue","getValue","waitOnSpreadsheet","onFinish","runningMethods","Set","currentContext","mutatingMethods","WeakMap","globalMutationsEnabled","_latestHandlerNames","mutator","handler","isMutating","has","wait","time","setTimeout","runHandler","args","undoTag","runMutator","values","flushRunningMethods","promise","add","delete","enableGlobalMutations","disableGlobalMutations","sequential","func","initialContext","finally","withMutatorContext","context","captureException","prevContext","getMutatorContext","PostError","SyncError","SYNCING_MODE","setSyncingMode","prevMode","checkSyncingMode","msg","prev","query","results","partIds","concat","serializeValue","deserializeValue","parseFloat","_syncListeners","addSyncListener","f","applyMessages","messages","old","applyMessagesForImport","newMessages","timestampStr","compareMessages","sort","m1","m2","t1","t2","idsPerTable","fetchData","data","Map","setIn","currentMerkle","prefsToSet","oldData","undo","getClock","merkle","startCacheBarrier","added","getIn","avoidSync","setBudgetType","newData","triggerBudgetChanges","triggerDatabaseChanges","endCacheBarrier","tables","getTablesFromMessages","app","events","emit","prevData","receiveMessages","recv","_sendMessages","reason","subtype","clearFullSyncTimeout","fullSync","error","syncTimeout","scheduleFullSync","IS_BATCHING","_BATCHED","batched","getMessagesSince","since","syncAndReceiveMessages","localMessages","clearTimeout","reduce","acc","includes","initialFullSync","once","_fullSync","sinceTimestamp","count","prevDiffTime","cloudFileId","lastSyncedTimestamp","currentTime","now","userToken","asyncStorage","getItem","logger","encoder","resBuffer","postBinary","getServer","SYNC_SERVER","localTimeChanged","receivedMessages","diffTime","rebuiltMerkle","rebuildMerkleHash","hash","numMessages","trie","clocks","meta","setItem","syncDisabled","loadPrefs","dummyTestPrefs","budgetName","savePrefs","assign","x","prefsPath","unloadPrefs","getPrefs","getDefaultPrefs","commit","trans","objectStore","put","removeItem","multiGet","multiSet","keyValues","multiRemove","base64","ieee754","isArray","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","arg","encodingOrOffset","this","allocUnsafe","from","array","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","string","isEncoding","actual","write","fromString","obj","isBuffer","len","checked","copy","val","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","b","bidirectionalIndexOf","arrayIndexOf","indexOf","lastIndexOf","indexSize","arrLength","valLength","read","buf","readUInt16BE","foundIndex","found","j","hexWrite","offset","remaining","strLen","substr","utf8Write","blitBuffer","asciiWrite","byteArray","charCodeAt","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","min","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","configurable","fill","allocUnsafeSlow","_isBuffer","compare","a","y","list","pos","swap16","swap32","swap64","equals","inspect","match","thisStart","thisEnd","thisCopy","targetCopy","isFinite","toJSON","Array","_arr","ret","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","code","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","stringtrim","base64clean","src","dst","ctor","superCtor","super_","constructor","writable","TempCtor","currencyFormatter","last","getChangedValues","obj1","obj2","diff","hasChanged","hasFieldsChanged","changed","field","applyChanges","changes","updated","idx","deleted","splice","partitionByField","groupBy","mapper","existing","_groupById","diffItems","newItems","grouped","newGrouped","newItem","fastSetMerge","set1","set2","finalSet","iter","done","numberFormat","formatter","currencyToAmount","separator","stringToInteger","amountToInteger","round","integerToAmount","toFixed","looselyParseAmount","safeNumber","v","index","left","right","locale","setNumberFormat","clock_","MutableTimestamp","config","maxDrift","millis","counter","_state","valueOf","toISOString","toUpperCase","murmurhash","v3","setMillis","setCounter","setNode","phys","lOld","cOld","lNew","cNew","ClockDriftError","OverflowError","lMsg","cMsg","zero","isoString","DuplicateNodeError","super","MESSAGE_HISTORY","CURSOR","appendMessages","undoListening","markers","cutoff","trimHistory","clearUndo","withUndo","undoDisabled","marker","undoable","applyUndoAction","entries","entry","toApply","oldItem","undoMessage","reverse","redo","resurrect","desc","redoResurrections","SQL","initSqlJS","locateFile","err","prepare","verifyParamTypes","stmt","step","getAsObject","free","reset","getRowsModified","exec","transactionDepth","after","ex","pathOrBuffer","Database","SharedArrayBuffer","stream","open","readIfFallback","close","filename","exportDatabase","export","copyProps","SafeBuffer","requiredFields","toDateRepr","fromDateRepr","dateString","validateAccountType","categoryGroup","validateType","transactionModel","toJS","isParent","isChild","starting_balance_flag","cleared","pending","fromJS","HTTPError","body","statusCode","responseBody","TransactionError","RuleError","APIError","FileDownloadError","FileUploadError","isCodeError","ReferenceError","SyntaxError","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","runClearTimeout","Item","noop","nextTick","title","browser","env","argv","version","versions","on","addListener","off","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","joinURL","base","URL","pathname","setServer","BASE_SERVER","SIGNUP_SERVER","PLAID_SERVER","allRules","unlistenSync","firstcharIndexer","payeeIndexer","internalFields","views","transactions","publicFields","fromEntries","fromInternalField","toInternalField","ruleModel","stage","parseArray","conditions","cond","actions","action","makeRule","Rule","fieldTypes","FIELD_TYPES","migrateIds","getMappings","loadRules","RuleIndexer","method","onApplySync","getRules","insertRule","updateRule","deleteRule","oldValues","newValues","newValue","oldRule","tombstone","getId","remove","find","runRules","finalTrans","rankRules","getApplicableRules","conditionsToAQL","recurDateBounds","errors","filters","Condition","op","outflow","$and","$lt","$transform","inflow","$gt","$or","schedule","occurrences","take","toArray","$gte","$lte","fullDate","high","threshold","getApproxNumberThreshold","sortNumbers","num1","num2","low","applyActions","transactionIds","handlers","parsedActions","Action","getRulesForPayee","payeeId","iterateIds","getIsSetterRules","condField","actionField","condValue","actionValue","serialize","updatePayeeRenameRule","fromNames","renameRule","getOneOfSetterRules","condition","getProbableCategory","scores","winner","score","updateCategoryRules","payeeIds","transIds","oldestDate","register","allTransactions","categoriesToSet","latestTrans","ruleSetters","newRule","migrateOldRules","allPayees","payeesById","rulesByPayeeId","payee_id","payeeRules","contains","payeeRule","catRules","catId","addLeadingZeros","targetLength","sign","output","abs","g","Function","window","exc","globalThis","SentryClient","breadcrumb","addBreadcrumb","Query","state","filterExpressions","selectExpressions","groupExpressions","orderExpressions","calculation","rawMode","withDead","validateRefs","expr","unfilter","exprs","exprSet","calculate","orderBy","raw","withoutValidatedRefs","tableOptions","q","queryState","sqlPieces","outputTypes","defaultConstructQuery","convertOutputType","applyTypes","runCompiledQuery","pieces","executors","paramArray","namedParameters","param","paramName","convertInputType","paramType","implicitTableName","_isUnhappy","splitType","splits","where","execTransactionsBasic","whereDead","isAggregateQuery","allSql","joins","matched","isHappyPathQuery","rowSql","whereIn","group_id","finalSql","pid","_parent_id","parents","children","parent","childs","subtransactions","toGroup","_unmatched","execTransactionsGrouped","_runCompiledQuery","schemaExecutors","compileQuery","dependencies","_runQuery","getTimezoneOffsetInMilliseconds","dirtyDate","baseTimezoneOffset","getTimezoneOffset","setSeconds","createApp","assert","test","CONDITION_TYPES","ops","nullable","fieldName","dateFns","frequency","recurConfigToRSchedule","RSchedule","rrules","parseRecurDate","between","parseBetweenAmount","boolean","typeName","rawValue","unparsedValue","eval","fieldValue","extractValue","fieldDate","occursBetween","occursOn","ACTION_OPS","evalConditions","every","execActions","getIndex","getIndexForValue","getKey","getIndexes","indexes","indexedRules","OP_SCORES","is","oneOf","isapprox","isbetween","gt","gte","lt","lte","_rankRules","initialScore","computeScore","r1","r2","score1","score2","id1","id2","pre","normal","post","ci","ai","ruleiter","vi","throwIfNot200","status","headers","json","description","isWeb","Key","password","salt","internals","secret","keyId","decrypt","encrypted","encrypt","randomBytes","createKey","createFromPassword","loadKey","keyInstance","createFromBase64","hasKey","unloadKey","unloadAllKeys","getSheetValue","cell","getBudgetTable","isReflectBudget","dbMonth","getBudgetData","getAllMonths","startMonth","createdMonths","latest","monthUtils","getBudget","setBudget","setBuffer","setCarryover","flag","copyPreviousMonth","budgetData","prevBudget","is_income","setZero","set3MonthAvg","prevMonth1","prevMonth2","prevMonth3","avg","setAllFuture","holdForNextMonth","toBudget","bufferedAmount","calcBufferedAmount","holdForFutureMonths","resetHold","coverOverspending","toBudgeted","leftover","leftoverFrom","amountCovered","fromBudgeted","transferAvailable","budgeted","transferCategory","setCategoryCarryover","is_parent","is_child","parent_id","ref","required","notes","imported_id","imported_payee","transfer_id","category_groups","schedules","next_date","completed","posts_transaction","_payee","_account","_amount","_amountOp","_date","_conditions","_actions","note","tableViews","isJoin","customizeQuery","tableName","orders","$condition","$dir","$nocase","v_payees","v_categories","v_schedules","v_transactions_internal","v_transactions_internal_alive","v_transactions","_","dayPeriodEnum","formatTimezoneShort","dirtyDelimiter","absOffset","hours","minutes","delimiter","formatTimezoneWithOptionalMinutes","formatTimezone","formatters","G","token","localize","era","getUTCFullYear","width","signedYear","ordinalNumber","unit","lightFormatters","Y","signedWeekYear","getUTCWeekYear","weekYear","twoDigitYear","R","isoWeekYear","getUTCISOWeekYear","u","Q","quarter","getUTCMonth","M","L","w","week","getUTCWeek","I","isoWeek","getUTCISOWeek","getUTCDate","D","dayOfYear","setUTCMonth","setUTCHours","startOfYearTimestamp","difference","getUTCDayOfYear","E","dayOfWeek","getUTCDay","localDayOfWeek","weekStartsOn","isoDayOfWeek","dayPeriodEnumValue","getUTCHours","dayPeriod","B","h","H","K","getUTCMinutes","getUTCSeconds","S","numberOfDigits","milliseconds","getUTCMilliseconds","fractionalSeconds","X","_localize","timezoneOffset","_originalDate","O","z","originalDate","T","dateLongFormatter","pattern","formatLong","timeLongFormatter","longFormatters","P","dateTimeFormat","matchResult","datePattern","timePattern","dateTime","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","dirtyFormatStr","dirtyOptions","formatStr","defaultLocale","localeFirstWeekContainsDate","firstWeekContainsDate","defaultFirstWeekContainsDate","localeWeekStartsOn","defaultWeekStartsOn","isValid","utcDate","subMilliseconds","formatterOptions","substring","firstCharacter","longFormatter","cleanEscapedString","awareOfUnicodeTokens","isProtectedToken","throwProtectedError","input","inherits","BN","endian","isBN","negative","words","red","_init","wordSize","parseHex4Bits","parseHexByte","lowerBound","parseBase","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","limbLen","limbPow","total","mod","word","imuln","_iaddn","dest","clone","_expand","_normSign","zeros","groupSizes","groupBases","smallMulTo","carry","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","toBuffer","toArrayLike","ArrayType","reqLength","andln","iushrn","clz32","_countBits","_zeroBits","bitLength","zeroBits","toTwos","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","ws","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","bhi","qj","div","divmod","positive","divn","umod","divRound","dm","half","egcd","A","C","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gten","ltn","lten","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","tmp","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","_strip","outLen","mod3","one","nOne","lpow","inv","wnd","current","currentLen","mont","compareAsc","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","AdmZip","checkHTTPStatus","fetchJSON","checkKey","encryptKeyId","fileId","valid","encryption","resetSyncState","newKeyState","keySalt","testContent","exportBuffer","budgetDir","zipped","rawDbContent","memDb","dbContent","resetClock","metaContent","addFile","upload","zipContent","uploadContent","uploadMeta","isMissingKey","encodeURIComponent","lastUploaded","possiblyUpload","catch","listRemoteFiles","download","ab","fileData","encryptMeta","getEntries","dbEntry","entryName","metaEntry","dbFile","metaFile","amountInflow","amountOutfow","models","toExternal","fromExternal","acct","account_id","imported_description","category_id","financial_id","transferred_id","makeSplitTransaction","recalculateSplit","makeChildTransaction","getAccountBalance","balances","userId","userKey","item_id","fromPlaid","transaction_id","payee_name","downloadTransactions","acctId","bankId","accountBalance","numDownloaded","start_date","end_date","error_code","error_type","total_transactions","resolvePayee","payeeName","payeesToCreate","newPayee","normalizeTransactions","rawPayeeName","normalized","trimmed","createNewPayees","addsAndUpdates","usedPayeeIds","reconcileTransactions","hasMatched","transactionsStep1","fuzzyDataset","transactionsStep3","finalTransaction","batchUpdateTransactions","addTransactions","runTransfers","newTransactions","syncAccount","latestTransaction","startingTransaction","startingDate","balance","updateAccountBalance","acctRow","startingDay","parseISO","currentBalance","balance_current","previousBalance","getStartingBalancePayee","initialId","getStatus","nextDate","hasTrans","today","getHasTransactionsQuery","dateCond","byHourOfDay","interval","abbrevDay","patterns","days","dayNames","byDayOfMonth","byDayOfWeek","extractScheduleConds","getScheduledAmount","v4","isMobile","equal","utils","minAssert","minUtils","zero2","encode","getNAF","naf","getJSF","k1","k2","jsf","m8","d1","d2","u1","u2","m14","m24","cachedProperty","computer","parseBytes","intFromLE","differenceInCalendarDays","startOfDayLeft","startOfDay","startOfDayRight","timestampLeft","timestampRight","dirtyAmount","setDate","getDate","normalizeArray","allowAboveRoot","up","unshift","xs","resolvedPath","resolvedAbsolute","charAt","normalize","isAbsolute","trailingSlash","relative","fromParts","toParts","samePartsLength","outputParts","sep","dirname","hasRoot","matchedSlash","extname","startDot","startPart","preDotState","unresolveName","resolveNamesAsObjects","sheets","cells","resolveNamesAsArrays","addMilliseconds","startOfUTCWeek","setUTCDate","getGlobalObject","__globalServerChannel","postMessage","serverChannel","catchErrors","mutated","nativeError","coerceError","getNumClients","tapIntoAPI","isSurrogatePair","htonl","zero8","enc","toHex32","join32","split32","rotr32","rotl32","sum32","sum32_3","sum32_4","sum32_5","sum64","ah","al","bh","sum64_hi","bl","sum64_lo","sum64_4_hi","ch","cl","dh","dl","sum64_4_lo","sum64_5_hi","eh","el","sum64_5_lo","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","GetIntrinsic","callBind","$indexOf","allowMissing","intrinsic","App","services","mitt","unlistenServices","service","combine","apps","listener","startServices","stopServices","unlisten","desiredMonth","dateWithDesiredMonth","setFullYear","getFullYear","setHours","daysInMonth","getDaysInMonth","setMonth","_uid","uid","CompileError","dateToInt","addTombstone","tableId","whereStr","popPath","quoteAlias","alias","typed","literal","makePath","joinTable","initialTable","parentParts","parentPath","parentDesc","joinField","resolvePath","fullName","transformField","pathInfo","implicitTableId","fieldDesc","getFieldDescription","refPath","refPathInfo","noMapping","parseMonth","badDateFormat","castInput","existingType","casts","float","inferParam","expr2","parseYear","castedExpr","valArray","types","validateArgLength","saveStack","compileStack","prettyValue","compileLiteral","pad","nativeDateToInt","compileExpr","fieldRef","implicitField","compileFunction","argExprs","compileOrderBy","compileConditions","compileOp","opData","lhs","opExpr","rhs","conds","condsObj","compiled","compileAnd","compileOr","$eq","compileWhere","compileSelect","isAggregate","expandStar","compileGroupBy","AGGREGATE_FUNCTIONS","isAggregateFunction","tableFilters","internalTableFilters","tableRef","compileJoins","stackStr","rootMethod","methodArgs","getCompileError","formatDistanceLocale","lessThanXSeconds","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","buildFormatLongFn","defaultWidth","formats","full","long","medium","short","formatRelativeLocale","lastWeek","yesterday","tomorrow","nextWeek","buildLocalizeFn","dirtyIndex","formattingValues","defaultFormattingWidth","argumentCallback","buildMatchFn","dirtyString","matchPattern","matchPatterns","defaultMatchWidth","matchedString","parsePatterns","defaultParseWidth","predicate","findKey","valueCallback","rest","formatDistance","addSuffix","comparison","formatRelative","baseDate","rem100","narrow","abbreviated","wide","am","pm","midnight","noon","morning","afternoon","evening","night","parsePattern","parseResult","any","startOfUTCISOWeek","sumAmounts","amounts","getBlankSheet","blankMonth","createBlankCategory","createStatic","createBudget","blankSheet","clearSheet","createBlankMonth","getBudgetType","createCategory","prevSheetName","createDynamic","initialValue","spent","prevCarryover","prevLeftover","prevLeftoverPos","rollover","sumAmount","refresh","report","createCategoryGroup","handleTransactionChange","changedFields","recompute","handleCategoryGroupChange","oldValue","removeDependencies","removeDeps","addDependencies","addDeps","handleBudgetMonthChange","handleBudgetChange","handleCategoryMappingChange","handleCategoryChange","handleAccountChange","doTransfer","categoryIds","totalValue","budgetActions","transferValue","incomeGroup","expenseCategories","income","fromLastMonth","unflatten2","available","lastOverspent","totalBudgeted","setMeta","createAllBudgets","earliestTransaction","earliestDate","getBudgetRange","setType","nodes","getNodes","cellName","deleteCell","ReflectOwnKeys","Reflect","ReflectApply","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","EventEmitter","emitter","errorListener","resolver","eventTargetAgnosticAddListener","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","warning","newListener","warned","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","wrapListener","removeEventListener","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","position","originalListener","spliceOne","rawListeners","eventNames","addHours","startOfWeek","getDay","startOfISOWeek","getISOWeekYear","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfISOWeekYear","fourthOfJanuary","setISOWeekYear","dirtyISOWeekYear","addISOWeekYears","addMinutes","addQuarters","addSeconds","areIntervalsOverlapping","dirtyIntervalLeft","dirtyIntervalRight","intervalLeft","intervalRight","leftStartTime","leftEndTime","rightStartTime","rightEndTime","closestIndexTo","dirtyDateToCompare","dirtyDatesArray","dateToCompare","minDistance","timeToCompare","currentDate","distance","closestTo","compareDesc","differenceInCalendarISOWeekYears","differenceInCalendarISOWeeks","startOfISOWeekLeft","startOfISOWeekRight","differenceInCalendarMonths","yearDiff","monthDiff","getQuarter","differenceInCalendarQuarters","quarterDiff","differenceInCalendarWeeks","startOfWeekLeft","startOfWeekRight","differenceInCalendarYears","differenceInMilliseconds","differenceInHours","subISOWeekYears","differenceInISOWeekYears","isLastISOWeekYearNotFull","differenceInMinutes","differenceInMonths","isLastMonthNotFull","differenceInQuarters","differenceInSeconds","differenceInWeeks","differenceInDays","differenceInYears","isLastYearNotFull","eachDayOfInterval","dirtyInterval","endTime","dates","eachWeekOfInterval","startDateWeek","endDateWeek","weeks","currentWeek","addWeeks","isSunday","isWeekend","eachWeekendOfInterval","dateInterval","weekends","eachWeekendOfMonth","startOfMonth","endOfMonth","startOfYear","cleanDate","endOfYear","eachWeekendOfYear","endOfDay","endOfDecade","decade","endOfHour","setMinutes","endOfWeek","endOfISOWeek","endOfISOWeekYear","setMilliseconds","getMilliseconds","endOfMinute","endOfQuarter","endOfSecond","dirtyObject","cloneObject","dirtyBaseDate","localizeOptions","seconds","offsetInSeconds","includeSeconds","nearestMonth","monthsSinceStartOfYear","years","formatDistanceStrict","roundingMethodFn","roundingMethod","utcBaseDate","fromUnixTime","dirtyUnixTime","unixTime","getDayOfYear","isLeapYear","getDaysInYear","getDecade","getHours","getISODay","getISOWeek","getISOWeeksInYear","thisYear","nextYear","getMinutes","getOverlappingDaysInIntervals","isOverlapping","overlapStartDate","overlapEndDate","differenceInMs","getSeconds","getUnixTime","getWeekYear","firstWeekOfNextYear","firstWeekOfThisYear","startOfWeekYear","firstWeek","getWeek","getWeekOfMonth","startWeekDay","currentWeekDay","startWeekDayWithOptions","lastDayOfMonth","getWeeksInMonth","getYear","isDate","isEqual","dirtyLeftDate","dirtyRightDate","isFirstDayOfMonth","isFriday","isLastDayOfMonth","isMonday","isSameDay","dateLeftStartOfDay","dateRightStartOfDay","startOfHour","isSameHour","dateLeftStartOfHour","dateRightStartOfHour","isSameWeek","dateLeftStartOfWeek","dateRightStartOfWeek","isSameISOWeek","isSameISOWeekYear","dateLeftStartOfYear","dateRightStartOfYear","startOfMinute","isSameMinute","dateLeftStartOfMinute","dateRightStartOfMinute","isSameMonth","startOfQuarter","isSameQuarter","dateLeftStartOfQuarter","dateRightStartOfQuarter","startOfSecond","isSameSecond","dateLeftStartOfSecond","dateRightStartOfSecond","isSameYear","isSaturday","isThursday","isTuesday","isWednesday","isWithinInterval","startTime","lastDayOfDecade","lastDayOfWeek","lastDayOfISOWeek","lastDayOfISOWeekYear","lastDayOfQuarter","lastDayOfYear","lightFormat","setUTCDay","dirtyDay","remainder","dayIndex","numericPatterns","timezonePatterns","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","enumValue","normalizeTwoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYearIndex","parsers","priority","setUTCFullYear","isTwoDigitYear","normalizedTwoDigitYear","firstWeekOfYear","dirtyWeek","setUTCWeek","dirtyISOWeek","setUTCISOWeek","wholeWeekDays","setUTCISODay","isPM","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","timestampIsSet","notWhitespaceRegExp","dirtyDateString","dirtyFormatString","formatString","subFnOptions","setters","dateToSystemTimezone","tokens","parser","uniquePrioritySetters","setter","setterArray","convertedDate","roundToNearestMinutes","nearestTo","roundedMinutes","remainderMinutes","addedMinutes","dirtyDayOfMonth","dayOfMonth","setDay","setDayOfYear","dirtyDayOfYear","dirtyHours","setISODay","setISOWeek","dirtyMilliseconds","dirtyMinutes","dirtyMonth","setQuarter","dirtyQuarter","oldQuarter","dirtySeconds","setWeek","setWeekYear","dirtyWeekYear","setYear","dirtyYear","startOfDecade","subHours","subMinutes","subQuarters","subSeconds","isRequired","conform","skipNull","tableSchema","rawObj","getTransactionsByIds","incrFetch","learnCategories","detectOrphanPayees","addedIds","updatedIds","deletedIds","whereIds","idsWithChildren","oldPayees","descUpdatedIds","resultUpdated","allAdded","allUpdated","allDeleted","resultAdded","transfer","newPayeeIds","allOrphaned","orphanedIds","updatedPayeeIds","StringDecoder","nb","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","Transform","CipherBase","hashMode","_finalOrDigest","final","_final","__final","_decoder","_encoding","inputEnc","outputEnc","outData","_update","_toString","setAutoPadding","getAuthTag","setAuthTag","setAAD","_transform","_flush","fin","hasSymbols","getKeys","keyToTimestamp","fullkey","repeat","insertKey","build","timestamps","trie1","trie2","node1","node2","diffkey","next1","next2","prune","debug","indent","browserAlgorithmName","sha256String","inputBuffer","TextEncoder","crypto","subtle","digest","outputStr","btoa","getRandomValues","masterKey","iv","tagLength","authTag","algorithm","decrypted","passwordBuffer","saltBuffer","passwordKey","importKey","derivedKey","deriveKey","iterations","exported","exportKey","SplitTransactionError","makeChild","prefix","ungroupTransactions","groupTransaction","ungroupTransaction","replaceTransactions","transactionsCopy","parentIndex","findParentIndex","curr","getSplit","newSplit","_deleted","newTransaction","newTrans","child","simpleIsEqual","resultFn","lastThis","lastResult","lastArgs","calledOnce","isNewArgEqualToLast","newArg","_len","newArgs","_key","pna","objectKeys","Duplex","util","Readable","Writable","readable","allowHalfOpen","onend","_writableState","ended","onEndNT","highWaterMark","_readableState","destroyed","_destroy","cb","$SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","$gOPD","getOwnPropertyDescriptor","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","getProto","needsEval","TypedArray","INTRINSICS","AggregateError","iterator","Atomics","BigInt","DataView","decodeURI","decodeURIComponent","encodeURI","EvalError","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","Proxy","Uint8ClampedArray","Uint32Array","URIError","WeakRef","WeakSet","LEGACY_ALIASES","hasOwn","$concat","$spliceApply","$replace","$strSlice","rePropName","reEscapeChar","stringToPath","quote","subString","getBaseIntrinsic","intrinsicName","doEval","gen","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","toStr","origDefineProperty","supportsDescriptors","arePropertyDescriptorsSupported","defineProperties","predicates","props","__assign","Stats_1","Dirent_1","volume_1","_a","fsSyncMethods","fsAsyncMethods","constants_1","F_OK","constants","R_OK","W_OK","X_OK","createFsFromVolume","vol","Stats","Dirent","_i","fsSyncMethods_1","fsAsyncMethods_1","StatWatcher","FSWatcher","WriteStream","ReadStream","_toUnixTimestamp","toUnixTimestamp","Volume","semantic","msCrypto","generated","codes","createErrorType","Base","NodeError","_Base","subClass","superClass","arg1","arg3","getMessage","expected","thing","determiner","search","this_len","getBuffer","Hash","blockSize","finalSize","_block","_finalSize","_blockSize","block","accum","assigned","rem","lowBits","highBits","_hash","monthIndex","sequenceState","running","pump","InvalidDateAdapterError","dateAdapterConfig","DateAdapterBase","duration","generators","isInteger","_object","unimplementedError","_options","_json","_datetime","toDateTime","DateTime","fromJSON","DateAdapter","hasTimezoneSupport","WEEKDAYS","MILLISECONDS_IN_SECOND","MILLISECONDS_IN_MINUTE","MILLISECONDS_IN_HOUR","MILLISECONDS_IN_DAY","MILLISECONDS_IN_WEEK","InvalidDateTimeError","timezone","assertIsValid","UTC","hour","minute","second","millisecond","adapter","_end","assertSameTimeZone","isBeforeOrEqual","isAfterOrEqual","isOccurring","forkDateTime","addUTCYears","addUTCMonths","addUTCWeeks","addUTCDays","addUTCHours","addUTCMinutes","addUTCSeconds","addUTCMilliseconds","subtract","subUTCYears","subUTCMonths","subUTCWeeks","subUTCDays","subUTCHours","subUTCMinutes","subUTCSeconds","subUTCMilliseconds","getUTCYearDay","monthLength","granularity","opt","wkst","orderedWeekdays","setDateToStartOfWeek","weekStart","endGranularity","setDateToEndOfWeek","dateTimeSortComparer","uniqDateTimes","wkdays","shiftArray","getDifferenceBetweenWeekdays","1","2","getDaysInFebruary","3","4","5","6","7","8","9","10","11","12","int","ArgumentError","InfiniteLoopError","numberSortComparer","cloneJSON","dateInputToDateTime","fromDateTime","fromDate","normalizeDateTimeTimezone","RuleOptionError","normalizeRuleOptions","recurrenceModules","normOptions","normalizeDefaultOptions","startOptions","normalizeOptions","cloneRuleOptions","RecurrenceRuleError","ValidDateTime","InvalidDateTime","RecurrenceRulesIterator","recurrenceRules","iterate","iterateWithReverseCount","iterateWithCount","normalizeDateTimeArgs","isInfinite","hasDuration","yieldArgs","dateCache","skipToDate","iterable","normalizeRunOutput","isDatePastEnd","OccurrenceGenerator","maxDuration","_firstDate","_run","dateAdapter","_lastDate","pipe","operators","OccurrenceIterator","normalizeOccurrencesArgs","collections","CollectionIterator","normalizeCollectionsArgs","startInput","endInput","normalizeDateInput","excludeEnds","getMaxDuration","rawArgs","normalizeOccursOnArgs","weekday","occursAfter","excludeStart","occursBefore","DateAdapterBase$1","excludeDates","normalizeRunArgs","normalizeDateInputToAdapter","dateInputToDateAdapter","normalizeDateTimeTimezone$1","occurrenceIterator","normalizeDateOutput","Collection","periodStart","periodEnd","getPeriod","collectionIterator","collection","period","skipEmptyPeriods","incrementPeriod","Operator","streams","calculateIsInfinite","calculateHasDuration","IterableWrapper","generator","runArgs","processYieldArgs","streamsComparer","streamsReverseComparer","selectNextIterable","AddOperator","wrappedStreams","some","streamsDuration","Dates","adapters","datetimes","prop","keepLocalTime","RuleBase","tzoptions","DateTime$1","ScheduleBase","occurrenceStream","SubtractOperator","inclusion","exclusion","cycleStreams","iterateExclusion","UniqueOperator","lastValue","Schedule","exrules","ruleArgs","rdates","exdates","RecurrenceRule","processor","FrequencyRule","initDate","intervalUnit","freq","freqToGranularity","firstIntervalStartDate","normalizedStartDate","intervalStartDate","intervalEndDate","normalizedEndDate","skipToInterval","validateDate","dateIsWithinInterval","setToCurrentInterval","intervalDifference","intervalDifferenceBetweenDates","direction","intervalDuration","RevFrequencyRule","FREQUENCIES","FrequencyRuleModule","byMillisecondOfSecond","norm","deps","ruleOptionFilled","option","freqCache","RecurrenceRuleBase","RevRecurrenceRuleBase","RevByTimeOfUnitRule","baseGranularity","RevByMillisecondOfSecondRule","ByTimeOfUnitRule","ByMillisecondOfSecondRule","ByMillisecondOfSecondRuleModule","RevBySecondOfMinuteRule","bySecondOfMinute","BySecondOfMinuteRule","BySecondOfMinuteRuleModule","RevByMinuteOfHourRule","byMinuteOfHour","ByMinuteOfHourRule","ByMinuteOfHourRuleModule","RevByHourOfDayRule","ByHourOfDayRule","ByHourOfDayRuleModule","getNextWeekday","getNthWeekdayOfMonth","nth","ByDayOfMonthRule","normalizedByDayOfMonth","normalizeByDayOfMonth","nextMonth","lengthOfMonth","filteredByDayOfMonth","nthWeekdayOfMonth","RevByDayOfMonthRule","ByDayOfMonthRuleModule","byDayOfYear","getNthWeekdayOfYear","getPreviousWeekday","RevByDayOfWeekRule","byMonthOfYear","expandYearly","expandMonthly","expand","getPrevWeekdaysOfYear","getPrevWeekdaysOfMonth","ByDayOfWeekRule","getNextWeekdaysOfYear","getNextWeekdaysOfMonth","ByDayOfWeekRuleModule","invalidWeeday","RevByMonthOfYearRule","ByMonthOfYearRule","ByMonthOfYearRuleModule","ICAL_RULES","StandardDateAdapter","datetime","ParseJSONError","SerializeJSONError","serializeDataToJSON","registerJSONSerializerFn","JSON_FN_MAP","nested","protectedTokens","serviceInterval","getBackups","backupDir","backups","mtime","getAvailableBackups","latestBackup","isLatest","getLatestBackup","backup","makeBackup","backupId","backupPath","toRemove","byDay","removed","dayBackups","isToday","currentBackups","updateBackups","loadBackup","stopBackupService","startBackupService","cloudStorage","clearInterval","setInterval","currentUniqueId","mixpanel","Mixpanel","isEnabled","toggle","trackUsage","isAnonymous","distinctId","hashedId","setProfile","$name","BUFFERING","BUFFER","track","distinct_id","webpackPolyfill","deprecate","O_RDONLY","O_WRONLY","O_RDWR","S_IFMT","S_IFREG","S_IFDIR","S_IFCHR","S_IFBLK","S_IFIFO","S_IFLNK","S_IFSOCK","O_CREAT","O_EXCL","O_NOCTTY","O_TRUNC","O_APPEND","O_DIRECTORY","O_NOATIME","O_NOFOLLOW","O_SYNC","O_DIRECT","O_NONBLOCK","S_IRWXU","S_IRUSR","S_IWUSR","S_IXUSR","S_IRWXG","S_IRGRP","S_IWGRP","S_IXGRP","S_IRWXO","S_IROTH","S_IWOTH","S_IXOTH","UV_FS_SYMLINK_DIR","UV_FS_SYMLINK_JUNCTION","UV_FS_COPYFILE_EXCL","UV_FS_COPYFILE_FICLONE","UV_FS_COPYFILE_FICLONE_FORCE","COPYFILE_EXCL","COPYFILE_FICLONE","COPYFILE_FICLONE_FORCE","Stream","EE","PassThrough","source","ondata","chunk","pause","ondrain","resume","_isStdio","onclose","didOnEnd","destroy","cleanup","objectToString","isBoolean","isNull","isNullOrUndefined","isNumber","isString","isSymbol","isUndefined","isRegExp","isObject","isError","isFunction","isPrimitive","MD5","RIPEMD160","sha","alg","BlockHash","pendingTotal","outSize","hmacStrength","padLength","_delta8","_delta32","_pad","_digest","Reporter","DecoderBuffer","EncoderBuffer","reporter","isEncoderBuffer","isDecoderBuffer","save","restore","isEmpty","skip","fail","_reporterState","FileSystem","Constants","Errors","FileAttr","terms","makeQuery","fetchedIds","dateTimeDelimiter","timeZoneDelimiter","dateRegex","timeRegex","timezoneRegex","additionalDigits","dateStrings","splitDateString","parseYearResult","restDateString","parseTime","parseTimezone","fullTime","fullTimeDate","fullTimeDateNextDay","offsetDiff","timeString","captures","century","isWeekDate","parseDateUnit","_year","validateWeekDate","fourthOfJanuaryDay","dayOfISOWeekYear","daysInMonths","validateDayOfYearDate","parseTimeUnit","validateTime","timezoneString","_hours","validateTimezone","allMappings","loadMappings","getTransferredAccount","clearCategory","transferAcct","addTransfer","transferredAccount","fromPayee","categoryCleared","removeTransfer","updateTransfer","onInsert","onDelete","onUpdate","getOwnPropertyDescriptors","descriptors","formatRegExp","objects","noDeprecation","throwDeprecation","traceDeprecation","trace","debugEnviron","debugs","seen","stylize","stylizeNoColor","depth","colors","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","primitive","simple","formatPrimitive","visibleKeys","arrayToHash","formatError","braces","toUTCString","formatProperty","formatArray","cur","numLinesEst","reduceToSingleString","line","ar","debuglog","NODE_DEBUG","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","promisify","original","promiseResolve","promiseReject","setPrototypeOf","custom","callbackify","callbackified","maybeCb","rej","scope","Timeout","clearFn","_id","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","setImmediate","clearImmediate","asUInt32Array","scrubVec","cryptBlock","keySchedule","SUB_MIX","SBOX","nRounds","t0","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_reset","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","decryptBlock","scrub","keyBits","ivLen","keyLen","used","keyStart","ivStart","BaseCurve","conf","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","curve","precomputed","point","_fixedNafMul","doubles","_getDoubles","nafW","repr","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","ja","jb","decodePoint","pointFromX","encodeCompressed","_encode","compact","getX","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","asn1","aesid","fixProc","ciphers","compat","parseKeys","passphrase","ndata","stripped","tag","certificate","decode","tbsCertificate","subjectPublicKeyInfo","PublicKey","RSAPublicKey","subjectPublicKey","subjectPrivateKey","pub_key","DSAparam","kde","kdeparams","iters","algo","cipher","cipherText","keylen","pbkdf2Sync","createDecipheriv","EncryptedPrivateKey","PrivateKey","RSAPrivateKey","privateKey","ECPrivateKey","priv_key","DSAPrivateKey","parameters","signature","v1","ok","kRangeErrorMessage","Z_MIN_WINDOWBITS","Z_MAX_WINDOWBITS","Z_DEFAULT_WINDOWBITS","Z_MIN_CHUNK","Z_MAX_CHUNK","Z_DEFAULT_CHUNK","Z_MIN_MEMLEVEL","Z_MAX_MEMLEVEL","Z_DEFAULT_MEMLEVEL","Z_MIN_LEVEL","Z_MAX_LEVEL","Z_DEFAULT_LEVEL","Z_DEFAULT_COMPRESSION","bkeys","bk","bkey","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_VERSION_ERROR","ckeys","ck","ckey","zlibBuffer","engine","callback","buffers","nread","flow","onEnd","zlibBufferSync","flushFlag","_finishFlushFlag","_processChunk","Deflate","Zlib","DEFLATE","Inflate","INFLATE","Gzip","GZIP","Gunzip","GUNZIP","DeflateRaw","DEFLATERAW","InflateRaw","INFLATERAW","Unzip","UNZIP","isValidFlushFlag","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","_this","_opts","_chunkSize","chunkSize","flush","finishFlush","_flushFlag","windowBits","level","memLevel","strategy","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","dictionary","_handle","_hadError","errno","_close","_buffer","_offset","_level","_strategy","emitCloseNT","freeze","createDeflate","createInflate","createDeflateRaw","createInflateRaw","createGzip","createGunzip","createUnzip","deflate","deflateSync","gzip","gzipSync","deflateRaw","deflateRawSync","unzip","unzipSync","inflate","inflateSync","gunzip","gunzipSync","inflateRaw","inflateRawSync","kind","_this2","ending","needDrain","availInBefore","availOutBefore","inOff","writeSync","availInAfter","availOutAfter","have","newReq","TYPED_OK","_has","sources","shrinkBuf","fnTyped","arraySet","src_offs","dest_offs","flattenChunks","chunks","fnUntyped","setTyped","Buf8","Buf16","Buf32","sym","symObj","syms","propertyIsEnumerable","descriptor","$apply","$call","$reflectApply","$defineProperty","$max","originalFunction","applyBind","firstValue","repairSync","rebuilt","addYears","isLastDayNotFull","evt","fetchBinary","fromPlaidAccountType","createPayee","startOfUTCWeekYear","startOfUTCISOWeekYear","handoffPublicToken","institution","publicToken","institution_id","public_token","bank_id","addAccounts","accountIds","offbudgetIds","bankSync","official_name","bank","getBigInt_1","bigint","stats","gid","atime","ctime","getStatNumber","rdev","blksize","ino","getSize","blocks","birthtime","atimeMs","mtimeMs","ctimeMs","birthtimeMs","dev","nlink","_checkModeProperty","isDirectory","isFile","isBlockDevice","isCharacterDevice","isSymbolicLink","isFIFO","isSocket","__spreadArrays","il","jl","buffer_1","bufferV0P12Ponyfill","arg0","bufferAllocUnsafe","bufferFrom","objectAssign","pSlice","functionsHaveNames","pToString","arrbuf","getName","truncate","something","rawname","operator","stackStartFunction","AssertionError","_deepEqual","strict","memos","multiline","lastIndex","ignoreCase","actualIndex","actualVisitedObjects","aIsArgs","isArguments","bIsArgs","ka","kb","objEquiv","expectedException","isPrototypeOf","_throws","shouldThrow","_tryBlock","userProvidedMessage","isUnexpectedException","generatedMessage","captureStackTrace","fn_name","next_line","notEqual","deepEqual","deepStrictEqual","notDeepEqual","notDeepStrictEqual","strictEqual","notStrictEqual","throws","doesNotThrow","ifError","CorkedRequest","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","WritableState","internalUtil","OurUint8Array","realHasInstance","destroyImpl","nop","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","finished","noDecode","decodeStrings","defaultEncoding","writing","corked","sync","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","hasInstance","_uint8ArrayToBuffer","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","localStorage","HashBase","ARRAY16","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","_blockOffset","_length","ERR_STREAM_PREMATURE_CLOSE","eos","called","onlegacyfinish","onfinish","writableEnded","readableEnded","endEmitted","onrequest","setHeader","abort","isRequest","zl","zr","sl","sr","hl","hr","_e","fn1","fn2","fn3","fn4","fn5","br","cr","dr","tl","tr","Algorithm","sha1","sha224","sha256","sha384","sha512","Cipher","bufferOff","_updateDecrypt","_updateEncrypt","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_unpad","deciphers","modes","createCipher","createCipheriv","Cipheriv","createDecipher","Decipher","Decipheriv","listCiphers","getCiphers","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","Rand","rand","generate","_rand","getBytes","getByte","getr","priv","modulus","prime1","prime2","crt","blinds","blinder","publicExponent","unblinder","blind","blinded","c1","c2","qinv","coefficient","exponent1","exponent2","elliptic","curves","ec","eddsa","PresetCurve","edwards","isInfinity","defineCurve","lambda","basis","common","ripemd","hmac","ripemd160","safer","Safer","kStringMaxLength","MAX_LENGTH","MAX_STRING_LENGTH","tags","methods","Node","_baseState","reverseArgs","choice","optional","use","useDecoder","explicit","implicit","_wrap","stateProps","cstate","_useArgs","def","newKey","_decode","wrapResult","prevObj","present","prevKey","enterKey","_peekTag","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","_getUse","leaveObject","exitKey","leaveKey","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","entity","_use","_createEncoderBuffer","_encodeValue","_skipDefault","content","_encodeChoice","_encodePrimitive","cls","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","_isPrintstr","ReporterError","rethrow","pathLen","inherited","elem","partial","tagClass","0","tagClassByName","tagByName","jspb","goog","exportSymbol","proto","EncryptedData","opt_data","Message","initialize","DEBUG","COMPILED","displayName","MessageEnvelope","SyncRequest","repeatedFields_","SyncResponse","GENERATE_TO_OBJECT","toObject","opt_includeInstance","includeInstance","getIv_asB64","authtag","getAuthtag_asB64","getData_asB64","$jspbMessageInstance","deserializeBinary","reader","BinaryReader","deserializeBinaryFromReader","nextField","isEndGroup","getFieldNumber","readBytes","setIv","setAuthtag","setData","skipField","serializeBinary","writer","BinaryWriter","serializeBinaryToWriter","getResultBuffer","getIv_asU8","writeBytes","getAuthtag_asU8","getData_asU8","getIv","getFieldWithDefault","bytesAsB64","bytesAsU8","setProto3BytesField","getAuthtag","getData","readString","setDataset","setRow","setColumn","setValue","getDataset","writeString","getRow","getColumn","setProto3StringField","isencrypted","getBooleanFieldWithDefault","getContent_asB64","setTimestamp","readBool","setIsencrypted","setContent","getTimestamp","getIsencrypted","writeBool","getContent_asU8","setProto3BooleanField","getContent","messagesList","toObjectList","getMessagesList","fileid","groupid","keyid","readMessage","addMessages","setFileid","setGroupid","setKeyid","setSince","writeRepeatedMessage","getFileid","getGroupid","getKeyid","getSince","getRepeatedWrapperField","setMessagesList","setRepeatedWrapperField","opt_value","opt_index","addToRepeatedWrapperField","clearMessagesList","setMerkle","getMerkle","extend","originalFs","isArgs","origKeys","keysShim","originalKeys","shim","origSymbol","hasSymbolSham","implementation","MIGRATIONS_DIR","javascriptMigrations","1632571489012","cachedValue","monthBudget","dbmonth","parseNote","getMigrationId","applyMigration","migrationsDir","dbInterface","applyJavaScript","applySql","migrate","appliedIds","getAppliedMigrations","getMigrationList","checkDatabaseValidity","getPending","migration","selectFields","as","needsAs","updateViews","viewStrs","fieldMappings","viewName","publicMaker","overrides","internalMaker","makeViews","currentHash","md5","updateVersion","migrations","runMigrations","Yallist","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","doUse","hit","isStale","unshiftNode","maxAge","walker","tail","removeNode","Entry","forEachStep","thisp","lc","stale","dispose","noDisposeOnSet","updateAgeOnGet","mL","allowStale","mA","lC","rforEach","head","dump","dumpLru","peek","expiresAt","Graph","saveCache","graph","dirtyCells","computeQueue","_meta","getNode","hasCell","getEdges","queueComputation","topologicalSort","cellNames","runComputations","_dependencies","dep","markCacheSafe","cacheBarrier","markCacheDirty","clear","getExpr","getCellExpr","getCellValueLoose","bootup","onReady","_markDirty","recomputeAll","createQuery","dynamic","resolved","removeIncomingEdges","addEdge","voidCell","voidValue","newDeps","removeEdge","SyncPb","coerceBuffer","requestPb","envelopePb","messagePb","binaryMsg","responsePb","binary","uniqueFileName","existingFiles","newName","idFromFileName","exportToCSV","categoryGroups","accountNamesById","reduced","categoryNamesById","subCategories","subCategory","payeeNamesById","transactionsForExport","Account","Payee","Notes","Category","Amount","csvStringify","header","exportQueryToCSV","aqlQuery","Id","ParentId","IsParent","parentsPayees","records","onData","record","stringifier","Stringifier","isRegex","whichBoxedPrimitive","callBound","whichCollection","getIterator","getSideChannel","whichTypedArray","$getTime","gPO","$objToString","$Set","$mapHas","$mapGet","$mapSize","$setAdd","$setDelete","$setHas","$setSize","setHasEqualElement","val1","channel","internalDeepEqual","findLooseMatchingPrimitives","prim","mapMightHaveLoosePrim","altValue","curB","looseOpts","setMightHaveLoosePrim","mapHasEqualEntry","key1","item1","key2","sentinel","hasActual","hasExpected","aIsArray","bIsArray","aIsError","bIsError","aIsRegex","bIsRegex","aIsDate","bIsDate","aIsBuffer","bIsBuffer","aCollection","bCollection","resultA","resultB","iA","iB","setEquiv","item2","mapEquiv","openedDb","_openDatabase","openRequest","indexedDB","onupgradeneeded","objectStoreNames","deleteObjectStore","keyPath","createObjectStore","onblocked","event","onversionchange","encoding_1","dirent","strToEncoding","ENCODING_UTF8","assertEncoding","extendStatics","__extends","__","kCode","makeNodeError","_super","fmt","isWriting","servers","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","symbols","createProcess","maybeReturnProcess","getuid","getgid","emitWarning","_setImmediate","ReadableState","EElistenerCount","debugUtil","BufferList","kProxyEvents","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","reading","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","addChunk","maybeReadMore","needMoreData","isPaused","setEncoding","howMuchToRead","computeNewHighWaterMark","emitReadable_","maybeReadMore_","nReadingNextTick","resume_","fromList","hasStrings","copyFromBufferString","copyFromBuffer","fromListPartial","endReadable","endReadableNT","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","cleanedUp","pipeOnDrain","increasedAwaitDrain","dests","ev","wrap","paused","_fromList","emitErrorNT","readableDestroyed","writableDestroyed","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","err2","rng","pseudoRandomBytes","prng","createHash","createHmac","Hmac","algos","algoKeys","hashes","getHashes","pbkdf2","aes","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createSign","Sign","createVerify","Verify","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","_finalized","throwIfNotStringOrBuffer","createReadableStreamAsyncIterator","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","emitClose","autoDestroy","updateReadableListening","consume","wState","asyncIterator","emitErrorAndCloseNT","rState","ERR_INVALID_OPT_VALUE","duplexKey","highWaterMarkFrom","ERR_MULTIPLE_CALLBACK","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","W","Sha256","_w","maj","sigma0","sigma1","gamma0","_f","_g","_h","T1","T2","Sha512","Ch","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","fh","gh","hh","fl","gl","xh","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","Legacy","ZEROS","blocksize","_alg","ipad","_ipad","opad","_opad","MAX_ALLOC","checkParameters","sizes","rmd160","saltLen","shaFunc","getDigest","ipad1","ipad2","DK","block1","destPos","hLen","U","ip","inL","inR","outL","outR","rip","pc1","r28shl","pc2table","pc2","sTable","substitute","permuteTable","padSplit","DESState","DES","_desState","deriveKeys","shiftTable","kL","kR","inp","outOff","_encrypt","_decrypt","lStart","rStart","keyL","keyR","incr32","getBlock","_cipher","_prev","chunkNum","_cache","GHASH","StreamCipher","_ghash","_finID","ghash","toPad","ivBits","calcIv","_secCache","_alen","_mode","_authTag","_called","rump","xorTest","findPrime","simpleSieve","fermatTest","TWENTYFOUR","millerRabin","ONE","TWO","FIVE","TEN","THREE","ELEVEN","FOUR","_getPrimes","n2","bn","brorand","MillerRabin","_randbelow","min_bytes","_randrange","stop","rone","n1","rn1","getDivisor","ch32","maj32","p32","ft_1","s0_256","s1_256","g0_256","g1_256","shaCommon","sha256_K","SHA256","sha512_K","SHA512","ch64_hi","yh","yl","zh","ch64_lo","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","move","_move","for","modrn","allocate","_toArrayLikeLE","_toArrayLikeBE","isNegNum","bignum","define","decoders","encoders","der","pem","DEREncoder","tree","DERNode","encodedTag","encodeTag","lenOctets","unused","ident","objid","numArray","_getEncoder","dataBuffer","defaultBuffer","DERDecoder","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","numstr","printstr","identifiers","subident","mon","sec","_getDecoder","i2ops","seed","paddedMsg","rnds8","rnds","byteToHex","bth","randomString","makeTestMessage","resetSync","keyState","LOCHDR","LOCSIG","LOCVER","LOCFLG","LOCHOW","LOCTIM","LOCCRC","LOCSIZ","LOCLEN","LOCNAM","LOCEXT","EXTSIG","EXTHDR","EXTCRC","EXTSIZ","EXTLEN","CENHDR","CENSIG","CENVEM","CENVER","CENFLG","CENHOW","CENTIM","CENCRC","CENSIZ","CENLEN","CENNAM","CENEXT","CENCOM","CENDSK","CENATT","CENATX","CENOFF","ENDHDR","ENDSIG","ENDSUB","ENDTOT","ENDSIZ","ENDOFF","ENDCOM","STORED","SHRUNK","REDUCED1","REDUCED2","REDUCED3","REDUCED4","IMPLODED","DEFLATED","ENHANCED_DEFLATED","PKWARE","BZIP2","LZMA","IBM_TERSE","IBM_LZ77","FLG_ENC","FLG_COMP1","FLG_COMP2","FLG_DESC","FLG_ENH","FLG_STR","FLG_LNG","FLG_MSK","FILE","NONE","EF_ID","EF_SIZE","ID_ZIP64","ID_AVINFO","ID_PFS","ID_OS2","ID_NTFS","ID_OPENVMS","ID_UNIX","ID_FORK","ID_PATCH","ID_X509_PKCS7","ID_X509_CERTID_F","ID_X509_CERTID_C","ID_STRONGENC","ID_RECORD_MGT","ID_X509_PKCS7_RL","ID_IBM1","ID_IBM2","ID_POSZIP","EF_ZIP64_OR_32","EF_ZIP64_OR_16","EF_ZIP64_SUNCOMP","EF_ZIP64_SCOMP","EF_ZIP64_RHO","EF_ZIP64_DSN","Utils","Headers","Methods","_entryHeader","EntryHeader","_entryName","_comment","_isDirectory","uncompressedData","_extra","getCompressedDataFromZip","loadDataHeaderFromBinary","realDataOffset","compressedSize","crc32OK","crc32","dataHeader","crc","decompress","pass","DIRECTORY_CONTENT_ERROR","compressedData","NO_DATA","BAD_CRC","inflater","Inflater","inflateAsync","UNKNOWN_METHOD","compress","deflater","Deflater","deflated","deflateAsync","readUInt64LE","parseZip64ExtendedInformation","diskNumStart","fileNameLength","extraLength","parseExtra","commentLength","getCompressedData","getCompressedDataAsync","getDataAsync","loadFromBinary","packHeader","entryHeaderToBinary","MainHeader","adler","crcTable","makeTable","charenc","utf8","stringToBytes","bin","unescape","bytesToString","escape","subWeeks","subYears","async_all","requests","ensure_timestamp","merge_modifiers","modifiers","$ignore_alias","$ignore_time","$ip","$time","ProfileHelpers","_set","set_once","$set","endpoint","send_request","_delete_profile","_remove","$remove","_union","$union","merge_values","_unset","$unset","callee","hasToStringTag","$toString","isStandardArguments","isLegacyArguments","supportsStandardArguments","numberIsNaN","$Object","hasIndices","dotAll","unicode","sticky","strValue","tryStringObject","$Map","possibleNames","canBeObject","$push","$propIsEnumerable","originalGetSymbols","source1","objTarget","getSymbols","letters","lacksProperEnumerationOrder","preventExtensions","thrower","assignHasPendingExceptions","END64HDR","END64SIG","END64START","END64OFF","END64NUMDISKS","ZIP64SIG","ZIP64HDR","ZIP64LEAD","ZIP64SIZE","ZIP64VEM","ZIP64VER","ZIP64DSK","ZIP64DSKDIR","ZIP64SUB","ZIP64TOT","ZIP64SIZB","ZIP64OFF","ZIP64EXTRA","AES_ENCRYPT","FLG_PATCH","FLG_EFS","encripted","ZipCrypto","addpos","nr","comment","injected","runImport","loadBudget","budgetId","batchBudgetUpdates","getBudgetMonths","getBudgetMonth","setBudgetAmount","categoryId","setBudgetCarryover","importTransactions","filterTransactions","createAccount","initialBalance","closeAccount","transferAccountId","transferCategoryId","reopenAccount","createPayeeRule","initSqlJsPromise","initSqlJs","moduleConfig","resolveModule","originalOnAbortFunction","errorThatCausedAbort","onRuntimeInitialized","Qa","Pa","wb","hb","aa","sb","eb","Mb","Xc","zb","handleError","Cb","Xa","cwrap","J","Z","Ka","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Nb","Ob","Pb","Qb","Rb","Sb","Tb","Ub","Vb","Wb","Xb","vc","wc","Pc","Qc","getBlob","getColumnNames","getSQL","getNormalizedSQL","zc","ca","ba","uc","yc","xc","freemem","da","Bb","ha","ia","F","getRemainingSQL","ea","fa","columns","each","iterateStatements","create_function","la","fb","Aa","Yb","ra","lock","unlock","_register_for_idb","cleanup_file","reset_filesystem","root","ma","sa","ta","ua","va","wa","na","oa","pa","qa","__dirname","readFileSync","location","href","document","currentScript","XMLHttpRequest","responseText","responseType","response","onload","xa","print","printErr","thisProgram","za","Ba","ya","grow","WebAssembly","Instance","wasmBinary","noExitRuntime","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ma","TextDecoder","Na","Oa","HEAP8","HEAP16","HEAP32","HEAPU8","HEAPU16","HEAPU32","HEAPF32","HEAPF64","Ra","Sa","Ta","Ua","preRun","V","Va","Wa","Ya","monitorRunDependencies","Za","onAbort","RuntimeError","$a","preloadedImages","preloadedAudios","bb","gb","pd","yb","ob","pb","qb","tb","ub","vb","ErrnoError","tty","seekable","cc","xb","readSync","stdin","fd","prompt","readline","Ab","createNode","Rc","getattr","node_ops","setattr","lookup","mknod","rename","llseek","stream_ops","mmap","msync","Cc","qd","Zb","gd","Ac","lookupNode","ed","mb","Zc","hc","nc","kc","qc","rc","Lc","lb","isRoot","jc","fc","Vc","FSNode","Mc","Yc","$b","Wc","oc","$c","Jc","Dc","Oc","sd","bc","mc","Kc","vd","yd","td","willMovePath","onMovePath","willDeletePath","onDeletePath","lstat","chmod","lchmod","fchmod","chown","lchown","fchown","Nc","kd","jd","logReadFiles","onOpenFile","onWriteToFile","ud","ic","Bc","Fc","Ec","Hc","Ic","hd","MEMFS","wd","_fflush","od","ad","cd","bd","md","Gc","ac","Sc","ld","dc","pc","getResponseHeader","setRequestHeader","overrideMimeType","tc","sc","nd","preloadPlugins","canHandle","handle","mozIndexedDB","webkitIndexedDB","msIndexedDB","ib","xd","rd","hrtime","performance","gc","USER","LOGNAME","PATH","PWD","HOME","LANG","navigator","languages","toTimeString","Uc","Tc","dd","copyWithin","fsync","extraStackTrace","asm","instance","credentials","instantiate","instantiateWasm","instantiateStreaming","___wasm_call_ctors","_sqlite3_vfs_find","_sqlite3_free","___errno_location","_sqlite3_finalize","_sqlite3_reset","_sqlite3_clear_bindings","_sqlite3_value_blob","_sqlite3_value_text","_sqlite3_value_bytes","_sqlite3_value_double","_sqlite3_value_int","_sqlite3_value_type","_sqlite3_result_blob","_sqlite3_result_double","_sqlite3_result_error","$","_sqlite3_result_int","_sqlite3_result_int64","_sqlite3_result_null","_sqlite3_result_text","_sqlite3_step","_sqlite3_column_count","_sqlite3_data_count","ga","_sqlite3_column_blob","_sqlite3_column_bytes","_sqlite3_column_double","_sqlite3_column_text","_sqlite3_column_type","_sqlite3_column_name","_sqlite3_bind_blob","_sqlite3_bind_double","_sqlite3_bind_int","_sqlite3_bind_text","_sqlite3_bind_parameter_index","_sqlite3_sql","_sqlite3_normalized_sql","_sqlite3_errmsg","_sqlite3_exec","_sqlite3_prepare_v2","_sqlite3_changes","_sqlite3_close_v2","_sqlite3_create_function_v2","_sqlite3_open","_malloc","_free","_RegisterExtensionFunctions","__get_tzname","__get_daylight","__get_timezone","stackSave","Ja","stackRestore","stackAlloc","La","_memalign","calledRun","noFSInit","postRun","setStatus","UTF8ToString","preInit","MurmurHashV3","h1","h1b","murmur","v2","crypt","bytesToWords","FF","_ff","GG","_gg","HH","II","_ii","_blocksize","_digestsize","digestbytes","wordsToBytes","asBytes","asString","bytesToHex","lowerCase","specials","character","lead","forced","lower","parsedMatch","parseMatch","fullLower","customSpecials","special","convertToRegExp","migrateParentIds","parentId","_unlisten","listen","objname","Parser","err1","__parse","IMPORT_MODE","withMutation","latestTimestamp","validateMonth","batchPromise","avoidUpload","incomeAvailable","lastMonthOverspent","forNextMonth","totalIncome","totalSpent","totalBalance","received","validateExpenseCategory","offBudget","isIncome","serverHandlers","pickRandom","integer","findMin","getStartingBalanceCat","extractCommonThings","incomePayee","expensePayees","expenseGroup","bill","billCategories","billPayees","fillPrimaryChecking","numTransactions","pick","earliestMonth","fillChecking","fastMode","fillInvestment","fillSavings","fillMortgage","fillOther","createTestBudget","allGroups","primaryAccount","primaryBalance","$sum","lastDeposit","isCached","earliestPrimaryDate","setBudgetIfSpent","prevSaved","blankPayeeRows","parentPayee","clearedRows","deletedRows","numBlankPayees","numCleared","numDeleted","parseFile","qif","lines","division","memo","address","lArray","subcategory","clearedStatus","sArray","dateFormat","qif2json","internal","parseQIF","csv2json","bom","relax_column_count","parseCSV","getOFXTransactions","initModule","fi_id","parseOFX","takeDates","getRank","day1","day2","matchSchedules","allOccurs","partialMatchRank","baseOccur","occurs","occur","rank","exactAmount","exact","exactDate","schedulesForPattern","baseStart","numDays","baseConfig","weekly","every2weeks","monthly","monthlyLastDay","monthly1stor3rd","dayValue","monthly2ndor4th","findStartDate","currentConfig","prevConfig","newConditions","getNextDate","getRuleForSchedule","ruleId","setNextDate","newNextDate","base_next_date","base_next_date_ts","local_next_date","local_next_date_ts","updateSchedule","resetNextDate","newId","fixRuleForSchedule","oldConditions","scheduleConds","newScheduleConds","replacements","arr1","arr2","zip","updateConditions","stripType","onRuleUpdate","scheduleId","payeeIdx","accountIdx","amountIdx","dateIdx","postTransactionForSchedule","advanceSchedulesService","syncSuccess","hasTransData","failedToPost","didPost","nextDateRepr","schedule_id","allSchedules","latestDate","finalized","findSchedules","lastScheduleRun","YNAB4","YNAB5","VERSION","validateRule","runValidation","conditionErrors","ruleFieldTypes","actionErrors","term","notPaged","groupCategories","payeeCounts","mergeIds","orphaned","someDeletionsFailed","nodeSheet","nodeName","accts","upgradingId","balance_available","balance_limit","stopPolling","appVersion","showUpdate","budgetVersion","syncMigrations","getDefaultDocumentDir","initApp","isDev","socketName","tracking","ensureExists","documentDir","setupDocumentsDir","keysStr","platform","autoUpdate","$send","$query","$q","$db","$setSyncingMode","dataDir","serverURL","ACTUAL_APP_VERSION","ACTUAL_SERVER_URL","persist","lib","matchedTransactions","updatedAccounts","linkToken","link_token","maxMonths","floatingSidebar","seenTutorial","encryptKey","bootstrapped","offline","findBudgets","currentPrefs","getFileSize","dbSize","cacheSize","trackSizes","testMode","testBudgetId","importBuffer","importYNAB5","unseen","installAPI","injectAPI","schedulesApp","budgetApp","notesApp","toolsApp","sendMessage","SyncProtoBuf","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","LN2","inserted","pushNode","forEachReverse","getReverse","mapReverse","initial","reduceReverse","toArrayReverse","sliceReverse","deleteCount","pathModule","node_1","setImmediate_1","process_1","setTimeoutUnref_1","stream_1","events_1","promises_1","resolveCrossPlatform","posix","FLAGS","isWin","ERRSTR","ENOENT","createError","errorCode","path2","Constructor","pathFormatted","flagsToNumber","flagsNum","getOptions","defaults","tipeof","ERRSTR_OPTS","optsGenerator","validateCallback","optsAndCbGenerator","getOpts","wx","ax","optsDefaults","getDefaultOpts","getDefaultOptsAndCb","getReadFileOptions","writeFileDefaults","getWriteFileOptions","appendFileDefaults","getAppendFileOpts","getAppendFileOptsAndCb","getRealpathOptions","getRealpathOptsAndCb","mkdirDefaults","recursive","getMkdirOptions","rmdirDefaults","getRmdirOptions","getReaddirOptions","withFileTypes","getReaddirOptsAndCb","statDefaults","getStatOptions","getStatOptsAndCb","pathToFilename","hostname","third","codePointAt","getPathFromURLPosix","pathString","nullCheck","_resolve_1","unixify_1","unixify","filenameToSteps","fullPathSansSlash","pathToSteps","dataToBuffer","bufferToEncoding","modeToNumber","_modeToNumber","isFd","validateFd","validateUid","validateGid","dataToStr","inodes","releasedInos","fds","releasedFds","maxFiles","openFiles","promisesApi","statWatchers","Link","File","createLink","_ReadStream","FsReadStream","class_1","_WriteStream","FsWriteStream","class_2","perm","createChild","deleteLink","deleteChild","newInoNumber","releasedFd","newFdNumber","setIsDirectory","deleteNode","genRndStr","getLink","steps","walk","getLinkOrThrow","funcName","getResolvedLink","filenameOrSteps","getChild","isSymlink","getResolvedLinkOrThrow","resolveSymlinks","getLinkAsDirOrThrow","getLinkParent","getLinkParentAsDirOrThrow","getFileByFd","getFileByFdOrThrow","getNodeByIdOrCreate","dirLink","name_1","wrapAsync","_toJSON","name_2","getPath","getString","dirPath","isRelative","links","paths_1","links_1","mkdirpBase","writeFileSync","mountSync","mountpoint","openLink","realLink","canRead","openFile","modeNum","openBase","openSync","fileName","closeFile","closeSync","openFileOrGetById","readBase","readFileBase","userOwnsFd","writeBase","tipa","tipb","tipc","tipd","writeFileBase","isUserFd","written","linkBase","filename1","filename2","steps1","link1","steps2","dir2","copyFileBase","existsSync","copyFileSync","srcFilename","destFilename","linkSync","existingPath","newPath","existingPathFilename","newPathFilename","unlinkBase","unlinkSync","symlinkBase","targetFilename","pathFilename","pathSteps","makeSymlink","symlinkSync","realpathBase","realpathSync","realpath","lstatBase","lstatSync","statBase","statSync","fstatBase","fstatSync","fstat","renameBase","oldPathFilename","newPathSteps","newPathDirLink","oldLinkParent","setChild","renameSync","oldPath","existsBase","accessBase","accessSync","access","appendFileSync","appendFile","readdirBase","list_1","name_3","name_4","readdirSync","readlinkBase","readlinkSync","fsyncBase","fsyncSync","fdatasyncBase","fdatasyncSync","fdatasync","ftruncateBase","ftruncateSync","ftruncate","truncateBase","truncateSync","futimesBase","futimesSync","futimes","utimesBase","utimesSync","utimes","mkdirBase","mkdirSync","mkdirpSync","mkdirp","mkdtempBase","retry","mkdtempSync","mkdtemp","rmdirBase","rmdirSync","fchmodBase","fchmodSync","chmodBase","chmodSync","lchmodBase","lchmodSync","fchownBase","fchownSync","chownBase","chownSync","lchownBase","lchownSync","watchFile","persistent","watcher","unwatchFile","createReadStream","createWriteStream","watch","givenOptions","emitStop","pool","onInterval","loop","timeoutRef","_vol","autoClose","bytesRead","closeOnOpen","bytesWritten","thisPool","toRead","destroySoon","_filename","_filenameEncoded","_recursive","_onNodeChange","_emit","_onParentChild","_getName","_persist","_timer","_steps","_link","SEP","setString","touch","setModeProperty","setIsFile","setIsSymlink","actualLen","canWrite","seekTo","registerImmediate","html","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","runIfPresent","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","createElement","documentElement","script","onreadystatechange","removeChild","appendChild","attachEvent","task","_classCallCheck","getResult","FileHandle","datasync","punycode","Url","protocol","slashes","auth","host","port","urlParse","resolveObject","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","querystring","parseQueryString","slashesDenoteHost","queryIndex","splitter","uSplit","simplePath","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","toASCII","ae","esc","qm","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","hasTrailingSlash","nodeType","freeGlobal","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","mapDomain","ucs2decode","extra","ucs2encode","digitToBasic","digit","adapt","numPoints","firstTime","baseMinusTMin","basic","oldi","baseMinusT","inputLength","bias","handledCPCount","basicLength","currentValue","handledCPCountPlusOne","qMinusT","qs","regexp","maxKeys","kstr","vstr","stringifyPrimitive","ks","correctPath","isSeparator","char","normalizePath","stripTrailing","removeTrailingSeparator","fsProps","pipeline","enumerableOnly","_defineProperty","_defineProperties","protoProps","staticProps","_getString","_getBuffer","_objectSpread","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","lastPromise","wrapForNext","_Object$create","ERR_MISSING_ARGS","destroyer","popCallback","destroys","Sha","rotl30","ft","Sha1","rotl5","Sha224","Sha384","ZERO_BUF","toBrowser","checks","getNextTick","queueMicrotask","browserPbkdf2","deriveBits","resolvePromise","prom","checkNative","resp","aesModes","desModes","ebtk","suite","des","EDE","modeName","_des","des3","CBCState","_cbcInit","_cbcState","superProto","EDEState","k3","_edeState","MODES","AuthCipher","Splitter","_autopadding","PADDING","setTo","padBuff","encryptStart","encryptByte","byteParam","shiftIn","ZEROES","fromArray","_multiply","lsbVi","Vi","Zi","abl","_last","padded","unpad","autoPadding","generatePrime","DH","ENCODINGS","genc","SEVEN","setPublicKey","pub","_pub","setPrivateKey","_priv","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","formatReturnValue","hex","checkPrime","__gen","generateKeys","_gen","getPublicKey","computeSecret","getPrime","front","getPrivateKey","getGenerator","verify","algorithms","_hashType","_tag","_signType","sig","EC","hlen","hbits","bits2int","bits2octets","obits","makeKey","kv","makeR","hashType","signType","curveId","keyFromPrivate","toDER","ecSign","dsaSign","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","inf","JPoint","zOne","betas","_getEndoRoots","lambdas","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","y2","len1","_endoSplit","p1","p2","q1","q2","_endoWnafMulAdd","npoints","ncoeffs","endoMul","obj2point","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","negate","zinv","zinv2","ay","pz2","z2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","MontCurve","i4","a24","diffAdd","jumlAdd","EdwardsCurve","twisted","mOneA","oneC","_mulA","_mulC","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","sha1_K","SHA1","SHA224","SHA384","Kh","Ah","Bh","Dh","Eh","rh","sh","inner","outer","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","keyFromPublic","fromPublic","genKeyPair","drbg","pers","persEnc","entropy","entropyEnc","nonce","ns2","_truncateToN","truncOnly","getPrivate","ns1","kp","kpX","recoveryParam","canonical","sinv","getPublic","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Qprime","predResist","minEntropy","_reseed","reseedInterval","nonceEnc","_hmac","kmac","reseed","addEnc","temp","_importPrivate","privEnc","_importPublic","pubEnc","derive","_importDER","Position","place","getLength","octetLen","rmPadding","constructLength","octets","slen","backHalf","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","Rencoded","encodePoint","s_","pubBytes","makeSignature","SG","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","seq","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","ECParameters","namedCurve","Entity","_createNamed","Generated","_initNamed","PEMEncoder","label","PEMDecoder","_reverse","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","cipherKey","match2","checkValue","pubkey","ecVerify","unpacked","montp","dsaVerify","padNum","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","p256","secp256r1","secp192r1","p384","p521","inenc","mgf","withPublic","publicKey","iHash","hLen2","ps","dblen","maskedDb","maskedSeed","oaep","nonZero","pkcs1","zBuffer","dif","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","ERRNO_CODES","fileattr","old_node","new_dir","new_name","newname","oldpath","whence","prot","mmapFlags","lockType","createFile","LOCK_TYPES","getPageSize","bufferView","getBoundaryIndexes","writeChunks","cursor","cstart","cend","chunkBuffer","readLength","_metaDirty","writeLock","openHandles","bufferChunks","readMeta","inMemory","missing","missingChunks","readBlocks","view","dataLength","readBuffer","readChunks","pageSize","partialWrites","fullWrites","reads","allWrites","_recordingLock","writes","totalSize","writeBlocks","writeMeta","Reader","initialOffset","useAtomics","atomicView","waitWrite","flip","compareExchange","notify","getUint32","peekOffset","_int32","dataView","chars","getUint16","getInt32","int32","Writer","waitRead","finalize","setUint32","setUint16","setInt32","positionToKey$1","FileOps","getStoreName","invokeWorker","positions","deleteDatabase","argBuffer","resultBuffer","worker","positionToKey","Persistance","onFallbackFailure","_openDb","hasAlertedFailure","onabort","openDb","dbName","closeDb","getDb","openCursor","IDBKeyRange","continue","cachedFirstBlock","hasLocked","localData","diskData","localView","diskView","isSafeToWrite","FileOpsFallback","writeQueue","transferBlockOwnership","persistance","readAll","metaBlock","queueWrite","PERF_BUILD","_files","startProfile","stopProfile","rootPath","__filename","readStream","writeStream","joined","trailingSeparator","lastSegmentLength","lastSlash","dots","lastSlashIndex","normalizeStringPosix","accounting","localeCurrency","currencies","localeFormats","defaultCurrency","symbol","thousandsSeparator","decimalSeparator","symbolOnLeft","spaceBetweenAmountAndSymbol","decimalDigits","defaultLocaleFormat","formatMapping","findCurrency","currencyCode","getCurrency","localeMatch","language","region","localeFormat","currency","formatMoney","decimal","thousand","precision","unformat","grouping","nativeMap","nativeIsArray","defs","checkPrecision","checkCurrencyFormat","settings","unformatted","exponentialForm","rounded","formatNumber","usePrecision","formatColumn","padAfterSymbol","maxLength","formatted","fVal","localeString","components","countryCode","getLocales","locales","AD","AE","AF","AG","AI","AL","AM","AN","AO","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DM","DO","DZ","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SH","SI","SJ","SK","SL","SM","SN","SO","SR","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW","_nodeId","_clockseq","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","nsecs","dt","tmh","ii","serialized","addNode","edges","incomingEdges","adjacent","adjacentIncoming","sourceNodes","visited","sorted","topologicalSortUntil","generateDOT","edgeStrings","adj","edge","incoming","$jscomp","findInternal","ASSUME_ES5","ASSUME_NO_NATIVE_MAP","ASSUME_NO_NATIVE_SET","SIMPLE_FROUND_POLYFILL","getGlobal","polyfill","checkStringArgs","isDef","exportPath_","execScript","CLOSURE_UNCOMPILED_DEFINES","CLOSURE_DEFINES","FEATURESET_YEAR","LOCALE","TRUSTED_SITE","STRICT_MODE_COMPATIBLE","DISALLOW_TEST_ONLY_CODE","ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING","provide","isInModuleLoader_","isProvided_","constructNamespace_","implicitNamespaces_","getObjectByName","getScriptNonce","getScriptNonce_","cspNonce_","NONCE_PATTERN_","querySelector","getAttribute","VALID_MODULE_RE_","isInGoogModuleLoader_","moduleLoaderState_","moduleName","getInternal_","loadedModules_","ModuleType","ES6","GOOG","isInEs6ModuleLoader_","getCurrentModulePath","declareLegacyNamespace","declareModuleId","setTestOnly","forwardDeclare","isDefAndNotNull","globalize","addDependency","DEPENDENCIES_ENABLED","debugLoader_","ENABLE_DEBUG_LOADER","logToConsole_","requested","load_","requireType","basePath","nullFunction","abstractMethod","addSingletonGetter","instance_","getInstance","instantiatedSingletons_","LOAD_MODULE_USING_EVAL","SEAL_MODULE_EXPORTS","TRANSPILE","ASSUME_ES_MODULES_TRANSPILED","TRANSPILE_TO_LANGUAGE","TRANSPILER","hasBadLetScoping","useSafari10Workaround","workaroundSafari10EvalBug","loadModule","loadModuleFromSource_","seal","normalizePath_","loadFileSync_","CLOSURE_LOAD_FILE_SYNC","transpile_","transpile","$gwtExport","typeOf","isArrayLike","isDateLike","getUid","UID_PROPERTY_","uidCounter_","hasUid","removeUid","removeAttribute","getHashCode","removeHashCode","bindNative_","bindJs_","mixin","globalEval","evalWorksForGlobals_","_evalTest_","defer","createTextNode","getCssName","cssNameMapping_","cssNameMappingStyle_","CLOSURE_CSS_NAME_MAP_FN","setCssNameMapping","CLOSURE_CSS_NAME_MAPPING","getMsg","getMsgWithFallback","exportProperty","superClass_","caller","defineClass","statics","createSealingConstructor_","applyProperties_","SEAL_CLASS_INSTANCES","isUnsealable_","UNSEALABLE_CONSTRUCTOR_PROPERTY_","OBJECT_PROTOTYPE_FIELDS_","tagUnsealableClass","inHtmlDocument_","isDocumentLoading_","readyState","findBasePath_","CLOSURE_BASE_PATH","getElementsByTagName","Transpiler","requiresTranspilation_","transpilationTarget_","createRequiresTranspilation_","es3","userAgent","needsTranspile","transpiler_","protectScriptTag_","DebugLoader_","dependencies_","idToPath_","written_","loadingDeps_","depsToLoad_","paused_","factory_","DependencyFactory","deferredCallbacks_","deferredQueue_","bootstrap","getPathFromDeps_","onLoad","loadClosureDeps","createDependency","loadDeps_","areDepsLoaded_","requires","setDependencyFactory","loading_","loaded","loaded_","setModuleState","registerEs6ModuleExports","registerGoogModuleExports","clearModuleState","defer_","areDepsLoaded","pause_","LoadController","Dependency","relativePath","provides","loadFlags","loadCallbacks_","getPathName","callbackMap_","registerCallback_","unregisterCallback_","callback_","CLOSURE_IMPORT_SCRIPT","IS_OLD_IE_","TRUSTED_TYPES_POLICY_","createHTML","setAttribute","createScriptURL","Es6ModuleDependency","textContent","createScript","TransformedDependency","contents_","lazyFetch_","ensure","TranspiledDependency","transpiler","PreTranspiledEs6ModuleDependency","GoogModuleDependency","needsTranspile_","atob","lang","CLOSURE_NO_DEPS","TRUSTED_TYPES_POLICY_NAME","identity_","createTrustedTypesPolicy","TrustedTypes","createPolicy","createURL","getCount","getAnyKey","getAnyValue","containsValue","getValues","getValueByKeys","containsKey","findValue","setIfUndefined","setWithReturnValueIfNotSet","unsafeClone","transpose","PROTOTYPE_FIELDS_","createSet","createImmutableView","isFrozen","isImmutableView","getAllPropertyNames","getSuperClass","reportErrorToServer","dom","NodeType","ELEMENT","ATTRIBUTE","TEXT","CDATA_SECTION","ENTITY_REFERENCE","ENTITY","PROCESSING_INSTRUCTION","COMMENT","DOCUMENT","DOCUMENT_TYPE","DOCUMENT_FRAGMENT","NOTATION","asserts","ENABLE_ASSERTS","subs_","messagePattern","DEFAULT_ERROR_HANDLER","errorHandler_","doAssertFailure_","setErrorHandler","assertExists","assertNumber","assertString","assertFunction","assertObject","assertArray","assertBoolean","assertElement","assertInstanceof","getType_","assertFinite","assertObjectPrototypeIsIntact","BinaryConstants","ConstBinaryMessage","BinaryMessage","FieldType","INVALID","DOUBLE","FLOAT","INT64","UINT64","INT32","FIXED64","FIXED32","BOOL","STRING","GROUP","MESSAGE","BYTES","UINT32","ENUM","SFIXED32","SFIXED64","SINT32","SINT64","FHASH64","VHASH64","WireType","VARINT","DELIMITED","START_GROUP","END_GROUP","FieldTypeToWireType","INVALID_FIELD_NUMBER","FLOAT32_EPS","FLOAT32_MIN","FLOAT32_MAX","FLOAT64_EPS","FLOAT64_MIN","FLOAT64_MAX","TWO_TO_20","TWO_TO_23","TWO_TO_31","TWO_TO_32","TWO_TO_52","TWO_TO_63","TWO_TO_64","ZERO_HASH","NATIVE_ARRAY_PROTOTYPES","ASSUME_NATIVE_FUNCTIONS","forEachRight","reduceRight","findRight","findIndexRight","insertAt","insertArrayAt","insertBefore","removeAt","removeLast","removeIf","removeAllIf","removeDuplicates","binarySearch","binarySearch_","defaultCompare","binarySelect","stableSort","sortByKey","sortObjectsByKey","isSorted","defaultCompareEquality","compare3","inverseDefaultCompare","binaryInsert","binaryRemove","bucket","flatten","rotate","moveItem","shuffle","copyByIndex","concatMap","stringToByteArray","byteArrayToString","byteArrayToHex","hexToByteArray","stringToUtf8ByteArray","utf8ByteArrayToString","xorByteArray","assertIsLocation","getWindow_","Location","Element","debugStringForType_","assertIsElementType_","assertIsHTMLAnchorElement","assertIsHTMLButtonElement","assertIsHTMLLinkElement","assertIsHTMLImageElement","assertIsHTMLAudioElement","assertIsHTMLVideoElement","assertIsHTMLInputElement","assertIsHTMLTextAreaElement","assertIsHTMLCanvasElement","assertIsHTMLEmbedElement","assertIsHTMLFormElement","assertIsHTMLFrameElement","assertIsHTMLIFrameElement","assertIsHTMLObjectElement","assertIsHTMLScriptElement","ownerDocument","defaultView","parentWindow","functions","constant","FALSE","TRUE","NULL","identity","partialRight","withReturnValue","sequence","equalTo","compose","not","CACHE_RETURN_VALUE","cacheReturnValue","debounce","throttle","rateLimit","HtmlElement","TagName","tagName_","ABBR","ACRONYM","ADDRESS","APPLET","AREA","ARTICLE","ASIDE","AUDIO","BASE","BASEFONT","BDI","BDO","BIG","BLOCKQUOTE","BODY","BUTTON","CANVAS","CAPTION","CENTER","CITE","CODE","COL","COLGROUP","COMMAND","DATA","DATALIST","DD","DEL","DETAILS","DFN","DIALOG","DIR","DIV","DL","DT","EM","EMBED","FIELDSET","FIGCAPTION","FIGURE","FONT","FOOTER","FORM","FRAME","FRAMESET","H1","H2","H3","H4","H5","H6","HEAD","HEADER","HGROUP","HTML","IFRAME","IMG","INPUT","INS","ISINDEX","KBD","KEYGEN","LABEL","LEGEND","LINK","MAIN","MAP","MARK","MATH","MENU","MENUITEM","META","METER","NAV","NOFRAMES","NOSCRIPT","OBJECT","OL","OPTGROUP","OPTION","OUTPUT","PARAM","PICTURE","PRE","PROGRESS","RP","RT","RTC","RUBY","SAMP","SCRIPT","SECTION","SELECT","SMALL","SOURCE","SPAN","STRIKE","STRONG","STYLE","SUB","SUMMARY","SUP","SVG","TABLE","TBODY","TEMPLATE","TEXTAREA","TFOOT","THEAD","TIME","TITLE","TRACK","UL","VAR","VIDEO","WBR","VOID_TAGS_","area","col","command","embed","img","keygen","wbr","isVoidTag","trustedtypes","PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY","TypedString","Const","stringConstValueWithSecurityContract__googStringSecurityPrivate_","GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_","STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_","TYPE_MARKER_","implementsGoogStringTypedString","getTypedStringValue","EMPTY","SafeScript","privateDoNotAccessOrElseSafeScriptWrappedValue_","SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","fromConstant","createSafeScriptSecurityPrivateDoNotAccessOrElse","fromConstantAndArgs","stringify_","fromJson","unwrapTrustedScript","initSecurityPrivateDoNotAccessOrElse_","createObjectUrl","getUrlObject_","createObjectURL","revokeObjectUrl","revokeObjectURL","findUrlObject_","webkitURL","browserSupportsObjectUrls","i18n","bidi","FORCE_RTL","IS_RTL","Format","LRE","RLE","PDF","LRM","RLM","Dir","LTR","RTL","NEUTRAL","RIGHT","LEFT","I18N_RIGHT","I18N_LEFT","toDir","ltrChars_","rtlChars_","htmlSkipReg_","stripHtmlIfNeeded_","rtlCharReg_","ltrCharReg_","hasAnyRtl","hasRtlChar","hasAnyLtr","ltrRe_","rtlRe_","isRtlChar","isLtrChar","isNeutralChar","ltrDirCheckRe_","rtlDirCheckRe_","startsWithRtl","isRtlText","startsWithLtr","isLtrText","isRequiredLtrRe_","isNeutralText","ltrExitDirCheckRe_","rtlExitDirCheckRe_","endsWithLtr","isLtrExitText","endsWithRtl","isRtlExitText","rtlLocalesRe_","isRtlLanguage","bracketGuardTextRe_","guardBracketInText","enforceRtlInHtml","enforceRtlInText","enforceLtrInHtml","enforceLtrInText","dimensionsRe_","leftRe_","rightRe_","tempRe_","mirrorCSS","doubleQuoteSubstituteRe_","singleQuoteSubstituteRe_","normalizeHebrewQuote","wordSeparatorRe_","hasNumeralsRe_","rtlDetectionThreshold_","estimateDirection","detectRtlDirectionality","setElementDirAndAlign","textAlign","setElementDirByTextDirectionality","DirectionalString","TrustedResourceUrl","privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_","trustedURL_","TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","implementsGoogI18nBidiDirectionalString","getDirection","cloneWithParams","URL_PARAM_PARSER_","createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse","stringifyParams_","unwrapTrustedScriptURL","unwrapTrustedURL","BASE_URL_","FORMAT_MARKER_","formatWithParams","fromConstants","caseInsensitiveStartsWith","caseInsensitiveCompare","caseInsensitiveEndsWith","caseInsensitiveEquals","isEmptyOrWhitespace","newLineToBr","htmlEscape","AMP_RE_","LT_RE_","GT_RE_","QUOT_RE_","SINGLE_QUOTE_RE_","NULL_RE_","ALL_RE_","whitespaceEscape","caseInsensitiveContains","compareVersions","compareElements_","SafeUrl","privateDoNotAccessOrElseSafeUrlWrappedValue_","SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","INNOCUOUS_STRING","createSafeUrlSecurityPrivateDoNotAccessOrElse","SAFE_MIME_TYPE_PATTERN_","isSafeMimeType","fromBlob","DATA_URL_PATTERN_","fromDataUrl","fromTelUrl","SIP_URL_PATTERN_","fromSipUrl","fromFacebookMessengerUrl","fromWhatsAppUrl","fromSmsUrl","isSmsUrlBodyValid_","fromSshUrl","sanitizeChromeExtensionUrl","sanitizeExtensionUrl_","sanitizeFirefoxExtensionUrl","sanitizeEdgeExtensionUrl","fromTrustedResourceUrl","SAFE_URL_PATTERN_","SAFE_URL_PATTERN","sanitize","sanitizeAssertUnchanged","ABOUT_BLANK","SafeStyle","privateDoNotAccessOrElseSafeStyleWrappedValue_","SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","createSafeStyleSecurityPrivateDoNotAccessOrElse","sanitizePropertyValue_","sanitizePropertyValueString_","FUNCTIONS_RE_","URL_RE_","VALUE_RE_","COMMENT_RE_","hasBalancedQuotes_","hasBalancedSquareBrackets_","sanitizeUrl_","VALUE_ALLOWED_CHARS_","SafeStyleSheet","privateDoNotAccessOrElseSafeStyleSheetWrappedValue_","SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","createRule","hasBalancedBrackets_","createSafeStyleSheetSecurityPrivateDoNotAccessOrElse","labs","getNativeUserAgentString_","getNavigator_","userAgent_","setUserAgent","getUserAgent","matchUserAgent","matchUserAgentIgnoreCase","extractVersionTuples","matchOpera_","matchIE_","matchEdgeHtml_","matchEdgeChromium_","matchOperaChromium_","matchFirefox_","matchSafari_","matchChrome_","matchCoast_","isSilk","matchIosWebview_","matchAndroidBrowser_","isChrome","isFirefox","isOpera","isIE","isEdge","isEdgeChromium","isOperaChromium","isSafari","isCoast","isIosWebview","isAndroidBrowser","getVersion","getIEVersion_","isVersionOrHigher","SafeHtml","privateDoNotAccessOrElseSafeHtmlWrappedValue_","SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","dir_","unwrapTrustedHTML","createSafeHtmlSecurityPrivateDoNotAccessOrElse","htmlEscapePreservingNewlines","htmlEscapePreservingNewlinesAndSpaces","VALID_NAMES_IN_TAG_","URL_ATTRIBUTES_","cite","formaction","manifest","poster","NOT_ALLOWED_TAG_NAMES_","verifyTagName","createSafeHtmlTagSecurityPrivateDoNotAccessOrElse","createIframe","srcdoc","combineAttributes","sandbox","createSandboxIframe","canUseSandboxIframe","HTMLIFrameElement","createScriptSrc","createStyle","createMetaRefresh","getAttrNameAndValue_","getStyleValue_","createWithDir","concatWithDir","stringifyAttributes","DOCTYPE_HTML","uncheckedconversions","safeHtmlFromStringKnownToSatisfyTypeContract","safeScriptFromStringKnownToSatisfyTypeContract","safeStyleFromStringKnownToSatisfyTypeContract","safeStyleSheetFromStringKnownToSatisfyTypeContract","safeUrlFromStringKnownToSatisfyTypeContract","trustedResourceUrlFromStringKnownToSatisfyTypeContract","safe","InsertAdjacentHtmlPosition","AFTERBEGIN","AFTEREND","BEFOREBEGIN","BEFOREEND","insertAdjacentHtml","insertAdjacentHTML","SET_INNER_HTML_DISALLOWED_TAGS_","isInnerHtmlCleanupRecursive_","firstChild","innerHTML","parentElement","unsafeSetInnerHtmlDoNotUseOrElse","lastChild","setInnerHtml","tagName","setOuterHtml","outerHTML","setFormElementAction","setButtonFormAction","formAction","setInputFormAction","setStyle","cssText","documentWrite","setAnchorHref","setImageSrc","setAudioSrc","setVideoSrc","setEmbedSrc","setFrameSrc","setIframeSrc","setIframeSrcdoc","setLinkHrefAndRel","setObjectData","setScriptSrc","setScriptContent","setLocationHref","assignLocation","replaceLocation","openInWindow","parseFromStringHtml","parseFromString","createImageFromBlob","Image","DETECT_DOUBLE_ESCAPING","FORCE_NON_DOM_HTML_UNESCAPING","Unicode","NBSP","subs","collapseWhitespace","isEmptyString","isEmptyOrWhitespaceSafe","makeSafe","isEmptySafe","isBreakingWhitespace","isAlpha","isNumeric","isAlphaNumeric","isSpace","isUnicodeChar","stripNewlines","canonicalizeNewlines","normalizeWhitespace","normalizeSpaces","collapseBreakingSpaces","trimLeft","trimRight","numberAwareCompare_","intAwareCompare","floatAwareCompare","numerateCompare","urlEncode","urlDecode","E_RE_","unescapeEntities","unescapeEntitiesUsingDom_","unescapePureXmlEntities_","unescapeEntitiesWithDocument","HTML_ENTITY_PATTERN_","nodeValue","preserveSpaces","stripQuotes","truncateMiddle","specialEscapeChars_","jsEscapeCache_","escapeChar","escapeString","countOf","removeAll","regExpEscape","replaceAll","padNumber","buildString","getRandomString","hashCode","uniqueStringCounter_","createUniqueString","isLowerCamelCase","isUpperCamelCase","toCamelCase","toSelectorCase","toTitleCase","capitalize","splitLimit","lastComponent","editDistance","isPresto","isTrident","isWebKit","isGecko","getEngineTuple_","getVersionForKey_","isAndroid","isIpod","isIphone","isIpad","isIos","isMacintosh","isLinux","isWindows","isChromeOS","isChromecast","isKaiOS","isGo2Phone","reflect","objectProperty","sinkValue","canAccessProperty","ASSUME_IE","ASSUME_EDGE","ASSUME_GECKO","ASSUME_WEBKIT","ASSUME_MOBILE_WEBKIT","ASSUME_OPERA","ASSUME_ANY_VERSION","BROWSER_KNOWN_","getUserAgentString","getNavigatorTyped","getNavigator","OPERA","EDGE","EDGE_OR_IE","GECKO","WEBKIT","isMobile_","MOBILE","SAFARI","determinePlatform_","PLATFORM","ASSUME_MAC","ASSUME_WINDOWS","ASSUME_LINUX","ASSUME_X11","ASSUME_ANDROID","ASSUME_IPHONE","ASSUME_IPAD","ASSUME_IPOD","ASSUME_KAIOS","ASSUME_GO2PHONE","PLATFORM_KNOWN_","MAC","WINDOWS","isLegacyLinux_","LINUX","isX11_","X11","ANDROID","IPHONE","IPAD","IPOD","IOS","KAIOS","GO2PHONE","determineVersion_","getVersionRegexResult_","getDocumentMode_","documentMode","isVersionOrHigherCache_","isVersion","isDocumentModeOrHigher","DOCUMENT_MODE","isDocumentMode","product","ASSUME_FIREFOX","ASSUME_CHROME","ASSUME_SAFARI","PRODUCT_KNOWN_","FIREFOX","isIphoneOrIpod_","CHROME","isSafariDesktop_","DEFAULT_ALPHABET_COMMON_","ENCODED_VALS","ENCODED_VALS_WEBSAFE","Alphabet","DEFAULT","NO_PADDING","WEBSAFE","WEBSAFE_DOT_PADDING","WEBSAFE_NO_PADDING","paddingChars_","isPadding_","byteToCharMaps_","charToByteMap_","ASSUME_NATIVE_SUPPORT_","HAS_NATIVE_ENCODE_","HAS_NATIVE_DECODE_","encodeByteArray","init_","encodeString","decodeString","decodeStringInternal_","decodeStringToByteArray","decodeStringToUint8Array","split64Low","split64High","splitUint64","splitInt64","splitZigzag64","splitFloat32","splitFloat64","splitHash64","joinUint64","joinInt64","toZigzag64","joinZigzag64","fromZigzag64","joinFloat32","joinFloat64","joinHash64","DIGITS","ZERO_CHAR_CODE_","A_CHAR_CODE_","joinUnsignedDecimalString","joinSignedDecimalString","hash64ToDecimalString","hash64ArrayToDecimalStrings","decimalStringToHash64","splitDecimalString","toHexDigit_","fromHexCharCode_","hash64ToHexString","hexStringToHash64","hash64ToNumber","numberToHash64","countVarints","countVarintFields","countFixedFields_","countFixed32Fields","countFixed64Fields","countDelimitedFields","debugBytesToTextFormat","byteSourceToUint8Array","debugScalarToTextFormat","BinaryDecoder","bytes_","cursor_","end_","start_","error_","setBlock","instanceCache_","getEnd","setEnd","getCursor","setCursor","advance","pastEnd","getError","readSplitVarint64","readSplitZigzagVarint64","readSplitFixed64","skipVarint","unskipVarint","readUnsignedVarint32","readSignedVarint32","readUnsignedVarint32String","readSignedVarint32String","readZigzagVarint32","readUnsignedVarint64","readUnsignedVarint64String","readSignedVarint64","readSignedVarint64String","readZigzagVarint64","readZigzagVarintHash64","readZigzagVarint64String","readUint8","readUint16","readUint32","readUint64","readUint64String","readInt16","readInt32","readInt64","readInt64String","readFloat","readDouble","readEnum","readStringWithLength","readVarintHash64","readFixedHash64","decoder_","fieldCursor_","nextField_","nextWireType_","readCallbacks_","getFieldCursor","getWireType","isDelimited","unskipHeader","skipMatchingFields","skipVarintField","skipDelimitedField","skipFixed32Field","skipFixed64Field","skipGroup","registerReadCallback","runReadCallback","readAny","readFixed64","readFixed32","readSfixed32","readSfixed64","readSint32","readSint64","readGroup","getFieldDecoder","readInt32String","readUint32String","readSint64String","readFixed64String","readSfixed32String","readSfixed64String","readSintHash64","readPackedField_","readPackedInt32","readPackedInt32String","readPackedInt64","readPackedInt64String","readPackedUint32","readPackedUint32String","readPackedUint64","readPackedUint64String","readPackedSint32","readPackedSint64","readPackedSint64String","readPackedFixed32","readPackedFixed64","readPackedFixed64String","readPackedSfixed32","readPackedSfixed64","readPackedSfixed64String","readPackedFloat","readPackedDouble","readPackedBool","readPackedEnum","readPackedVarintHash64","readPackedFixedHash64","BinaryEncoder","buffer_","writeSplitVarint64","writeSplitFixed64","writeUint32","writeUnsignedVarint32","writeSignedVarint32","writeUnsignedVarint64","writeSignedVarint64","writeZigzagVarint32","writeZigzagVarint64","writeZigzagVarint64String","writeZigzagVarintHash64","writeUint8","writeUint16","writeUint64","writeInt16","writeInt32","writeInt64","writeInt64String","writeEnum","writeVarintHash64","writeFixedHash64","arith","UInt64","rightShift","leftShift","msb","lsb","mul32x32","Int64","blocks_","totalLength_","encoder_","bookmarks_","appendUint8Array_","beginDelimited_","writeFieldHeader_","endDelimited_","writeSerializedMessage","maybeWriteSerializedMessage","getResultBase64String","beginSubMessage","endSubMessage","writeAny","writeFixed64","writeFixed32","writeSfixed32","writeSfixed64","writeSint32","writeSint64","writeUnsignedVarint32_","writeSignedVarint32_","writeUnsignedVarint64_","writeSignedVarint64_","writeZigzagVarint32_","writeZigzagVarint64_","writeZigzagVarint64String_","writeZigzagVarintHash64_","writeInt32String","writeUint32String","writeUint64String","writeSintHash64","writeSint64String","writeFixed64String","writeSfixed64String","writeMessage","writeMessageSet","writeGroup","writeSplitZigzagVarint64","writeRepeatedInt32","writeRepeatedInt32String","writeRepeatedInt64","writeRepeatedSplitFixed64","writeRepeatedSplitVarint64","writeRepeatedSplitZigzagVarint64","writeRepeatedInt64String","writeRepeatedUint32","writeRepeatedUint32String","writeRepeatedUint64","writeRepeatedUint64String","writeRepeatedSint32","writeRepeatedSint64","writeRepeatedSint64String","writeRepeatedSintHash64","writeRepeatedFixed32","writeRepeatedFixed64","writeRepeatedFixed64String","writeRepeatedSfixed32","writeRepeatedSfixed64","writeRepeatedSfixed64String","writeRepeatedFloat","writeRepeatedDouble","writeRepeatedBool","writeRepeatedEnum","writeRepeatedString","writeRepeatedBytes","writeRepeatedGroup","writeRepeatedFixedHash64","writeRepeatedVarintHash64","writePackedInt32","writePackedInt32String","writePackedInt64","writePackedSplitFixed64","writePackedSplitVarint64","writePackedSplitZigzagVarint64","writePackedInt64String","writePackedUint32","writePackedUint32String","writePackedUint64","writePackedUint64String","writePackedSint32","writePackedSint64","writePackedSint64String","writePackedSintHash64","writePackedFixed32","writePackedFixed64","writePackedFixed64String","writePackedSfixed32","writePackedSfixed64","writePackedSfixed64String","writePackedFloat","writePackedDouble","writePackedBool","writePackedEnum","writePackedFixedHash64","writePackedVarintHash64","arr_","valueCtor_","map_","arrClean","loadFromArray_","Entry_","valueWrapper","stringKeys_","wrapEntry_","ArrayIteratorIterable_","idx_","getEntryList","ExtensionFieldInfo","fieldIndex","toObjectFn","isRepeated","ExtensionFieldBinaryInfo","fieldInfo","binaryReaderFn","binaryWriterFn","binaryMessageSerializeFn","binaryMessageDeserializeFn","isPacked","isMessageType","GENERATE_FROM_OBJECT","GENERATE_TO_STRING","ASSUME_LOCAL_ARRAYS","SERIALIZE_EMPTY_TRAILING_FIELDS","SUPPORTS_UINT8ARRAY_","getJsPbMessageId","messageId_","getIndex_","arrayIndexOffset_","hiddenES6Property_","getFieldNumber_","wrappers_","initPivotAndExtensionObject_","convertedPrimitiveFields_","repeatedFields","pivot_","EMPTY_LIST_SENTINEL_","maybeInitEmptyExtensionObject_","extensionObject_","computeOneofCase","isArray_","isExtensionObject_","MAX_VALUE","toObjectExtension","serializeBinaryExtensions","readBinaryExtension","getField","getRepeatedField","getOptionalFloatingPointField","getBooleanField","getRepeatedFloatingPointField","getRepeatedBooleanField","bytesListAsB64","assertConsistentTypes_","bytesListAsU8","getFloatingPointFieldWithDefault","getFieldProto3","getMapField","setField","setProto3IntField","setFieldIgnoringDefault_","setProto3FloatField","setProto3EnumField","setProto3StringIntField","addToRepeatedField","setOneofField","getWrapperField","wrapRepeatedField_","setWrapperField","setOneofWrapperField","toMap","syncMapFields_","getExtension","setExtension","compareFields","compareExtensions","cloneMessage","clone_","copyInto","registerMessageType","messageId","messageSetExtensions","messageSetExtensionsBinary","Export","pth","ZipEntry","ZipFile","_zip","INVALID_FILENAME","getEntry","readFileAsync","readAsText","readAsTextAsync","deleteFile","deleteEntry","addZipComment","getZipComment","addZipEntryComment","getZipEntryComment","updateFile","addLocalFile","localPath","zipPath","zipName","FILE_NOT_FOUND","addLocalFolder","findFiles","setEntry","extractEntryTo","targetPath","maintainEntryPath","overwrite","NO_ENTRY","getEntryChildren","CANT_EXTRACT_FILE","childName","writeFileTo","CANT_OVERRIDE","extractAllTo","NO_ZIP","makeDir","extractAllToAsync","writeFileToAsync","succ","writeZip","targetFileName","zipData","compressToBuffer","onSuccess","onFail","onItemStart","onItemEnd","toAsyncBuffer","PATH_SEPARATOR","FILE_IN_THE_WAY","methodToString","folder","findSync","recoursive","getAttributes","setAttributes","_path","_obj","directory","readonly","hidden","executable","_stat","decodeAttributes","encodeAttributes","_verMade","_version","_flags","_method","_time","_crc","_compressedSize","_size","_fnameLen","_extraLen","_comLen","_diskStart","_inattr","_attr","_dataHeader","setTime","fnameLen","extraLen","INVALID_LOC","INVALID_CEN","dataHeaderToBinary","_volumeEntries","_totalEntries","_commentLength","INVALID_END","toBinary","inbuf","zlib","Zstream","zlib_deflate","zlib_inflate","init_done","write_in_progress","pending_close","gzip_id_bytes_read","deflateEnd","strm","inflateEnd","in_off","in_len","out_off","out_len","avail_in","next_in","avail_out","next_out","_process","_checkError","_afterSync","_after","next_expected_header_byte","inflateSetDictionary","_error","_setDictionary","deflateInit2","Z_DEFLATED","inflateInit2","deflateSetDictionary","deflateReset","inflateReset","total_in","total_out","data_type","configuration_table","trees","adler32","flush_pending","pending_buf","pending_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","MAX_MATCH","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","ins_h","hash_shift","hash_mask","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","MIN_MATCH","last_lit","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","DeflateState","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","HEAP_SIZE","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","MAX_BITS","heap","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","deflateResetKeep","_tr_init","max_block_size","max_start","deflateInit","deflateSetHeader","old_flush","beg","hcrc","os","bstate","deflate_huff","deflate_rle","_tr_align","_tr_stored_block","avail","tmpDict","dictLength","deflateInfo","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","D_CODES","_dist_code","_length_code","base_length","static_l_desc","static_d_desc","static_bl_desc","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","dist","put_short","send_bits","send_code","bi_reverse","gen_codes","next_code","init_block","LITERALS","END_BLOCK","bi_windup","smaller","_n2","_m2","pqdownheap","compress_block","ltree","dtree","lx","build_tree","stree","xbits","overflow","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","stored_len","copy_block","LENGTH_CODES","L_CODES","tr_static_init","opt_lenb","static_lenb","max_blindex","black_mask","detect_data_type","BL_CODES","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","STATIC_TREES","bi_flush","inflate_fast","inflate_table","zswap32","InflateState","havedict","dmax","check","wbits","wsize","whave","wnext","hold","lencode","distcode","lenbits","distbits","ncode","nlen","ndist","work","lendyn","distdyn","sane","back","was","inflateResetKeep","inflateReset2","lenfix","distfix","virgin","fixedtables","updatewindow","inflateInit","_in","_out","from_source","here_bits","here_op","here_val","last_bits","last_op","last_val","here","hbuf","inf_leave","xflags","extra_len","inflateGetHeader","inflateInfo","s_window","lcode","dcode","lmask","dmask","top","dolen","dodist","lbase","lext","dbase","dext","lens_index","table_index","incr","drop","huff","base_index","MAXBITS","offs","extra_index","Z_TREES","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_BINARY","Z_TEXT","Z_UNKNOWN","inputType","entryList","entryTable","inBuffer","mainHeader","readMainHeader","endOffset","INVALID_FORMAT","diskEntries","entryHeaderSize","readEntries","totalEntries","_self","zipEntry","nameA","nameB","dataBlock","entryHeaders","dindex","entryNameLen","rawEntryName","postHeader","entryHeader","mainHeaderSize","outBuffer","mh","base64map","rotr","hexToBytes","bytesToBase64","triplet","imod4","isSlowBuffer","__this","this_i","that_j","cost","thisLength","thatLength","matrix","similarity","ResizeableBuffer","boms","__originalOptions","__normalizeOptions","underscore","CsvError","fnCastField","cast","cast_date","fnFirstLineToHeaders","normalizeColumnsArray","columns_duplicates_to_array","delimiter_json","from_line","ignore_last_delimiters","max_record_size","on_record","record_delimiter","relax","relax_column_count_less","relax_column_count_more","skip_empty_lines","skip_lines_with_empty_values","skip_lines_with_error","rtrim","ltrim","to_line","comment_lines","empty_lines","invalid_field_length","bomSkipped","bufBytesStart","castField","commenting","enabled","escaping","escapeIsQuote","expectedRecordLength","firstLineToHeaders","needMoreDataSize","previousBuf","quoting","rawBuffer","recordHasError","record_length","recordDelimiterMaxLength","trimChars","wasQuoting","wasRowDelimiter","nextBuf","bomLength","bufLen","__needMoreData","__autoDiscoverRecordDelimiter","chr","append","__isEscape","__isQuote","nextChr","isNextChrTrimable","__isCharTrimable","isNextChrComment","__compareBytes","isNextChrDelimiter","__isDelimiter","isNextChrRecordDelimiter","__isRecordDelimiter","__error","__infoField","recordDelimiterLength","__resetField","__resetRecord","errField","__onField","errRecord","__onRecord","delimiterLength","lappend","rappend","recordLength","isRecordEmpty","__firstLineToColumns","finalErr","disabled","__push","__infoRecord","normalizedHeaders","__cast","__isFloat","sourceBuf","targetBuf","targetPos","sourceLength","loop1","rdLength","__infoDataSet","isColumns","contexts","normalizedColumns","resize","bom_utf8","quoted","quoted_empty","quoted_match","quoted_string","eof","normalize_columns","chunk_string","chunkIsHeader","csvrecord","containsdelimiter","containsQuote","containsEscape","containsRecordDelimiter","quotedString","quotedMatch","shouldQuote","newcolumns","charCodeOfDot","reIsDeepProp","reIsPlainProp","getTag","castPath","isKey","expression","toKey","INFINITY","MixpanelGroups","MixpanelPeople","DEFAULT_CONFIG","verbose","create_client","metrics","query_params","request_options","request_base","encoded","api_key","URLSearchParams","properties","mp_lib","send_batch_requests","event_list","max_batch_size","max_concurrent_requests","event_batches","request_batches","total_event_batches","total_request_batches","send_event_batch","batch","send_next_request_batch","request_batch","send_event_request","track_batch","batch_options","import","import_batch","identify","identified_id","anon_id","$identified_id","$anon_id","people","set_config","Client","mp_instance","group_key","$group_key","$group_id","delete_group","union","unset","$distinct_id","increment","by","$add","$append","track_charge","$amount","clear_charges","delete_user","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","ERROR_MESSAGE","bound","binder","boundLength","boundArgs","Empty","getPolyfill","$exec","isRegexMarker","badStringifier","throwRegexMarker","toPrimitive","gOPD","flagsBound","TypeErr","tryDateObject","isBigInt","numToStr","tryNumberObject","$boolToStr","tryBooleanObject","symToStr","symStringRegex","isSymbolObject","bigIntValueOf","tryBigInt","$BigInt","isMap","isSet","isWeakMap","isWeakSet","$WeakMap","$WeakSet","$iterator","$arrayPush","$charCodeAt","$stringSlice","getArrayIterator","arraylike","getNonCollectionIterator","noPrimordialCollections","nextIndex","advanceStringIndex","$mapForEach","$setForEach","$mapIterator","$setIterator","getStopIterationIterator","$mapAtAtIterator","$setAtAtIterator","getCollectionIterator","$weakMapGet","$weakMapSet","$weakMapHas","$mapSet","listGetNode","$wm","$m","$o","listGet","listHas","listSet","hasMap","mapSizeDescriptor","mapSize","mapForEach","hasSet","setSizeDescriptor","setSize","setForEach","weakMapHas","weakSetHas","weakRefDeref","deref","booleanValueOf","functionToString","$match","$slice","$toUpperCase","$toLowerCase","$test","$join","$arrSlice","$floor","gOPS","symToString","hasShammedSymbols","addNumericSeparator","sepRegex","intStr","dec","inspectCustom","inspectSymbol","wrapQuotes","defaultStyle","quoteChar","quoteStyle","inspect_","maxStringLength","numericSeparator","inspectString","trailer","lowbyte","bigIntStr","maxDepth","baseIndent","getIndent","noIndent","newOpts","nameOf","arrObjKeys","symString","markBoxed","HTMLElement","isElement","attrs","attributes","childNodes","singleLineValues","indentedJoin","cause","mapParts","collectionOf","setParts","weakCollectionOf","isWeakRef","ys","isPlainObject","protoTag","stringTag","13","lineJoiner","isArr","symMap","availableTypedArrays","typedArrays","toStrTags","typedArray","isTypedArray","foundName","tryTypedArrays","anyTrue","normalizePathSep","mapAccountType","fillInBudgets","categoryBudgets","masterCategories","masterCategory","entityId","importBudgets","entityIdMap","monthlyBudgets","carryoverFlags","filled","monthlySubCategoryBudgets","isTombstone","catBudget","overspendingHandling","doImport","accountType","accountName","onBudget","importAccounts","masterCategoryId","importCategories","autoFillCategoryId","targetAccountId","importPayees","incomeCategoryId","getCategory","isOffBudget","transactionsGrouped","keyName","toImport","transferTransactionId","subTransactions","getFile","unixFilepath","getBudgetName","dirMatch","metaStr","budgetPath","relativeDataFolderName","deviceGUID","devices","hasFullKnowledge","shortName","shortDeviceId","recentness","knowledge","findLatestDevice","yfullPath","isExtendedLengthPath","hasNonAscii","get_Bool","get_Str","defaultOptions","noSort","filetools","fixPath","addLocalFolderAsync","er0","er1","addLocalFolderPromise","isStat","unix","getEntryCount","keepOriginalPermission","outFileName","fileAttr","dirEntries","fileEntries","dirAttr","filePath","err_1","err_2","writeZipPromise","toBufferPromise","fsystem","is_Obj","fpath","exist","crc32update","genCRCTable","safeSuffix","readBigUInt64LE","AVAIL_DATA","INVALID_DISTANCE","TO_MANY_CODES","INVALID_REPEAT_LEN","INVALID_REPEAT_FIRST","INCOMPLETE_CODES","INVALID_DYN_DISTANCE","INVALID_CODES_LEN","INVALID_STORE_BLOCK","INVALID_BLOCK_TYPE","NOT_IMPLEMENTED","isReadOnly","isHidden","isExecutable","mTime","aTime","made","inAttr","ZIP64SIZ","crctable","uMul","pCrc32","bval","genSalt","Initkeys","pw","updateKeys","byteValue","pwd","decrypter","make_decrypter","oldlike","encrypter","make_encrypter","_salter","loadedEntries","sortEntries","localeCompare","readNow","endStart","commentEnd","iterateEntries","compress2Buffer","entryLists","amountFromYnab","on_budget","incomeCatId","ynabIncomeCategories","checkSpecialCat","category_group_id","cats","newCategory","startingBalanceCatId","startingPayeeYNAB","subtransactionsGrouped","subtrans","import_id","transfer_transaction_id","transfer_account_id","internalCatIdYnab","creditcardCatIdYnab"],"mappings":"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ACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINlhD,IAAK,CACH9I,IAAK,EACLgqD,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,m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I,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJhd,GAAI,MACJid,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GA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","file":"kcab.worker.b16816d5632f095a8a84.js","sourcesContent":[" \tself[\"webpackChunkbackend\"] = function webpackChunkCallback(chunkIds, moreModules) {\n \t\tfor(var moduleId in moreModules) {\n \t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t}\n \t\twhile(chunkIds.length)\n \t\t\tinstalledChunks[chunkIds.pop()] = 1;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded chunks\n \t// \"1\" means \"already loaded\"\n \tvar installedChunks = {\n \t\t\"main\": 1\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n \t\tpromises.push(Promise.resolve().then(function() {\n \t\t\t// \"1\" is the signal for \"already loaded\"\n \t\t\tif(!installedChunks[chunkId]) {\n \t\t\t\timportScripts(__webpack_require__.p + \"\" + chunkId + \".kcab.worker.\" + \"b16816d5632f095a8a84\" + \".js\");\n \t\t\t}\n \t\t}));\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/kcab/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 285);\n","/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * var result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * var result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var argStr = Object.prototype.toString.call(argument)\n\n // Clone the date\n if (\n argument instanceof Date ||\n (typeof argument === 'object' && argStr === '[object Date]')\n ) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime())\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument)\n } else {\n if (\n (typeof argument === 'string' || argStr === '[object String]') &&\n typeof console !== 'undefined'\n ) {\n console.warn(\n \"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fpAk2\"\n )\n console.warn(new Error().stack)\n }\n return new Date(NaN)\n }\n}\n","export const SORT_INCREMENT = 16384;\n\nfunction midpoint(items, to) {\n const below = items[to - 1];\n const above = items[to];\n\n if (!below) {\n return above.sort_order / 2;\n } else if (!above) {\n return below.sort_order + SORT_INCREMENT;\n } else {\n return (below.sort_order + above.sort_order) / 2;\n }\n}\n\nexport function shoveSortOrders(items, targetId) {\n const to = items.findIndex(item => item.id === targetId);\n const target = items[to];\n const before = items[to - 1];\n let updates = [];\n\n // If no target is specified, append at the end\n if (!targetId || to === -1) {\n let order;\n if (items.length > 0) {\n // Add a new increment to whatever is the latest sort order\n order = items[items.length - 1].sort_order + SORT_INCREMENT;\n } else {\n // If no items exist, the default is to use the first increment\n order = SORT_INCREMENT;\n }\n\n return { updates, sort_order: order };\n } else {\n if (target.sort_order - (before ? before.sort_order : 0) <= 2) {\n let next = to;\n let order = (items[next].sort_order | 0) + SORT_INCREMENT;\n while (next < items.length) {\n // No need to update it if it's already greater than the current\n // order. This can happen because there may already be large\n // gaps\n if (order <= items[next].sort_order) {\n break;\n }\n\n updates.push({ id: items[next].id, sort_order: order });\n\n next++;\n order += SORT_INCREMENT;\n }\n }\n\n return { updates, sort_order: midpoint(items, to) };\n }\n}\n","import LRU from 'lru-cache';\nimport * as sqlite from '../../platform/server/sqlite';\nimport fs from '../../platform/server/fs';\nimport { sendMessages, batchMessages } from '../sync';\nimport { schema, schemaConfig } from '../aql/schema';\nimport {\n accountModel,\n categoryModel,\n categoryGroupModel,\n payeeModel,\n payeeRuleModel\n} from '../models';\nimport { groupById } from '../../shared/util';\nimport Timestamp, {\n makeClock,\n setClock,\n serializeClock,\n deserializeClock,\n makeClientId\n} from '../timestamp';\nimport {\n convertForInsert,\n convertForUpdate,\n convertFromSelect\n} from '../aql/schema-helpers';\nimport { shoveSortOrders, SORT_INCREMENT } from './sort';\n\nexport { toDateRepr, fromDateRepr } from '../models';\n\nconst uuid = require('../../platform/uuid');\n\nlet dbPath;\nlet db;\n\n// Util\n\nexport function getDatabasePath() {\n return dbPath;\n}\n\nexport async function openDatabase(id) {\n if (db) {\n await sqlite.closeDatabase(db);\n }\n\n dbPath = fs.join(fs.getBudgetDir(id), 'db.sqlite');\n setDatabase(await sqlite.openDatabase(dbPath));\n\n // await execQuery('PRAGMA journal_mode = WAL');\n}\n\nexport async function reopenDatabase() {\n await sqlite.closeDatabase(db);\n setDatabase(await sqlite.openDatabase(dbPath));\n}\n\nexport async function closeDatabase() {\n if (db) {\n await sqlite.closeDatabase(db);\n setDatabase(null);\n }\n}\n\nexport function setDatabase(db_) {\n db = db_;\n resetQueryCache();\n}\n\nexport function getDatabase() {\n return db;\n}\n\nexport async function loadClock() {\n let row = await first('SELECT * FROM messages_clock');\n if (row) {\n let clock = deserializeClock(row.clock);\n setClock(clock);\n } else {\n // No clock exists yet (first run of the app), so create a default\n // one.\n let timestamp = new Timestamp(0, 0, makeClientId());\n let clock = makeClock(timestamp);\n setClock(clock);\n\n await runQuery('INSERT INTO messages_clock (id, clock) VALUES (?, ?)', [\n 1,\n serializeClock(clock)\n ]);\n }\n}\n\n// Functions\n\nexport function runQuery(sql, params, fetchAll) {\n // const unrecord = perf.record('sqlite');\n const result = sqlite.runQuery(db, sql, params, fetchAll);\n // unrecord();\n return result;\n}\n\nexport function execQuery(sql) {\n sqlite.execQuery(db, sql);\n}\n\n// This manages an LRU cache of prepared query statements. This is\n// only needed in hot spots when you are running lots of queries.\nlet _queryCache = new LRU({ max: 100 });\nexport function cache(sql) {\n let cached = _queryCache.get(sql);\n if (cached) {\n return cached;\n }\n\n let prepared = sqlite.prepare(db, sql);\n _queryCache.set(sql, prepared);\n return prepared;\n}\n\nfunction resetQueryCache() {\n _queryCache = new LRU({ max: 100 });\n}\n\nexport function transaction(fn) {\n return sqlite.transaction(db, fn);\n}\n\nexport function asyncTransaction(fn) {\n return sqlite.asyncTransaction(db, fn);\n}\n\n// This function is marked as async because `runQuery` is no longer\n// async. We return a promise here until we've audited all the code to\n// make sure nothing calls `.then` on this.\nexport async function all(sql, params) {\n return runQuery(sql, params, true);\n}\n\nexport async function first(sql, params) {\n const arr = await runQuery(sql, params, true);\n return arr.length === 0 ? null : arr[0];\n}\n\n// The underlying sql system is now sync, but we can't update `first` yet\n// without auditing all uses of it\nexport function firstSync(sql, params) {\n const arr = runQuery(sql, params, true);\n return arr.length === 0 ? null : arr[0];\n}\n\n// This function is marked as async because `runQuery` is no longer\n// async. We return a promise here until we've audited all the code to\n// make sure nothing calls `.then` on this.\nexport async function run(sql, params) {\n return runQuery(sql, params);\n}\n\nexport async function select(table, id) {\n const rows = await runQuery(\n 'SELECT * FROM ' + table + ' WHERE id = ?',\n [id],\n true\n );\n return rows[0];\n}\n\nexport async function update(table, params) {\n let fields = Object.keys(params).filter(k => k !== 'id');\n\n if (params.id == null) {\n throw new Error('update: id is required');\n }\n\n await sendMessages(\n fields.map(k => {\n return {\n dataset: table,\n row: params.id,\n column: k,\n value: params[k],\n timestamp: Timestamp.send()\n };\n })\n );\n}\n\nexport async function insertWithUUID(table, row) {\n if (!row.id) {\n row = { ...row, id: uuid.v4Sync() };\n }\n\n await insert(table, row);\n\n // We can't rely on the return value of insert because if the\n // primary key is text, sqlite returns the internal row id which we\n // don't care about. We want to return the generated UUID.\n return row.id;\n}\n\nexport async function insert(table, row) {\n let fields = Object.keys(row).filter(k => k !== 'id');\n\n if (row.id == null) {\n throw new Error('insert: id is required');\n }\n\n await sendMessages(\n fields.map(k => {\n return {\n dataset: table,\n row: row.id,\n column: k,\n value: row[k],\n timestamp: Timestamp.send()\n };\n })\n );\n}\n\nexport async function delete_(table, id) {\n await sendMessages([\n {\n dataset: table,\n row: id,\n column: 'tombstone',\n value: 1,\n timestamp: Timestamp.send()\n }\n ]);\n}\n\nexport async function selectWithSchema(table, sql, params) {\n let rows = await runQuery(sql, params, true);\n return rows\n .map(row => convertFromSelect(schema, schemaConfig, table, row))\n .filter(Boolean);\n}\n\nexport async function selectFirstWithSchema(table, sql, params) {\n let rows = await selectWithSchema(table, sql, params);\n return rows.length > 0 ? rows[0] : null;\n}\n\nexport function insertWithSchema(table, row) {\n // Even though `insertWithUUID` does this, we need to do it here so\n // the schema validation passes\n if (!row.id) {\n row = { ...row, id: uuid.v4Sync() };\n }\n\n return insertWithUUID(\n table,\n convertForInsert(schema, schemaConfig, table, row)\n );\n}\n\nexport function updateWithSchema(table, fields) {\n return update(table, convertForUpdate(schema, schemaConfig, table, fields));\n}\n\n// Data-specific functions. Ideally this would be split up into\n// different files\n\nexport async function getCategories() {\n return all(`\n SELECT c.* FROM categories c\n LEFT JOIN category_groups cg ON c.cat_group = cg.id\n WHERE c.tombstone = 0\n ORDER BY cg.sort_order, cg.id, c.sort_order, c.id\n `);\n}\n\nexport async function getCategoriesGrouped() {\n const groups = await all(\n 'SELECT * FROM category_groups WHERE tombstone = 0 ORDER BY is_income, sort_order, id'\n );\n const rows = await all(`\n SELECT * FROM categories WHERE tombstone = 0\n ORDER BY sort_order, id\n `);\n\n return groups.map(group => {\n return {\n ...group,\n categories: rows.filter(row => row.cat_group === group.id)\n };\n });\n}\n\nexport async function insertCategoryGroup(group) {\n const lastGroup = await first(`\n SELECT sort_order FROM category_groups WHERE tombstone = 0 ORDER BY sort_order DESC, id DESC LIMIT 1\n `);\n const sort_order = (lastGroup ? lastGroup.sort_order : 0) + SORT_INCREMENT;\n\n group = {\n ...categoryGroupModel.validate(group),\n sort_order: sort_order\n };\n return insertWithUUID('category_groups', group);\n}\n\nexport function updateCategoryGroup(group) {\n group = categoryGroupModel.validate(group, { update: true });\n return update('category_groups', group);\n}\n\nexport async function moveCategoryGroup(id, targetId) {\n const groups = await all(\n `SELECT id, sort_order FROM category_groups WHERE tombstone = 0 ORDER BY sort_order, id`\n );\n\n const { updates, sort_order } = shoveSortOrders(groups, targetId);\n for (let info of updates) {\n await update('category_groups', info);\n }\n await update('category_groups', { id, sort_order });\n}\n\nexport async function deleteCategoryGroup(group, transferId) {\n const categories = await all('SELECT * FROM categories WHERE cat_group = ?', [\n group.id\n ]);\n\n // Delete all the categories within a group\n await Promise.all(categories.map(cat => deleteCategory(cat, transferId)));\n await delete_('category_groups', group.id);\n}\n\nexport async function insertCategory(category, { atEnd } = {}) {\n let sort_order;\n\n let id_;\n await batchMessages(async () => {\n if (atEnd) {\n const lastCat = await first(`\n SELECT sort_order FROM categories WHERE tombstone = 0 ORDER BY sort_order DESC, id DESC LIMIT 1\n `);\n sort_order = (lastCat ? lastCat.sort_order : 0) + SORT_INCREMENT;\n } else {\n // Unfortunately since we insert at the beginning, we need to shove\n // the sort orders to make sure there's room for it\n const categories = await all(\n `SELECT id, sort_order FROM categories WHERE cat_group = ? AND tombstone = 0 ORDER BY sort_order, id`,\n [category.cat_group]\n );\n\n const { updates, sort_order: order } = shoveSortOrders(\n categories,\n categories.length > 0 ? categories[0].id : null\n );\n for (let info of updates) {\n await update('categories', info);\n }\n sort_order = order;\n }\n\n category = {\n ...categoryModel.validate(category),\n sort_order: sort_order\n };\n\n const id = await insertWithUUID('categories', category);\n // Create an entry in the mapping table that points it to itself\n await insert('category_mapping', { id, transferId: id });\n id_ = id;\n });\n return id_;\n}\n\nexport function updateCategory(category) {\n category = categoryModel.validate(category, { update: true });\n return update('categories', category);\n}\n\nexport async function moveCategory(id, groupId, targetId) {\n if (!groupId) {\n throw new Error('moveCategory: groupId is required');\n }\n\n const categories = await all(\n `SELECT id, sort_order FROM categories WHERE cat_group = ? AND tombstone = 0 ORDER BY sort_order, id`,\n [groupId]\n );\n\n const { updates, sort_order } = shoveSortOrders(categories, targetId);\n for (let info of updates) {\n await update('categories', info);\n }\n await update('categories', { id, sort_order, cat_group: groupId });\n}\n\nexport async function deleteCategory(category, transferId) {\n if (transferId) {\n // We need to update all the deleted categories that currently\n // point to the one we're about to delete so they all are\n // \"forwarded\" to the new transferred category.\n const existingTransfers = await all(\n 'SELECT * FROM category_mapping WHERE transferId = ?',\n [category.id]\n );\n for (let mapping of existingTransfers) {\n await update('category_mapping', { id: mapping.id, transferId });\n }\n\n // Finally, map the category we're about to delete to the new one\n await update('category_mapping', { id: category.id, transferId });\n }\n\n return delete_('categories', category.id);\n}\n\nexport async function getPayee(id) {\n return first(`SELECT * FROM payees WHERE id = ?`, [id]);\n}\n\nexport async function insertPayee(payee) {\n payee = payeeModel.validate(payee);\n let id;\n await batchMessages(async () => {\n id = await insertWithUUID('payees', payee);\n await insert('payee_mapping', { id, targetId: id });\n });\n return id;\n}\n\nexport async function deletePayee(payee) {\n let { transfer_acct } = await first('SELECT * FROM payees WHERE id = ?', [\n payee.id\n ]);\n if (transfer_acct) {\n // You should never be able to delete transfer payees\n return;\n }\n\n // let mappings = await all('SELECT id FROM payee_mapping WHERE targetId = ?', [\n // payee.id\n // ]);\n // await Promise.all(\n // mappings.map(m => update('payee_mapping', { id: m.id, targetId: null }))\n // );\n\n let rules = await all('SELECT * FROM payee_rules WHERE payee_id = ?', [\n payee.id\n ]);\n await Promise.all(rules.map(rule => deletePayeeRule({ id: rule.id })));\n return delete_('payees', payee.id);\n}\n\nexport async function deleteTransferPayee(payee) {\n // This allows deleting transfer payees\n return delete_('payees', payee.id);\n}\n\nexport function updatePayee(payee) {\n payee = payeeModel.validate(payee, { update: true });\n return update('payees', payee);\n}\n\nexport async function mergePayees(target, ids) {\n // Load in payees so we can check some stuff\n let payees = groupById(await all('SELECT * FROM payees'));\n\n // Filter out any transfer payees\n if (payees[target].transfer_acct != null) {\n return;\n }\n ids = ids.filter(id => payees[id].transfer_acct == null);\n\n await batchMessages(async () => {\n await Promise.all(\n ids.map(async id => {\n let mappings = await all(\n 'SELECT id FROM payee_mapping WHERE targetId = ?',\n [id]\n );\n await Promise.all(\n mappings.map(m =>\n update('payee_mapping', { id: m.id, targetId: target })\n )\n );\n })\n );\n\n return Promise.all(\n ids.map(id =>\n Promise.all([\n update('payee_mapping', { id, targetId: target }),\n delete_('payees', id)\n ])\n )\n );\n });\n}\n\nexport function getPayees() {\n return all(`\n SELECT p.*, COALESCE(a.name, p.name) AS name FROM payees p\n LEFT JOIN accounts a ON (p.transfer_acct = a.id AND a.tombstone = 0)\n WHERE p.tombstone = 0 AND (p.transfer_acct IS NULL OR a.id IS NOT NULL)\n ORDER BY p.transfer_acct IS NULL DESC, p.name COLLATE NOCASE\n `);\n}\n\nexport async function getOrphanedPayees() {\n let rows = await all(`\n SELECT p.id FROM payees p\n LEFT JOIN payee_mapping pm ON pm.id = p.id\n LEFT JOIN v_transactions_internal_alive t ON t.payee = pm.targetId\n WHERE p.tombstone = 0 AND p.transfer_acct IS NULL AND t.id IS NULL\n `);\n return rows.map(row => row.id);\n}\n\nexport async function getPayeeByName(name) {\n return first(`SELECT * FROM payees WHERE LOWER(name) = ? AND tombstone = 0`, [\n name.toLowerCase()\n ]);\n}\n\nexport function insertPayeeRule(rule) {\n rule = payeeRuleModel.validate(rule);\n return insertWithUUID('payee_rules', rule);\n}\n\nexport function deletePayeeRule(rule) {\n return delete_('payee_rules', rule.id);\n}\n\nexport function updatePayeeRule(rule) {\n rule = payeeModel.validate(rule, { update: true });\n return update('payee_rules', rule);\n}\n\nexport function getPayeeRules(id) {\n return all(\n `SELECT pr.* FROM payee_rules pr\n LEFT JOIN payee_mapping pm ON pm.id = pr.payee_id\n WHERE pm.targetId = ? AND pr.tombstone = 0`,\n [id]\n );\n}\n\nexport function getAccounts() {\n return all(\n `SELECT a.*, b.name as bankName, b.id as bankId FROM accounts a\n LEFT JOIN banks b ON a.bank = b.id\n WHERE a.tombstone = 0\n ORDER BY sort_order, name`\n );\n}\n\nexport async function insertAccount(account) {\n // Default to checking. Makes it a lot easier for tests and is\n // generally harmless.\n if (account.type === undefined) {\n account = { ...account, type: 'checking' };\n }\n\n const accounts = await all(\n 'SELECT * FROM accounts WHERE offbudget = ? ORDER BY sort_order, name',\n [account.offbudget != null ? account.offbudget : 0]\n );\n\n // Don't pass a target in, it will default to appending at the end\n let { sort_order } = shoveSortOrders(accounts);\n\n account = accountModel.validate({ ...account, sort_order });\n return insertWithUUID('accounts', account);\n}\n\nexport function updateAccount(account) {\n account = accountModel.validate(account, { update: true });\n return update('accounts', account);\n}\n\nexport function deleteAccount(account) {\n return delete_('accounts', account.id);\n}\n\nexport async function moveAccount(id, targetId) {\n let account = await first('SELECT * FROM accounts WHERE id = ?', [id]);\n let accounts;\n if (account.closed) {\n accounts = await all(\n `SELECT id, sort_order FROM accounts WHERE closed = 1 ORDER BY sort_order, name`\n );\n } else {\n accounts = await all(\n `SELECT id, sort_order FROM accounts WHERE tombstone = 0 AND offbudget = ? ORDER BY sort_order, name`,\n [account.offbudget]\n );\n }\n\n const { updates, sort_order } = shoveSortOrders(accounts, targetId);\n await batchMessages(() => {\n for (let info of updates) {\n update('accounts', info);\n }\n update('accounts', { id, sort_order });\n });\n}\n\nexport async function getTransaction(id) {\n let rows = await selectWithSchema(\n 'transactions',\n 'SELECT * FROM v_transactions WHERE id = ?',\n [id]\n );\n return rows[0];\n}\n\nfunction _addFragmentForAccount(accountId, addWhere, options = {}) {\n let { showClosed = false, showOffbudget = true } = options;\n\n let fragment = addWhere ? ' WHERE (' : ' AND ';\n let params = [];\n\n if (accountId) {\n if (accountId === 'offbudget') {\n fragment += 'a.closed = 0 AND a.offbudget = 1 ';\n } else if (accountId === 'budgeted') {\n fragment += 'a.closed = 0 AND a.offbudget = 0 ';\n } else if (accountId === 'uncategorized') {\n fragment += `\n t.category IS NULL AND a.offbudget = 0 AND isParent = 0 AND (\n ta.offbudget IS NULL OR ta.offbudget = 1\n )\n `;\n } else {\n fragment += 'a.id = ? ';\n params.push(accountId);\n }\n } else {\n fragment += showClosed ? '1' : 'a.closed = 0';\n\n if (!showOffbudget) {\n fragment += ' AND a.offbudget = 0';\n }\n }\n\n return { fragment, params };\n}\n\nexport async function getTransactionsByDate(\n accountId,\n startDate,\n endDate,\n options = {}\n) {\n throw new Error('`getTransactionsByDate` is deprecated');\n}\n\nexport async function getTransactions(accountId, arg2) {\n if (arg2 !== undefined) {\n throw new Error(\n '`getTransactions` was given a second argument, it now only takes a single argument `accountId`'\n );\n }\n\n return selectWithSchema(\n 'transactions',\n 'SELECT * FROM v_transactions WHERE account = ?',\n [accountId]\n );\n}\n\nexport function insertTransaction(transaction) {\n return insertWithSchema('transactions', transaction);\n}\n\nexport function updateTransaction(transaction) {\n return updateWithSchema('transactions', transaction);\n}\n\nexport async function deleteTransaction(transaction) {\n return delete_('transactions', transaction.id);\n}\n","import * as d from 'date-fns';\nimport memoizeOne from 'memoize-one';\n\nfunction _parse(value) {\n if (typeof value === 'string') {\n // Dates are hard. We just want to deal with months in the format\n // 2020-01 and days in the format 2020-01-01, but life is never\n // simple. We want to rely on native dates for date logic because\n // days are complicated (leap years, etc). But relying on native\n // dates mean we're exposed to craziness.\n //\n // The biggest problem is that JS dates work with local time by\n // default. We could try to only work with UTC, but there's not an\n // easy way to make `format` avoid local time, and not sure if we\n // want that anyway (`currentMonth` should surely print the local\n // time). We need to embrace local time, and as long as inputs to\n // date logic and outputs from format are local time, it should\n // work.\n //\n // To make sure we're in local time, always give Date integer\n // values. If you pass in a string to parse, different string\n // formats produce different results.\n //\n // A big problem is daylight savings, however. Usually, when\n // giving the time to the Date constructor, you get back a date\n // specifically for that time in your local timezone. However, if\n // daylight savings occurs on that exact time, you will get back\n // something different:\n //\n // This is fine:\n // > new Date(2017, 2, 12, 1).toString()\n // > 'Sun Mar 12 2017 01:00:00 GMT-0500 (Eastern Standard Time)'\n //\n // But wait, we got back a different time (3AM instead of 2AM):\n // > new Date(2017, 2, 12, 2).toString()\n // > 'Sun Mar 12 2017 03:00:00 GMT-0400 (Eastern Daylight Time)'\n //\n // The time is \"correctly\" adjusted via DST, but we _really_\n // wanted 2AM. The problem is that time simply doesn't exist.\n //\n // Why is this a problem? Well, consider a case where the DST\n // shift happens *at midnight* and it goes back an hour. You think\n // you have a date object for the next day, but when formatted it\n // actually shows the previous day. A more likely scenario: buggy\n // timezone data makes JS dates do this shift when it shouldn't,\n // so using midnight at the time for date logic gives back the\n // last day. See the time range of Sep 30 15:00 - Oct 1 1:00 for\n // the AEST timezone when nodejs-mobile incorrectly gives you back\n // a time an hour *before* you specified. Since this happens on\n // Oct 1, doing `addMonths(September, 1)` still gives you back\n // September. Issue here:\n // https://github.com/JaneaSystems/nodejs-mobile/issues/251\n //\n // The fix is simple once you understand this. Always use the 12th\n // hour of the day. That's it. There is no DST that shifts more\n // than 12 hours (god let's hope not) so no matter how far DST has\n // shifted backwards or forwards, doing date logic will stay\n // within the day we want.\n\n let [year, month, day] = value.split('-');\n if (day != null) {\n return new Date(parseInt(year), parseInt(month) - 1, parseInt(day), 12);\n } else if (month != null) {\n return new Date(parseInt(year), parseInt(month) - 1, 1, 12);\n } else {\n return new Date(parseInt(year), 0, 1, 12);\n }\n }\n return value;\n}\n\nexport const parseDate = _parse;\n\nexport function yearFromDate(date) {\n return d.format(_parse(date), 'yyyy');\n}\n\nexport function monthFromDate(date) {\n return d.format(_parse(date), 'yyyy-MM');\n}\n\nexport function dayFromDate(date) {\n return d.format(_parse(date), 'yyyy-MM-dd');\n}\n\nexport function currentMonth() {\n if (global.IS_TESTING) {\n return '2017-01';\n } else {\n return d.format(new Date(), 'yyyy-MM');\n }\n}\n\nexport function currentDay() {\n if (global.IS_TESTING) {\n return '2017-01-01';\n } else {\n return d.format(new Date(), 'yyyy-MM-dd');\n }\n}\n\nexport function nextMonth(month) {\n return d.format(d.addMonths(_parse(month), 1), 'yyyy-MM');\n}\n\nexport function prevMonth(month) {\n return d.format(d.subMonths(_parse(month), 1), 'yyyy-MM');\n}\n\nexport function addMonths(month, n) {\n return d.format(d.addMonths(_parse(month), n), 'yyyy-MM');\n}\n\nexport function subMonths(month, n) {\n return d.format(d.subMonths(_parse(month), n), 'yyyy-MM');\n}\n\nexport function addDays(day, n) {\n return d.format(d.addDays(_parse(day), n), 'yyyy-MM-dd');\n}\n\nexport function subDays(day, n) {\n return d.format(d.subDays(_parse(day), n), 'yyyy-MM-dd');\n}\n\nexport function isBefore(month1, month2) {\n return d.isBefore(_parse(month1), _parse(month2));\n}\n\nexport function isAfter(month1, month2) {\n return d.isAfter(_parse(month1), _parse(month2));\n}\n\n// TODO: This doesn't really fit in this module anymore, should\n// probably live elsewhere\nexport function bounds(month) {\n return {\n start: parseInt(d.format(d.startOfMonth(_parse(month)), 'yyyyMMdd')),\n end: parseInt(d.format(d.endOfMonth(_parse(month)), 'yyyyMMdd'))\n };\n}\n\nexport function _range(start, end, inclusive) {\n const months = [];\n let month = monthFromDate(start);\n while (d.isBefore(_parse(month), _parse(end))) {\n months.push(month);\n month = addMonths(month, 1);\n }\n\n if (inclusive) {\n months.push(month);\n }\n\n return months;\n}\n\nexport function range(start, end) {\n return _range(start, end);\n}\n\nexport function rangeInclusive(start, end) {\n return _range(start, end, true);\n}\n\nexport function _dayRange(start, end, inclusive) {\n const days = [];\n let day = start;\n while (d.isBefore(_parse(day), _parse(end))) {\n days.push(day);\n day = addDays(day, 1);\n }\n\n if (inclusive) {\n days.push(day);\n }\n\n return days;\n}\n\nexport function dayRange(start, end) {\n return _dayRange(start, end);\n}\n\nexport function dayRangeInclusive(start, end) {\n return _dayRange(start, end, true);\n}\n\nexport function getMonthIndex(month) {\n return parseInt(month.slice(5, 7)) - 1;\n}\n\nexport function getYear(month) {\n return month.slice(0, 4);\n}\n\nexport function getMonth(day) {\n return day.slice(0, 7);\n}\n\nexport function getYearStart(month) {\n return getYear(month) + '-01';\n}\n\nexport function getYearEnd(month) {\n return getYear(month) + '-12';\n}\n\nexport function sheetForMonth(month) {\n return 'budget' + month.replace('-', '');\n}\n\nexport function nameForMonth(month) {\n return d.format(_parse(month), \"MMMM 'yy\");\n}\n\nexport function format(month, str) {\n return d.format(_parse(month), str);\n}\n\nexport const getDateFormatRegex = memoizeOne(format => {\n return new RegExp(\n format\n .replace(/d+/g, '\\\\d{1,2}')\n .replace(/M+/g, '\\\\d{1,2}')\n .replace(/y+/g, '\\\\d{4}')\n );\n});\n\nexport const getDayMonthFormat = memoizeOne(format => {\n return format\n .replace(/y+/g, '')\n .replace(/[^\\w]$/, '')\n .replace(/^[^\\w]/, '');\n});\n\nexport const getDayMonthRegex = memoizeOne(format => {\n let regex = format\n .replace(/y+/g, '')\n .replace(/[^\\w]$/, '')\n .replace(/^[^\\w]/, '')\n .replace(/d+/g, '\\\\d{1,2}')\n .replace(/M+/g, '\\\\d{1,2}');\n return new RegExp('^' + regex + '$');\n});\n\nexport const getMonthYearFormat = memoizeOne(format => {\n return format\n .replace(/d+/g, '')\n .replace(/[^\\w]$/, '')\n .replace(/^[^\\w]/, '')\n .replace(/\\/\\//, '/')\n .replace(/\\.\\./, '.')\n .replace(/--/, '-');\n});\n\nexport const getMonthYearRegex = memoizeOne(format => {\n let regex = format\n .replace(/d+/g, '')\n .replace(/[^\\w]$/, '')\n .replace(/^[^\\w]/, '')\n .replace(/\\/\\//, '/')\n .replace(/M+/g, '\\\\d{1,2}')\n .replace(/y+/g, '\\\\d{2,4}');\n return new RegExp('^' + regex + '$');\n});\n\nexport const getShortYearFormat = memoizeOne(format => {\n return format.replace(/y+/g, 'yy');\n});\n\nexport const getShortYearRegex = memoizeOne(format => {\n let regex = format\n .replace(/[^\\w]$/, '')\n .replace(/^[^\\w]/, '')\n .replace(/d+/g, '\\\\d{1,2}')\n .replace(/M+/g, '\\\\d{1,2}')\n .replace(/y+/g, '\\\\d{2}');\n return new RegExp('^' + regex + '$');\n});\n","export default function toInteger (dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN\n }\n\n var number = Number(dirtyNumber)\n\n if (isNaN(number)) {\n return number\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number)\n}\n","let { SQLiteFS } = require('absurd-sql');\nlet IndexedDBBackend = require('absurd-sql/dist/indexeddb-backend').default;\nlet connection = require('../connection');\nlet { _getModule } = require('../sqlite');\nlet idb = require('../indexeddb');\nlet baseAPI = require('./index.electron.js');\nlet join = require('./path-join');\n\nlet FS = null;\nlet BFS = null;\n// let NO_PERSIST = process.env.IS_BETA === true;\nlet NO_PERSIST = false;\n\nfunction pathToId(filepath) {\n return filepath.replace(/^\\//, '').replace(/\\//g, '-');\n}\n\nfunction _exists(filepath) {\n try {\n FS.stat(filepath);\n } catch (e) {\n return false;\n }\n return true;\n}\n\nfunction _mkdirRecursively(dir) {\n let parts = dir.split('/').filter(str => str !== '');\n let path = '';\n for (let part of parts) {\n path += '/' + part;\n if (!_exists(path)) {\n FS.mkdir(path);\n }\n }\n}\n\nfunction _createFile(filepath) {\n // This can create the file. Check if it exists, if not create a\n // symlink if it's a sqlite file. Otherwise store in idb\n\n if (!NO_PERSIST && filepath.startsWith('/documents')) {\n if (filepath.endsWith('.sqlite')) {\n // If it doesn't exist, we need to create a symlink\n if (!_exists(filepath)) {\n FS.symlink('/blocked/' + pathToId(filepath), filepath);\n }\n } else {\n // The contents are actually stored in IndexedDB. We only write to\n // the in-memory fs to take advantage of the file hierarchy\n FS.writeFile(filepath, '!$@) this should never read !$@)');\n }\n }\n\n return filepath;\n}\n\nasync function _readFile(filepath, opts) {\n // We persist stuff in /documents, but don't need to handle sqlite\n // file specifically because those are symlinked to a separate\n // filesystem and will be handled in the BlockedFS\n if (\n !NO_PERSIST &&\n filepath.startsWith('/documents') &&\n !filepath.endsWith('.sqlite')\n ) {\n if (!_exists(filepath)) {\n throw new Error('File does not exist: ' + filepath);\n }\n\n // Grab contents from IDB\n let { store } = idb.getStore(await idb.getDatabase(), 'files');\n let item = await idb.get(store, filepath);\n\n if (item == null) {\n throw new Error('File does not exist: ' + filepath);\n }\n\n if (opts.encoding === 'utf8' && ArrayBuffer.isView(item.contents)) {\n return String.fromCharCode.apply(\n null,\n new Uint16Array(item.contents.buffer)\n );\n }\n\n return item.contents;\n } else {\n return FS.readFile(resolveLink(filepath), opts);\n }\n}\n\nfunction resolveLink(path) {\n try {\n let { node } = FS.lookupPath(path, { follow: false });\n return node.link ? FS.readlink(path) : path;\n } catch (e) {\n return path;\n }\n}\n\nasync function _writeFile(filepath, contents) {\n if (contents instanceof ArrayBuffer) {\n contents = new Uint8Array(contents);\n } else if (ArrayBuffer.isView(contents)) {\n contents = new Uint8Array(contents.buffer);\n }\n\n // We always create the file if it doesn't exist, and this function\n // setups up the file depending on its type\n _createFile(filepath);\n\n if (!NO_PERSIST && filepath.startsWith('/documents')) {\n let isDb = filepath.endsWith('.sqlite');\n\n // Write to IDB\n let { store } = idb.getStore(await idb.getDatabase(), 'files');\n\n if (isDb) {\n // We never write the contents of the database to idb ourselves.\n // It gets handled via a symlink to the blocked fs (created by\n // `_createFile` above). However, we still need to record an\n // entry for the db file so the fs gets properly constructed on\n // startup\n await idb.set(store, { filepath, contents: '' });\n\n // Actually persist the data by going the FS, which will pass\n // the data through the symlink to the blocked fs. For some\n // reason we need to resolve symlinks ourselves.\n await Promise.resolve();\n FS.writeFile(resolveLink(filepath), contents);\n } else {\n await idb.set(store, { filepath, contents });\n }\n } else {\n FS.writeFile(resolveLink(filepath), contents);\n }\n}\n\nasync function _removeFile(filepath) {\n if (!NO_PERSIST && filepath.startsWith('/documents')) {\n let isDb = filepath.endsWith('.sqlite');\n\n // Remove from IDB\n let { store } = idb.getStore(await idb.getDatabase(), 'files');\n await idb.del(store, filepath);\n\n // If this is the database, is has been symlinked and we want to\n // remove the actual contents\n if (isDb) {\n let linked = resolveLink(filepath);\n // Be resilient to fs corruption: don't throw an error by trying\n // to remove a file that doesn't exist. For some reason the db\n // file is gone? It's ok, just ignore it\n if (_exists(linked)) {\n FS.unlink(linked);\n }\n }\n }\n\n // Finally, remove any in-memory instance\n FS.unlink(filepath);\n}\n\n// Load files from the server that should exist by default\nasync function populateDefaultFilesystem() {\n let index = await (await fetch(\n process.env.PUBLIC_URL + 'data-file-index.txt'\n )).text();\n let files = index\n .split('\\n')\n .map(name => name.trim())\n .filter(name => name !== '');\n let fetchFile = url => fetch(url).then(res => res.arrayBuffer());\n\n // This is hardcoded. We know we must create the migrations\n // directory, it's not worth complicating the index to support\n // creating arbitrary folders.\n await mkdir('/migrations');\n await mkdir('/demo-budget');\n\n await Promise.all(\n files.map(async file => {\n let contents = await fetchFile(process.env.PUBLIC_URL + 'data/' + file);\n _writeFile('/' + file, contents);\n })\n );\n}\n\nasync function populateFileHeirarchy() {\n let { store } = idb.getStore(await idb.getDatabase(), 'files');\n let req = store.getAllKeys();\n let paths = await new Promise((resolve, reject) => {\n req.onsuccess = e => resolve(e.target.result);\n req.onerror = e => reject(e);\n });\n\n for (let path of paths) {\n _mkdirRecursively(basename(path));\n _createFile(path);\n }\n}\n\nasync function init() {\n let Module = _getModule();\n FS = Module.FS;\n\n // When a user \"uploads\" a file, we just put it in memory in this\n // dir and the backend takes it from there\n FS.mkdir('/uploads');\n\n // Files in /documents are actually read/written from idb.\n // Everything in there is automatically persisted\n FS.mkdir('/documents');\n\n // Files in /blocked are handled by the BlockedFS, which is a\n // special fs that persists files in blocks. This is necessary\n // for sqlite3\n FS.mkdir('/blocked');\n\n // Jest doesn't support workers. Right now we disable the blocked fs\n // backend under testing and just test that the directory structure\n // is created correctly. We assume the the absurd-sql project tests\n // the blocked fs enough. Additionally, we don't populate the\n // default files in testing.\n if (!global.__TESTING__) {\n let backend = new IndexedDBBackend(() => {\n connection.send('fallback-write-error');\n });\n BFS = new SQLiteFS(FS, backend);\n Module.register_for_idb(BFS);\n\n FS.mount(BFS, {}, '/blocked');\n\n await populateDefaultFilesystem();\n }\n\n await populateFileHeirarchy();\n}\n\nfunction shutdown() {\n BFS.backend.shutdown();\n}\n\nfunction basename(filepath) {\n let parts = filepath.split('/');\n return parts.slice(0, -1).join('/');\n}\n\nasync function listDir(filepath) {\n let paths = FS.readdir(filepath);\n return paths.filter(p => p !== '.' && p !== '..');\n}\n\nasync function exists(filepath) {\n return _exists(filepath);\n}\n\nasync function mkdir(filepath) {\n FS.mkdir(filepath);\n}\n\nasync function size(filepath) {\n let attrs = FS.stat(resolveLink(filepath));\n return attrs.size;\n}\n\nasync function copyFile(frompath, topath) {\n // TODO: This reads the whole file into memory, but that's probably\n // not a problem. This could be optimized\n let contents = await _readFile(frompath);\n return _writeFile(topath, contents);\n}\n\nasync function readFile(filepath, encoding = 'utf8') {\n return _readFile(filepath, { encoding });\n}\n\nasync function writeFile(filepath, contents) {\n return _writeFile(filepath, contents);\n}\n\nasync function removeFile(filepath) {\n return _removeFile(filepath);\n}\n\nasync function removeDir(filepath) {\n FS.rmdir(filepath);\n}\n\nasync function removeDirRecursively(dirpath) {\n if (await exists(dirpath)) {\n for (let file of await listDir(dirpath)) {\n let fullpath = join(dirpath, file);\n // `true` here means to not follow symlinks\n let attr = FS.stat(fullpath, true);\n\n if (FS.isDir(attr.mode)) {\n await removeDirRecursively(fullpath);\n } else {\n await removeFile(fullpath);\n }\n }\n\n await removeDir(dirpath);\n }\n}\n\nasync function getModifiedTime(filepath) {\n throw new Error(\n 'getModifiedTime not supported on the web (only used for backups)'\n );\n}\n\nmodule.exports = {\n pathToId,\n populateFileHeirarchy,\n init,\n shutdown,\n bundledDatabasePath: '/default-db.sqlite',\n migrationsPath: '/migrations',\n demoBudgetPath: '/demo-budget',\n getDataDir: baseAPI.getDataDir,\n getDocumentDir: baseAPI.getDocumentDir,\n getBudgetDir: baseAPI.getBudgetDir,\n _setDocumentDir: baseAPI._setDocumentDir,\n join,\n basename,\n listDir,\n exists,\n mkdir,\n size,\n copyFile,\n readFile,\n writeFile,\n removeFile,\n removeDir,\n removeDirRecursively,\n getModifiedTime\n};\n","import Spreadsheet from './spreadsheet/spreadsheet';\nimport * as prefs from './prefs';\nimport { captureBreadcrumb } from '../platform/exceptions';\nimport * as sqlite from '../platform/server/sqlite';\nimport { sheetForMonth } from '../shared/months';\nimport Platform from './platform';\nconst { resolveName } = require('./spreadsheet/util');\n\nlet globalSheet, globalOnChange;\nlet globalCacheDb;\n\nexport function get() {\n return globalSheet;\n}\n\nasync function updateSpreadsheetCache(rawDb, names) {\n await sqlite.transaction(rawDb, () => {\n names.forEach(name => {\n const node = globalSheet._getNode(name);\n\n // Don't cache query nodes yet\n if (node.sql == null) {\n sqlite.runQuery(\n rawDb,\n 'INSERT OR REPLACE INTO kvcache (key, value) VALUES (?, ?)',\n [name, JSON.stringify(node.value)]\n );\n }\n });\n });\n}\n\nfunction setCacheStatus(mainDb, cacheDb, { clean }) {\n if (clean) {\n // Generate random number and stick in both places\n let num = Math.random() * 10000000;\n sqlite.runQuery(\n cacheDb,\n 'INSERT OR REPLACE INTO kvcache_key (id, key) VALUES (1, ?)',\n [num]\n );\n\n if (mainDb) {\n sqlite.runQuery(\n mainDb,\n 'INSERT OR REPLACE INTO kvcache_key (id, key) VALUES (1, ?)',\n [num]\n );\n }\n } else {\n sqlite.runQuery(cacheDb, 'DELETE FROM kvcache_key');\n }\n}\n\nfunction isCacheDirty(mainDb, cacheDb) {\n let rows = sqlite.runQuery(\n cacheDb,\n 'SELECT key FROM kvcache_key WHERE id = 1',\n [],\n true\n );\n let num = rows.length === 0 ? null : rows[0].key;\n\n if (num == null) {\n return true;\n }\n\n if (mainDb) {\n let rows = sqlite.runQuery(\n mainDb,\n 'SELECT key FROM kvcache_key WHERE id = 1',\n [],\n true\n );\n if (rows.length === 0 || rows[0].key !== num) {\n return true;\n }\n }\n\n // Always also check if there is anything in `kvcache`. We ask for one item;\n // if we didn't get back anything it's empty so there is no cache\n rows = sqlite.runQuery(cacheDb, 'SELECT * FROM kvcache LIMIT 1', [], true);\n return rows.length === 0;\n}\n\nexport async function loadSpreadsheet(db, onSheetChange) {\n let cacheEnabled = !global.__TESTING__;\n let mainDb = db.getDatabase();\n let cacheDb;\n\n if (Platform.isDesktop && cacheEnabled) {\n // Desktop apps use a separate database for the cache. This is because it is\n // much more likely to directly work with files on desktop, and this makes\n // it a lot clearer what the true filesize of the main db is (and avoid\n // copying the cache data around).\n let cachePath = db.getDatabasePath().replace(/db\\.sqlite$/, 'cache.sqlite');\n globalCacheDb = cacheDb = sqlite.openDatabase(cachePath);\n\n sqlite.execQuery(\n cacheDb,\n `\n CREATE TABLE IF NOT EXISTS kvcache (key TEXT PRIMARY KEY, value TEXT);\n CREATE TABLE IF NOT EXISTS kvcache_key (id INTEGER PRIMARY KEY, key REAL)\n `\n );\n } else {\n // All other platforms use the same database for cache\n cacheDb = mainDb;\n }\n\n let sheet;\n if (cacheEnabled) {\n sheet = new Spreadsheet(\n updateSpreadsheetCache.bind(null, cacheDb),\n setCacheStatus.bind(null, mainDb, cacheDb)\n );\n } else {\n sheet = new Spreadsheet();\n }\n\n captureBreadcrumb({\n message: 'loading spreaadsheet',\n category: 'server'\n });\n\n globalSheet = sheet;\n globalOnChange = onSheetChange;\n\n if (onSheetChange) {\n sheet.addEventListener('change', onSheetChange);\n }\n\n if (cacheEnabled && !isCacheDirty(mainDb, cacheDb)) {\n let cachedRows = await sqlite.runQuery(\n cacheDb,\n 'SELECT * FROM kvcache',\n [],\n true\n );\n console.log(`Loaded spreadsheet from cache (${cachedRows.length} items)`);\n\n for (let row of cachedRows) {\n let parsed = JSON.parse(row.value);\n sheet.load(row.key, parsed);\n }\n } else {\n console.log('Loading fresh spreadsheet');\n await loadUserBudgets(db);\n }\n\n captureBreadcrumb({\n message: 'loaded spreaadsheet',\n category: 'server'\n });\n\n return sheet;\n}\n\nexport function unloadSpreadsheet() {\n if (globalSheet) {\n // TODO: Should wait for the sheet to finish\n globalSheet.unload();\n globalSheet = null;\n }\n\n if (globalCacheDb) {\n sqlite.closeDatabase(globalCacheDb);\n globalCacheDb = null;\n }\n}\n\nexport async function reloadSpreadsheet(db) {\n if (globalSheet) {\n unloadSpreadsheet();\n return loadSpreadsheet(db, globalOnChange);\n }\n}\n\nexport async function loadUserBudgets(db) {\n let sheet = globalSheet;\n\n // TODO: Clear out the cache here so make sure future loads of the app\n // don't load any extra values that aren't set here\n\n let { budgetType } = prefs.getPrefs() || {};\n\n let table = budgetType === 'report' ? 'reflect_budgets' : 'zero_budgets';\n let budgets = await db.all(`\n SELECT * FROM ${table} b\n LEFT JOIN categories c ON c.id = b.category\n WHERE c.tombstone = 0\n `);\n\n sheet.startTransaction();\n\n // Load all the budget amounts and carryover values\n for (let budget of budgets) {\n if (budget.month && budget.category) {\n let sheetName = `budget${budget.month}`;\n sheet.set(`${sheetName}!budget-${budget.category}`, budget.amount);\n sheet.set(\n `${sheetName}!carryover-${budget.category}`,\n budget.carryover === 1 ? true : false\n );\n }\n }\n\n // For zero-based budgets, load the buffered amounts\n if (budgetType !== 'report') {\n let budgetMonths = await db.all('SELECT * FROM zero_budget_months');\n for (let budgetMonth of budgetMonths) {\n let sheetName = sheetForMonth(budgetMonth.id);\n sheet.set(`${sheetName}!buffered`, budgetMonth.buffered);\n }\n }\n\n sheet.endTransaction();\n}\n\nexport function getCell(sheet, name) {\n return globalSheet._getNode(resolveName(sheet, name));\n}\n\nexport function getCellValue(sheet, name) {\n return globalSheet.getValue(resolveName(sheet, name));\n}\n\nexport function startTransaction() {\n if (globalSheet) {\n globalSheet.startTransaction();\n }\n}\n\nexport function endTransaction() {\n if (globalSheet) {\n globalSheet.endTransaction();\n }\n}\n\nexport function waitOnSpreadsheet() {\n return new Promise(resolve => {\n if (globalSheet) {\n globalSheet.onFinish(resolve);\n } else {\n resolve();\n }\n });\n}\n","import { sequential } from '../shared/async';\nimport { captureException, captureBreadcrumb } from '../platform/exceptions';\n\nlet runningMethods = new Set();\n\nlet currentContext = null;\nlet mutatingMethods = new WeakMap();\nlet globalMutationsEnabled = false;\n\nlet _latestHandlerNames = [];\n\nexport function mutator(handler) {\n mutatingMethods.set(handler, true);\n return handler;\n}\n\nexport function isMutating(handler) {\n return mutatingMethods.has(handler);\n}\n\nasync function flushRunningMethods() {\n // Give the client some time to invoke new requests\n await wait(200);\n\n while (runningMethods.size > 0) {\n // Wait for all of them\n await Promise.all([...runningMethods.values()]);\n\n // We give clients more time to make other requests. This lets them continue\n // to do an async workflow\n await wait(100);\n }\n}\n\nfunction wait(time) {\n return new Promise(resolve => setTimeout(resolve, time));\n}\n\nexport async function runHandler(handler, args, { undoTag, name } = {}) {\n // For debug reasons, track the latest handlers that have been\n // called\n _latestHandlerNames.push(name);\n if (_latestHandlerNames.length > 5) {\n _latestHandlerNames = _latestHandlerNames.slice(-5);\n }\n\n if (mutatingMethods.has(handler)) {\n return runMutator(() => handler(args), { undoTag });\n }\n\n // When closing a file, it clears out all global state for the file. That\n // means any async workflows currently executed would be cut off. We handle\n // this by letting all async workflows finish executing before closing the\n // file\n if (name === 'close-budget') {\n await flushRunningMethods();\n }\n\n let promise = handler(args);\n runningMethods.add(promise);\n promise.then(() => {\n runningMethods.delete(promise);\n });\n return promise;\n}\n\n// These are useful for tests. Only use them in tests.\nexport function enableGlobalMutations() {\n if (global.__TESTING__) {\n globalMutationsEnabled = true;\n }\n}\n\nexport function disableGlobalMutations() {\n if (global.__TESTING__) {\n globalMutationsEnabled = false;\n }\n}\n\nexport const runMutator = sequential(async (func, initialContext = {}) => {\n currentContext = initialContext;\n return func().finally(() => {\n currentContext = null;\n });\n});\n\nexport function withMutatorContext(context, func) {\n if (currentContext == null && !globalMutationsEnabled) {\n captureBreadcrumb('Recent methods: ' + _latestHandlerNames.join(', '));\n captureException(new Error('withMutatorContext: mutator not running'));\n\n // See comment below. This is not an error right now, but it will\n // be in the future.\n return func();\n }\n\n let prevContext = currentContext;\n currentContext = { ...currentContext, ...context };\n return func().finally(() => {\n currentContext = prevContext;\n });\n}\n\nexport function getMutatorContext() {\n if (currentContext == null) {\n captureBreadcrumb({\n category: 'server',\n message: 'Recent methods: ' + _latestHandlerNames.join(', ')\n });\n // captureException(new Error('getMutatorContext: mutator not running'));\n\n // For now, this is a non-fatal error. It will be in the future,\n // but this is relatively non-critical (undo just won't work) so\n // return an empty context. When we have more confidence that\n // everything is running inside a mutator, throw an error.\n return {};\n }\n\n if (currentContext == null && globalMutationsEnabled) {\n return {};\n }\n return currentContext;\n}\n","import { sequential, once } from '../../shared/async';\nimport * as perf from '../perf';\nimport * as prefs from '../prefs';\nimport app from '../main-app';\nimport asyncStorage from '../../platform/server/asyncStorage';\nimport { captureException } from '../../platform/exceptions';\nimport logger from '../../platform/server/log';\nimport { postBinary } from '../post';\nimport * as db from '../db';\nimport * as sheet from '../sheet';\nimport { triggerBudgetChanges, setType as setBudgetType } from '../budget/base';\nimport * as undo from '../undo';\nimport { runMutator } from '../mutators';\nimport { setIn, getIn } from '../../shared/util';\nimport Timestamp, {\n serializeClock,\n deserializeClock,\n getClock\n} from '../timestamp';\nimport * as merkle from '../merkle';\nimport * as encoder from './encoder';\nimport { getServer } from '../server-config';\nimport { rebuildMerkleHash } from './repair';\n\nconst { PostError, SyncError } = require('../errors');\nconst connection = require('../../platform/server/connection');\n\nlet FULL_SYNC_DELAY = 1000;\nlet SYNCING_MODE = 'enabled';\n\nexport function setSyncingMode(mode) {\n let prevMode = SYNCING_MODE;\n switch (mode) {\n case 'enabled':\n SYNCING_MODE = 'enabled';\n break;\n case 'offline':\n SYNCING_MODE = 'offline';\n break;\n case 'disabled':\n SYNCING_MODE = 'disabled';\n break;\n case 'import':\n SYNCING_MODE = 'import';\n break;\n default:\n throw new Error('setSyncingMode: invalid mode: ' + mode);\n }\n return prevMode;\n}\n\nexport function checkSyncingMode(mode) {\n switch (mode) {\n case 'enabled':\n return SYNCING_MODE === 'enabled' || SYNCING_MODE === 'offline';\n case 'disabled':\n return SYNCING_MODE === 'disabled' || SYNCING_MODE === 'import';\n case 'offline':\n return SYNCING_MODE === 'offline';\n case 'import':\n return SYNCING_MODE === 'import';\n default:\n throw new Error('checkSyncingMode: invalid mode: ' + mode);\n }\n}\n\nexport makeTestMessage from './make-test-message';\nexport resetSync from './reset';\nexport repairSync from './repair';\n\nfunction apply(msg, prev) {\n let { dataset, row, column, value } = msg;\n\n if (dataset === 'prefs') {\n // Do nothing, it doesn't exist in the db\n } else {\n try {\n let query;\n if (prev) {\n query = {\n sql: db.cache(`UPDATE ${dataset} SET ${column} = ? WHERE id = ?`),\n params: [value, row]\n };\n } else {\n query = {\n sql: db.cache(`INSERT INTO ${dataset} (id, ${column}) VALUES (?, ?)`),\n params: [row, value]\n };\n }\n\n db.runQuery(query.sql, query.params);\n } catch (e) {\n //console.log(e);\n throw new SyncError('invalid-schema');\n }\n }\n}\n\nasync function fetchAll(table, ids) {\n let results = [];\n\n // TODO: convert to `whereIn`\n\n for (let i = 0; i < ids.length; i += 500) {\n let partIds = ids.slice(i, i + 500);\n let sql;\n let column = `${table}.id`;\n\n // We have to provide *mapped* data so the spreadsheet works. The functions\n // which trigger budget changes based on data changes assumes data has been\n // mapped. The only mapped data that the budget is concerned about is\n // categories. This is kind of annoying, but we manually map it here\n if (table === 'transactions') {\n sql = `\n SELECT t.*, c.transferId AS category\n FROM transactions t\n LEFT JOIN category_mapping c ON c.id = t.category\n `;\n column = 't.id';\n } else {\n sql = `SELECT * FROM ${table}`;\n }\n\n sql += ` WHERE `;\n sql += partIds.map(id => `${column} = ?`).join(' OR ');\n\n try {\n let rows = await db.runQuery(sql, partIds, true);\n results = results.concat(rows);\n } catch (e) {\n throw new SyncError('invalid-schema');\n }\n }\n\n return results;\n}\n\nexport function serializeValue(value) {\n if (value === null) {\n return '0:';\n } else if (typeof value === 'number') {\n return 'N:' + value;\n } else if (typeof value === 'string') {\n return 'S:' + value;\n }\n\n throw new Error('Unserializable value type: ' + JSON.stringify(value));\n}\n\nexport function deserializeValue(value) {\n const type = value[0];\n switch (type) {\n case '0':\n return null;\n case 'N':\n return parseFloat(value.slice(2));\n case 'S':\n return value.slice(2);\n default:\n }\n\n throw new Error('Invalid type key for value: ' + value);\n}\n\nlet _syncListeners = [];\n\nexport function addSyncListener(func) {\n _syncListeners.push(func);\n\n return () => {\n _syncListeners = _syncListeners.filter(f => f !== func);\n };\n}\n\nasync function compareMessages(messages) {\n let newMessages = [];\n\n for (let i = 0; i < messages.length; i++) {\n let message = messages[i];\n let { dataset, row, column, timestamp } = message;\n let timestampStr = timestamp.toString();\n\n let res = db.runQuery(\n db.cache(\n 'SELECT timestamp FROM messages_crdt WHERE dataset = ? AND row = ? AND column = ? AND timestamp >= ?'\n ),\n [dataset, row, column, timestampStr],\n true\n );\n\n // Returned message is any one that is \"later\" than this message,\n // meaning if the result exists this message is an old one\n if (res.length === 0) {\n newMessages.push(message);\n } else if (res[0].timestamp !== timestampStr) {\n newMessages.push({ ...message, old: true });\n }\n }\n\n return newMessages;\n}\n\n// This is the fast path `apply` function when in \"import\" mode.\n// There's no need to run through the whole sync system when\n// importing, but **there is a caveat**: because we don't run sync\n// listeners importers should not rely on any functions that use any\n// projected state (like rules). We can't fire those because they\n// depend on having both old and new data which we don't quere here\nfunction applyMessagesForImport(messages) {\n db.transaction(() => {\n for (let i = 0; i < messages.length; i++) {\n let msg = messages[i];\n let { dataset, row, column, timestamp, value } = msg;\n\n if (!msg.old) {\n try {\n apply(msg);\n } catch (e) {\n apply(msg, true);\n }\n\n if (dataset === 'prefs') {\n throw new Error('Cannot set prefs while importing');\n }\n }\n }\n });\n}\n\nexport const applyMessages = sequential(async messages => {\n if (checkSyncingMode('import')) {\n return applyMessagesForImport(messages);\n } else if (checkSyncingMode('enabled')) {\n // Compare the messages with the existing crdt. This filters out\n // already applied messages and determines if a message is old or\n // not. An \"old\" message doesn't need to be applied, but it still\n // needs to be put into the merkle trie to maintain the hash.\n messages = await compareMessages(messages);\n }\n\n messages = [...messages].sort((m1, m2) => {\n let t1 = m1.timestamp ? m1.timestamp.toString() : '';\n let t2 = m2.timestamp ? m2.timestamp.toString() : '';\n if (t1 < t2) {\n return -1;\n } else if (t1 > t2) {\n return 1;\n }\n return 0;\n });\n\n let idsPerTable = {};\n messages.forEach(msg => {\n if (msg.dataset === 'prefs') {\n return;\n }\n\n if (idsPerTable[msg.dataset] == null) {\n idsPerTable[msg.dataset] = [];\n }\n idsPerTable[msg.dataset].push(msg.row);\n });\n\n async function fetchData() {\n let data = new Map();\n\n for (let table of Object.keys(idsPerTable)) {\n const rows = await fetchAll(table, idsPerTable[table]);\n\n for (let i = 0; i < rows.length; i++) {\n let row = rows[i];\n setIn(data, [table, row.id], row);\n }\n }\n\n return data;\n }\n\n let prefsToSet = {};\n let oldData = await fetchData();\n\n undo.appendMessages(messages, oldData);\n\n // It's important to not mutate the clock while processing the\n // messages. We only want to mutate it if the transaction succeeds.\n // The merkle variable will be updated while applying the messages and\n // we'll apply it afterwards.\n let clock;\n let currentMerkle;\n if (checkSyncingMode('enabled')) {\n clock = getClock();\n currentMerkle = clock.merkle;\n }\n\n if (sheet.get()) {\n sheet.get().startCacheBarrier();\n }\n\n // Now that we have all of the data, go through and apply the\n // messages carefully. This transaction is **crucial**: it\n // guarantees that everything is atomically committed to the\n // database, and if any part of it fails everything aborts and\n // nothing is changed. This is critical to maintain consistency. We\n // also avoid any side effects to in-memory objects, and apply them\n // after this succeeds.\n db.transaction(() => {\n let added = new Set();\n\n for (let i = 0; i < messages.length; i++) {\n let msg = messages[i];\n let { dataset, row, column, timestamp, value } = msg;\n\n if (!msg.old) {\n apply(msg, getIn(oldData, [dataset, row]) || added.has(dataset + row));\n\n if (dataset === 'prefs') {\n prefsToSet[row] = value;\n } else {\n // Keep track of which items have been added it in this sync\n // so it knows whether they already exist in the db or not. We\n // ignore any changes to the spreadsheet.\n added.add(dataset + row);\n }\n }\n\n if (checkSyncingMode('enabled')) {\n db.runQuery(\n db.cache(`INSERT INTO messages_crdt (timestamp, dataset, row, column, value)\n VALUES (?, ?, ?, ?, ?)`),\n [timestamp.toString(), dataset, row, column, serializeValue(value)]\n );\n\n currentMerkle = merkle.insert(currentMerkle, msg.timestamp);\n }\n }\n\n if (checkSyncingMode('enabled')) {\n currentMerkle = merkle.prune(currentMerkle);\n\n // Save the clock in the db first (queries might throw\n // exceptions)\n db.runQuery(\n db.cache(\n 'INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)'\n ),\n [serializeClock({ ...clock, merkle: currentMerkle })]\n );\n }\n });\n\n if (checkSyncingMode('enabled')) {\n // The transaction succeeded, so we can update in-memory objects\n // now. Update the in-memory clock.\n clock.merkle = currentMerkle;\n }\n\n // Save any synced prefs\n if (Object.keys(prefsToSet).length > 0) {\n prefs.savePrefs(prefsToSet, { avoidSync: true });\n\n if (prefsToSet.budgetType) {\n setBudgetType(prefsToSet.budgetType);\n }\n\n connection.send('prefs-updated');\n }\n\n let newData = await fetchData();\n\n // In testing, sometimes the spreadsheet isn't loaded, and that's ok\n if (sheet.get()) {\n // Need to clean up these APIs and make them consistent\n sheet.startTransaction();\n triggerBudgetChanges(oldData, newData);\n sheet.get().triggerDatabaseChanges(oldData, newData);\n sheet.endTransaction();\n\n // Allow the cache to be used in the future. At this point it's guaranteed\n // to be up-to-date because we are done mutating any other data\n sheet.get().endCacheBarrier();\n }\n\n _syncListeners.forEach(func => func(oldData, newData));\n\n let tables = getTablesFromMessages(messages.filter(msg => !msg.old));\n app.events.emit('sync', {\n type: 'applied',\n tables,\n data: newData,\n prevData: oldData\n });\n\n return messages;\n});\n\nexport function receiveMessages(messages) {\n messages.forEach(msg => {\n Timestamp.recv(msg.timestamp);\n });\n\n return runMutator(() => applyMessages(messages));\n}\n\nasync function _sendMessages(messages) {\n try {\n await applyMessages(messages);\n } catch (e) {\n if (e instanceof SyncError) {\n if (e.reason === 'invalid-schema') {\n // We know this message came from a local modification, and it\n // couldn't apply, which doesn't make any sense. Must be a bug\n // in the code. Send a specific error type for it for a custom\n // message.\n app.events.emit('sync', {\n type: 'error',\n subtype: 'apply-failure'\n });\n } else {\n app.events.emit('sync', { type: 'error' });\n }\n }\n\n throw e;\n }\n\n await scheduleFullSync();\n}\n\nlet IS_BATCHING = false;\nlet _BATCHED = [];\nexport async function batchMessages(func) {\n if (IS_BATCHING) {\n await func();\n return;\n }\n\n IS_BATCHING = true;\n let batched = [];\n\n try {\n await func();\n // TODO: if it fails, it shouldn't apply them?\n } finally {\n IS_BATCHING = false;\n batched = _BATCHED;\n _BATCHED = [];\n }\n\n if (batched.length > 0) {\n await _sendMessages(batched);\n }\n}\n\nexport async function sendMessages(messages) {\n if (IS_BATCHING) {\n _BATCHED = _BATCHED.concat(messages);\n } else {\n return _sendMessages(messages);\n }\n}\n\nexport function getMessagesSince(since) {\n return db.runQuery(\n 'SELECT timestamp, dataset, row, column, value FROM messages_crdt WHERE timestamp > ?',\n [since],\n true\n );\n}\n\nexport async function syncAndReceiveMessages(messages, since) {\n let localMessages = await getMessagesSince(since);\n await receiveMessages(\n messages.map(msg => ({\n ...msg,\n value: deserializeValue(msg.value),\n timestamp: Timestamp.parse(msg.timestamp)\n }))\n );\n return localMessages;\n}\n\nexport function clearFullSyncTimeout() {\n if (syncTimeout) {\n clearTimeout(syncTimeout);\n syncTimeout = null;\n }\n}\n\nlet syncTimeout = null;\nexport function scheduleFullSync() {\n clearFullSyncTimeout();\n\n if (checkSyncingMode('enabled') && !checkSyncingMode('offline')) {\n if (global.__TESTING__) {\n return fullSync().then(res => {\n if (res.error) {\n throw res.error;\n }\n return res;\n });\n } else {\n syncTimeout = setTimeout(fullSync, FULL_SYNC_DELAY);\n }\n }\n}\n\nfunction getTablesFromMessages(messages) {\n return messages.reduce((acc, message) => {\n let dataset =\n message.dataset === 'schedules_next_date' ? 'schedules' : message.dataset;\n\n if (!acc.includes(dataset)) {\n acc.push(dataset);\n }\n return acc;\n }, []);\n}\n\n// This is different than `fullSync` because it waits for the\n// spreadsheet to finish any processing. This is useful if we want to\n// perform a full sync and wait for everything to finish, usually if\n// you're doing an initial sync before working with a file.\nexport async function initialFullSync() {\n let result = await fullSync();\n if (!result.error) {\n // Make sure to wait for anything in the spreadsheet to process\n await sheet.waitOnSpreadsheet();\n }\n}\n\nexport const fullSync = once(async function() {\n app.events.emit('sync', { type: 'start' });\n let messages;\n\n try {\n messages = await _fullSync(null, 0, null);\n } catch (e) {\n console.log(e);\n\n if (e instanceof SyncError) {\n if (e.reason === 'out-of-sync') {\n captureException(e);\n\n app.events.emit('sync', {\n type: 'error',\n subtype: 'out-of-sync'\n });\n } else if (e.reason === 'invalid-schema') {\n app.events.emit('sync', {\n type: 'error',\n subtype: 'invalid-schema'\n });\n } else if (\n e.reason === 'decrypt-failure' ||\n e.reason === 'encrypt-failure'\n ) {\n app.events.emit('sync', {\n type: 'error',\n subtype: e.reason,\n meta: e.meta\n });\n } else if (e.reason === 'beta-version') {\n app.events.emit('sync', {\n type: 'error',\n subtype: e.reason\n });\n } else {\n app.events.emit('sync', { type: 'error' });\n }\n } else if (e instanceof PostError) {\n console.log(e);\n if (e.reason === 'unauthorized') {\n app.events.emit('sync', { type: 'unauthorized' });\n\n // Set the user into read-only mode\n asyncStorage.setItem('readOnly', 'true');\n } else if (e.reason === 'network-failure') {\n app.events.emit('sync', { type: 'error', subtype: 'network' });\n } else {\n app.events.emit('sync', { type: 'error', subtype: e.reason });\n }\n } else {\n captureException(e);\n // TODO: Send the message to the client and allow them to expand & view it\n app.events.emit('sync', { type: 'error' });\n }\n\n return { error: { message: e.message, reason: e.reason, meta: e.meta } };\n }\n\n let tables = getTablesFromMessages(messages);\n\n app.events.emit('sync', {\n type: 'success',\n tables,\n syncDisabled: checkSyncingMode('disabled')\n });\n return { messages };\n});\n\nasync function _fullSync(sinceTimestamp, count, prevDiffTime) {\n let { cloudFileId, groupId, lastSyncedTimestamp } = prefs.getPrefs() || {};\n\n clearFullSyncTimeout();\n\n if (checkSyncingMode('disabled') || checkSyncingMode('offline')) {\n return [];\n }\n\n // Snapshot the point at which we are currently syncing\n let currentTime = getClock().timestamp.toString();\n\n let since =\n sinceTimestamp ||\n lastSyncedTimestamp ||\n // Default to 5 minutes ago\n new Timestamp(Date.now() - 5 * 60 * 1000, 0, '0').toString();\n\n let messages = getMessagesSince(since);\n\n let userToken = await asyncStorage.getItem('user-token');\n\n logger.info(\n 'Syncing since',\n since,\n messages.length,\n '(attempt: ' + count + ')'\n );\n\n let buffer = await encoder.encode(groupId, cloudFileId, since, messages);\n\n // TODO: There a limit on how many messages we can send because of\n // the payload size. Right now it's at 20MB on the server. We should\n // check the worst case here and make multiple requests if it's\n // really large.\n let resBuffer = await postBinary(getServer().SYNC_SERVER + '/sync', buffer, {\n 'X-ACTUAL-TOKEN': userToken\n });\n\n // Abort if the file is either no longer loaded, the group id has\n // changed because of a sync reset\n if (!prefs.getPrefs() || prefs.getPrefs().groupId !== groupId) {\n return [];\n }\n\n let res = await encoder.decode(resBuffer);\n\n logger.info('Got messages from server', res.messages.length);\n\n let localTimeChanged = getClock().timestamp.toString() !== currentTime;\n\n // Apply the new messages\n let receivedMessages = [];\n if (res.messages.length > 0) {\n receivedMessages = await receiveMessages(\n res.messages.map(msg => ({\n ...msg,\n value: deserializeValue(msg.value),\n timestamp: Timestamp.parse(msg.timestamp)\n }))\n );\n }\n\n let diffTime = merkle.diff(res.merkle, getClock().merkle);\n let result = res.messages;\n\n if (diffTime !== null) {\n // This is a bit wonky, but we loop until we are in sync with the\n // server. While syncing, either the client or server could change\n // out from under us, so it might take a couple passes to\n // completely sync up. This is a check that stops the loop in case\n // we are corrupted and can't sync up. We try 10 times if we keep\n // getting the same diff time, and add a upper limit of 300 no\n // matter what (just to stop this from ever being an infinite\n // loop).\n //\n // It's slightly possible for the user to add more messages while we\n // are in `receiveMessages`, but `localTimeChanged` would still be\n // false. In that case, we don't reset the counter but it should be\n // very unlikely that this happens enough to hit the loop limit.\n\n if ((count >= 10 && diffTime === prevDiffTime) || count >= 100) {\n logger.info('SENT -------');\n logger.info(JSON.stringify(messages));\n logger.info('RECEIVED -------');\n logger.info(JSON.stringify(res.messages));\n\n let rebuiltMerkle = rebuildMerkleHash();\n\n console.log(\n count,\n 'messages:',\n messages.length,\n messages.length > 0 ? messages[0] : null,\n 'res.messages:',\n res.messages.length,\n res.messages.length > 0 ? res.messages[0] : null,\n 'clientId',\n getClock().timestamp.node(),\n 'groupId',\n groupId,\n 'diffTime:',\n diffTime,\n diffTime === prevDiffTime,\n 'local clock:',\n getClock().timestamp.toString(),\n getClock().merkle.hash,\n 'rebuilt hash:',\n rebuiltMerkle.numMessages,\n rebuiltMerkle.trie.hash,\n 'server hash:',\n res.merkle.hash,\n 'localTimeChanged:',\n localTimeChanged\n );\n\n if (rebuiltMerkle.trie.hash === res.merkle.hash) {\n // Rebuilding the merkle worked... but why?\n let clocks = await db.all('SELECT * FROM messages_clock');\n if (clocks.length !== 1) {\n console.log('Bad number of clocks:', clocks.length);\n }\n let hash = deserializeClock(clocks[0]).merkle.hash;\n console.log('Merkle hash in db:', hash);\n }\n\n throw new SyncError('out-of-sync');\n }\n\n receivedMessages = receivedMessages.concat(\n await _fullSync(\n new Timestamp(diffTime, 0, '0').toString(),\n // If something local changed while we were syncing, always\n // reset, token the counter. We never want to think syncing failed\n // because we tried to syncing many times and couldn't sync,\n // but it was because the user kept changing stuff in the\n // middle of syncing.\n localTimeChanged ? 0 : count + 1,\n diffTime\n )\n );\n } else {\n // All synced up, store the current time as a simple optimization\n // for the next sync\n await prefs.savePrefs({\n lastSyncedTimestamp: getClock().timestamp.toString()\n });\n }\n\n return receivedMessages;\n}\n","import { sendMessages } from './sync';\nimport Timestamp from './timestamp';\nconst fs = require('../platform/server/fs');\n\nlet prefs = null;\n\nexport async function loadPrefs(id) {\n if (global.__TESTING__ && !id) {\n prefs = { dummyTestPrefs: true };\n return prefs;\n }\n\n const fullpath = fs.join(fs.getBudgetDir(id), 'metadata.json');\n\n try {\n prefs = JSON.parse(await fs.readFile(fullpath));\n } catch (e) {\n // If the user messed something up, be flexible and allow them to\n // still load the budget database. Default the budget name to the\n // id.\n prefs = { id, budgetName: id };\n }\n\n // No matter what is in `id` field, force it to be the current id.\n // This makes it resilient to users moving around folders, etc\n prefs.id = id;\n return prefs;\n}\n\nexport async function savePrefs(prefsToSet, { avoidSync = false } = {}) {\n Object.assign(prefs, prefsToSet);\n\n if (!avoidSync) {\n // Sync whitelisted prefs\n let messages = Object.keys(prefsToSet)\n .map(key => {\n if (key === 'budgetType' || key === 'budgetName') {\n return {\n dataset: 'prefs',\n row: key,\n column: 'value',\n value: prefsToSet[key],\n timestamp: Timestamp.send()\n };\n }\n return null;\n })\n .filter(x => x);\n\n if (messages.length > 0) {\n await sendMessages(messages);\n }\n }\n\n if (!prefs.dummyTestPrefs) {\n let prefsPath = fs.join(fs.getBudgetDir(prefs.id), 'metadata.json');\n await fs.writeFile(prefsPath, JSON.stringify(prefs));\n }\n}\n\nexport function unloadPrefs() {\n prefs = null;\n}\n\nexport function getPrefs() {\n return prefs;\n}\n\nexport function getDefaultPrefs(id, budgetName) {\n // Add any notifications in here that new users shouldn't see.\n // Without them, a popup will show to explain a new feature.\n return {\n id,\n budgetName,\n 'notifications.schedules': true,\n 'notifications.repair-splits': true\n };\n}\n\nexport async function readPrefs(id) {\n const fullpath = fs.join(fs.getBudgetDir(id), 'metadata.json');\n\n try {\n return JSON.parse(await fs.readFile(fullpath));\n } catch (e) {\n return null;\n }\n}\n","let { getDatabase, closeDatabase } = require('../indexeddb');\n\nfunction init() {}\n\nfunction shutdown() {\n closeDatabase();\n}\n\nfunction commit(trans) {\n if (trans.commit) {\n trans.commit();\n }\n}\n\nasync function getItem(key) {\n let db = await getDatabase();\n\n let transaction = db.transaction(['asyncStorage'], 'readonly');\n let objectStore = transaction.objectStore('asyncStorage');\n\n return new Promise((resolve, reject) => {\n let req = objectStore.get(key);\n req.onerror = e => reject(e);\n req.onsuccess = e => resolve(e.target.result);\n commit(transaction);\n });\n}\n\nasync function setItem(key, value) {\n let db = await getDatabase();\n\n let transaction = db.transaction(['asyncStorage'], 'readwrite');\n let objectStore = transaction.objectStore('asyncStorage');\n\n let promise = new Promise((resolve, reject) => {\n let req = objectStore.put(value, key);\n req.onerror = e => reject(e);\n req.onsuccess = e => resolve();\n commit(transaction);\n });\n}\n\nasync function removeItem(key) {\n let db = await getDatabase();\n\n let transaction = db.transaction(['asyncStorage'], 'readwrite');\n let objectStore = transaction.objectStore('asyncStorage');\n\n return new Promise((resolve, reject) => {\n let req = objectStore.delete(key);\n req.onerror = e => reject(e);\n req.onsuccess = e => resolve();\n commit(transaction);\n });\n}\n\nasync function multiGet(keys) {\n let db = await getDatabase();\n\n let transaction = db.transaction(['asyncStorage'], 'readonly');\n let objectStore = transaction.objectStore('asyncStorage');\n\n let promise = Promise.all(\n keys.map(key => {\n return new Promise((resolve, reject) => {\n let req = objectStore.get(key);\n req.onerror = e => reject(e);\n req.onsuccess = e => resolve([key, e.target.result]);\n });\n })\n );\n\n commit(transaction);\n return promise;\n}\n\nasync function multiSet(keyValues) {\n let db = await getDatabase();\n\n let transaction = db.transaction(['asyncStorage'], 'readwrite');\n let objectStore = transaction.objectStore('asyncStorage');\n\n let promise = Promise.all(\n keyValues.map(([key, value]) => {\n return new Promise((resolve, reject) => {\n let req = objectStore.put(value, key);\n req.onerror = e => reject(e);\n req.onsuccess = e => resolve();\n });\n })\n );\n\n commit(transaction);\n return promise;\n}\n\nasync function multiRemove(keys) {\n let db = await getDatabase();\n\n let transaction = db.transaction(['asyncStorage'], 'readwrite');\n let objectStore = transaction.objectStore('asyncStorage');\n\n let promise = Promise.all(\n keys.map(key => {\n return new Promise((resolve, reject) => {\n let req = objectStore.delete(key);\n req.onerror = e => reject(e);\n req.onsuccess = e => resolve();\n });\n })\n );\n\n commit(transaction);\n return promise;\n}\n\nmodule.exports = {\n init,\n shutdown,\n getItem,\n setItem,\n removeItem,\n multiGet,\n multiSet,\n multiRemove\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","let currencyFormatter = require('currency-formatter');\n\nexport function cleanUUID(uuid) {\n return uuid.replace(/-/g, '');\n}\n\nexport function last(arr) {\n return arr[arr.length - 1];\n}\n\nexport function mergeObjects(objects) {\n return Object.assign.apply(null, [{}, ...objects]);\n}\n\nexport function composeCellChanges(objects) {\n const merged = {};\n Object.keys(objects).forEach(key => {\n if (merged[key]) {\n merged[key] = { ...merged[key], ...objects[key] };\n } else {\n merged[key] = objects[key];\n }\n });\n}\n\nexport function flattenArray(arrays) {\n return Array.prototype.concat.apply([], arrays);\n}\n\nexport function shallowEqual(a, b) {\n if (a === b) {\n return true;\n }\n\n var numKeysA = 0,\n numKeysB = 0,\n key;\n for (key in b) {\n numKeysB++;\n if (!a.hasOwnProperty(key) || a[key] !== b[key]) {\n return false;\n }\n }\n for (key in a) {\n numKeysA++;\n }\n return numKeysA === numKeysB;\n}\n\nexport function getChangedValues(obj1, obj2) {\n // Keep the id field because this is mostly used to diff database\n // objects\n const diff = obj1.id ? { id: obj1.id } : {};\n const keys = Object.keys(obj2);\n let hasChanged = false;\n\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n\n if (obj1[key] !== obj2[key]) {\n diff[key] = obj2[key];\n hasChanged = true;\n }\n }\n\n return hasChanged ? diff : null;\n}\n\nexport function hasFieldsChanged(obj1, obj2, fields) {\n let changed = false;\n for (var i = 0; i < fields.length; i++) {\n let field = fields[i];\n if (obj1[field] !== obj2[field]) {\n changed = true;\n break;\n }\n }\n return changed;\n}\n\nexport function applyChanges(changes, items) {\n items = [...items];\n\n if (changes.added) {\n changes.added.forEach(add => {\n items.push(add);\n });\n }\n\n if (changes.updated) {\n changes.updated.forEach(({ id, ...fields }) => {\n const idx = items.findIndex(t => t.id === id);\n items[idx] = {\n ...items[idx],\n ...fields\n };\n });\n }\n\n if (changes.deleted) {\n changes.deleted.forEach(t => {\n const idx = items.findIndex(t2 => t.id === t2.id);\n if (idx !== -1) {\n items.splice(idx, 1);\n }\n });\n }\n\n return items;\n}\n\nexport function partitionByField(data, field) {\n let res = new Map();\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n let key = item[field];\n\n let items = res.get(key) || [];\n items.push(item);\n\n res.set(key, items);\n }\n return res;\n}\n\nexport function groupBy(data, field, mapper) {\n let res = new Map();\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n let key = item[field];\n let existing = res.get(key) || [];\n res.set(key, existing.concat([mapper ? mapper(item) : data[i]]));\n }\n return res;\n}\n\nexport function groupBySingle(data, field, mapper) {\n let res = new Map();\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n let key = item[field];\n if (res.has(key)) {\n throw new Error('groupBySingle found conflicting key: ' + key);\n }\n res.set(key, mapper ? mapper(item) : data[i]);\n }\n return res;\n}\n\n// This should replace the existing `groupById` function, since a\n// `Map` is better, but we can't swap it out because `Map` has a\n// different API and we need to go through and update everywhere that\n// uses it.\nfunction _groupById(data) {\n let res = new Map();\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n res.set(item.id, item);\n }\n return res;\n}\n\nexport function diffItems(items, newItems) {\n let grouped = _groupById(items);\n let newGrouped = _groupById(newItems);\n let added = [];\n let updated = [];\n\n let deleted = items\n .filter(item => !newGrouped.has(item.id))\n .map(item => ({ id: item.id }));\n\n newItems.forEach(newItem => {\n let item = grouped.get(newItem.id);\n if (!item) {\n added.push(newItem);\n } else {\n const changes = getChangedValues(item, newItem);\n if (changes) {\n updated.push(changes);\n }\n }\n });\n\n return { added, updated, deleted };\n}\n\nexport function groupById(data) {\n let res = {};\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n res[item.id] = item;\n }\n return res;\n}\n\nexport function debugMemoFailure(prevProps, nextProps) {\n let changed = getChangedValues(prevProps, nextProps);\n if (changed !== null) {\n console.log(changed);\n }\n return changed === null;\n}\n\nexport function setIn(map, keys, item) {\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n\n if (i === keys.length - 1) {\n map.set(key, item);\n } else {\n if (!map.has(key)) {\n map.set(key, new Map());\n }\n\n map = map.get(key);\n }\n }\n}\n\nexport function getIn(map, keys) {\n let item = map;\n for (let i = 0; i < keys.length; i++) {\n item = item.get(keys[i]);\n\n if (item == null) {\n return item;\n }\n }\n return item;\n}\n\n// Useful for throwing exception from expressions\nexport function throwError(err) {\n throw err;\n}\n\nexport function fastSetMerge(set1, set2) {\n let finalSet = new Set(set1);\n let iter = set2.values();\n let value = iter.next();\n while (!value.done) {\n finalSet.add(value.value);\n value = iter.next();\n }\n return finalSet;\n}\n\nexport function titleFirst(str) {\n return str[0].toUpperCase() + str.slice(1);\n}\n\nexport let numberFormats = [\n { value: 'comma-dot', label: '1,000.33' },\n { value: 'dot-comma', label: '1.000,33' },\n { value: 'space-comma', label: '1 000,33' }\n];\n\nlet numberFormat = {\n value: null,\n formatter: null,\n regex: null\n};\n\nexport function setNumberFormat(format) {\n let locale, regex, separator;\n\n switch (format) {\n case 'space-comma':\n locale = 'za-ZA';\n regex = /[^-0-9,]/g;\n separator = ',';\n break;\n case 'dot-comma':\n locale = 'de-DE';\n regex = /[^-0-9,]/g;\n separator = ',';\n break;\n case 'comma-dot':\n default:\n locale = 'en-US';\n regex = /[^-0-9.]/g;\n separator = '.';\n }\n\n numberFormat = {\n value: format,\n separator,\n // This is the keep in line with the Intl API which we might\n // switch to when it's available on all mobile platforms\n formatter: {\n format: number =>\n currencyFormatter.format(number, { locale, format: '%v' })\n },\n regex\n };\n}\n\nexport function getNumberFormat() {\n return numberFormat;\n}\n\nsetNumberFormat('1,000.33');\n\nexport function toRelaxedNumber(value) {\n return integerToAmount(currencyToInteger(value) || 0);\n}\n\nexport function toRelaxedInteger(value) {\n return stringToInteger(value) || 0;\n}\n\nexport function integerToCurrency(n) {\n // Awesome\n return numberFormat.formatter.format(n / 100);\n}\n\nexport function amountToCurrency(n) {\n return numberFormat.formatter.format(n);\n}\n\nexport function amountToPrettyCurrency(n, code) {\n return currencyFormatter.format(n, { code });\n}\n\nexport function currencyToAmount(str) {\n let amount = parseFloat(\n str.replace(numberFormat.regex, '').replace(numberFormat.separator, '.')\n );\n return isNaN(amount) ? null : amount;\n}\n\nexport function currencyToInteger(str) {\n let amount = currencyToAmount(str);\n return amount ? amountToInteger(amount) : null;\n}\n\nexport function stringToInteger(str) {\n let amount = parseInt(str.replace(/[^-0-9.,]/g, ''));\n if (!isNaN(amount)) {\n return amount;\n }\n return null;\n}\n\nexport function amountToInteger(n) {\n return Math.round(n * 100);\n}\n\nexport function integerToAmount(n) {\n return parseFloat((n / 100).toFixed(2));\n}\n\n// This is used when the input format could be anything (from\n// financial files and we don't want to parse based on the user's\n// number format, because the user could be importing from many\n// currencies. We extract out the numbers and just ignore separators.\nexport function looselyParseAmount(amount) {\n function safeNumber(v) {\n return isNaN(v) ? null : v;\n }\n\n let m = amount.match(/[.,][^.,]*$/);\n if (!m || m.index === 0) {\n return safeNumber(parseFloat(amount));\n }\n\n let left = amount.slice(0, m.index);\n let right = amount.slice(m.index + 1);\n\n return safeNumber(parseFloat(left.replace(/[^0-9-]/g, '') + '.' + right));\n}\n\nexport function semverToNumber(str) {\n return parseInt(\n '1' +\n str\n .split('.')\n .map(x => {\n return ('000' + x.replace(/[^0-9]/g, '')).slice(-3);\n })\n .join('')\n );\n}\n","import murmurhash from 'murmurhash';\nconst uuid = require('../platform/uuid');\n\n/**\n * Hybrid Unique Logical Clock (HULC) timestamp generator\n *\n * Globally-unique, monotonic timestamps are generated from the\n * combination of the unreliable system time, a counter, and an\n * identifier for the current node (instance, machine, process, etc.).\n * These timestamps can accommodate clock stuttering (duplicate values),\n * regression, and node differences within the configured maximum drift.\n *\n * In order to generate timestamps locally or for transmission to another\n * node, use the send() method. For global causality, timestamps must\n * be included in each message processed by the system. Whenever a\n * message is received, its timestamp must be passed to the recv()\n * method.\n *\n * Timestamps serialize into a 46-character collatable string\n * example: 2015-04-24T22:23:42.123Z-1000-0123456789ABCDEF\n * example: 2015-04-24T22:23:42.123Z-1000-A219E7A71CC18912\n *\n * The 64-bit hybrid clock is based on the HLC specification,\n * http://www.cse.buffalo.edu/tech-reports/2014-04.pdf\n */\n\n// A mutable global clock\nlet clock = null;\n\nexport function setClock(clock_) {\n clock = clock_;\n}\n\nexport function getClock() {\n return clock;\n}\n\nexport function makeClock(timestamp, merkle = {}) {\n return { timestamp: MutableTimestamp.from(timestamp), merkle };\n}\n\nexport function serializeClock(clock) {\n return JSON.stringify({\n timestamp: clock.timestamp.toString(),\n merkle: clock.merkle\n });\n}\n\nexport function deserializeClock(clock) {\n let data;\n try {\n data = JSON.parse(clock);\n } catch (e) {\n data = {\n timestamp: '1970-01-01T00:00:00.000Z-0000-' + makeClientId(),\n merkle: {}\n };\n }\n\n return {\n timestamp: MutableTimestamp.from(Timestamp.parse(data.timestamp)),\n merkle: data.merkle\n };\n}\n\nexport function makeClientId() {\n return uuid\n .v4Sync()\n .replace(/-/g, '')\n .slice(-16);\n}\n\nvar config = {\n // Allow 5 minutes of clock drift\n maxDrift: 5 * 60 * 1000\n};\n\n/**\n * timestamp instance class\n */\nexport default class Timestamp {\n constructor(millis, counter, node) {\n this._state = {\n millis: millis,\n counter: counter,\n node: node\n };\n }\n\n valueOf() {\n return this.toString();\n }\n\n toString() {\n return [\n new Date(this.millis()).toISOString(),\n (\n '0000' +\n this.counter()\n .toString(16)\n .toUpperCase()\n ).slice(-4),\n ('0000000000000000' + this.node()).slice(-16)\n ].join('-');\n }\n\n millis() {\n return this._state.millis;\n }\n\n counter() {\n return this._state.counter;\n }\n\n node() {\n return this._state.node;\n }\n\n hash() {\n return murmurhash.v3(this.toString());\n }\n}\n\nexport class MutableTimestamp extends Timestamp {\n setMillis(n) {\n this._state.millis = n;\n }\n\n setCounter(n) {\n this._state.counter = n;\n }\n\n setNode(n) {\n this._state.node = n;\n }\n}\n\nMutableTimestamp.from = timestamp => {\n return new MutableTimestamp(\n timestamp.millis(),\n timestamp.counter(),\n timestamp.node()\n );\n};\n\n// Timestamp generator initialization\n// * sets the node ID to an arbitrary value\n// * useful for mocking/unit testing\nTimestamp.init = function(options = {}) {\n if (options.maxDrift) {\n config.maxDrift = options.maxDrift;\n }\n\n setClock(\n makeClock(\n new Timestamp(\n 0,\n 0,\n options.node\n ? ('0000000000000000' + options.node).toString().slice(-16)\n : ''\n )\n ),\n null\n );\n};\n\n/**\n * Timestamp send. Generates a unique, monotonic timestamp suitable\n * for transmission to another system in string format\n */\nTimestamp.send = function() {\n if (!clock) {\n return null;\n }\n\n // retrieve the local wall time\n var phys = Date.now();\n\n // unpack the clock.timestamp logical time and counter\n var lOld = clock.timestamp.millis();\n var cOld = clock.timestamp.counter();\n\n // calculate the next logical time and counter\n // * ensure that the logical time never goes backward\n // * increment the counter if phys time does not advance\n var lNew = Math.max(lOld, phys);\n var cNew = lOld === lNew ? cOld + 1 : 0;\n\n // check the result for drift and counter overflow\n if (lNew - phys > config.maxDrift) {\n throw new Timestamp.ClockDriftError(lNew, phys, config.maxDrift);\n }\n if (cNew > 65535) {\n throw new Timestamp.OverflowError();\n }\n\n // repack the logical time/counter\n clock.timestamp.setMillis(lNew);\n clock.timestamp.setCounter(cNew);\n\n return new Timestamp(\n clock.timestamp.millis(),\n clock.timestamp.counter(),\n clock.timestamp.node()\n );\n};\n\n// Timestamp receive. Parses and merges a timestamp from a remote\n// system with the local timeglobal uniqueness and monotonicity are\n// preserved\nTimestamp.recv = function(msg) {\n if (!clock) {\n return null;\n }\n\n // retrieve the local wall time\n var phys = Date.now();\n\n // unpack the message wall time/counter\n var lMsg = msg.millis();\n var cMsg = msg.counter();\n\n // assert the node id and remote clock drift\n // if (msg.node() === clock.timestamp.node()) {\n // throw new Timestamp.DuplicateNodeError(clock.timestamp.node());\n // }\n if (lMsg - phys > config.maxDrift) {\n throw new Timestamp.ClockDriftError();\n }\n\n // unpack the clock.timestamp logical time and counter\n var lOld = clock.timestamp.millis();\n var cOld = clock.timestamp.counter();\n\n // calculate the next logical time and counter\n // . ensure that the logical time never goes backward\n // . if all logical clocks are equal, increment the max counter\n // . if max = old > message, increment local counter\n // . if max = messsage > old, increment message counter\n // . otherwise, clocks are monotonic, reset counter\n var lNew = Math.max(Math.max(lOld, phys), lMsg);\n var cNew =\n lNew === lOld && lNew === lMsg\n ? Math.max(cOld, cMsg) + 1\n : lNew === lOld\n ? cOld + 1\n : lNew === lMsg\n ? cMsg + 1\n : 0;\n\n // check the result for drift and counter overflow\n if (lNew - phys > config.maxDrift) {\n throw new Timestamp.ClockDriftError();\n }\n if (cNew > 65535) {\n throw new Timestamp.OverflowError();\n }\n\n // repack the logical time/counter\n clock.timestamp.setMillis(lNew);\n clock.timestamp.setCounter(cNew);\n\n return new Timestamp(\n clock.timestamp.millis(),\n clock.timestamp.counter(),\n clock.timestamp.node()\n );\n};\n\n/**\n * timestamp parsing\n * converts a fixed-length string timestamp to the structured value\n */\nTimestamp.parse = function(timestamp) {\n if (typeof timestamp === 'string') {\n var parts = timestamp.split('-');\n if (parts && parts.length === 5) {\n var millis = Date.parse(parts.slice(0, 3).join('-')).valueOf();\n var counter = parseInt(parts[3], 16);\n var node = parts[4];\n if (!isNaN(millis) && !isNaN(counter))\n return new Timestamp(millis, counter, node);\n }\n }\n return null;\n};\n\n/**\n * zero/minimum timestamp\n */\nvar zero = Timestamp.parse('1970-01-01T00:00:00.000Z-0000-0000000000000000');\nTimestamp.zero = function() {\n return zero;\n};\n\n/**\n * maximum timestamp\n */\nvar max = Timestamp.parse('9999-12-31T23:59:59.999Z-FFFF-FFFFFFFFFFFFFFFF');\nTimestamp.max = function() {\n return max;\n};\n\nTimestamp.since = isoString => {\n return isoString + '-0000-0000000000000000';\n};\n\n/**\n * error classes\n */\nTimestamp.DuplicateNodeError = class extends Error {\n constructor(node) {\n super();\n this.type = 'DuplicateNodeError';\n this.message = 'duplicate node identifier ' + node;\n }\n};\n\nTimestamp.ClockDriftError = class extends Error {\n constructor(...args) {\n super();\n this.type = 'ClockDriftError';\n this.message = ['maximum clock drift exceeded'].concat(args).join(' ');\n }\n};\n\nTimestamp.OverflowError = class extends Error {\n constructor() {\n super();\n this.type = 'OverflowError';\n this.message = 'timestamp counter overflow';\n }\n};\n","import { sendMessages } from './sync';\nimport { getIn } from '../shared/util';\nimport Timestamp from './timestamp';\nimport { withMutatorContext, getMutatorContext } from './mutators';\nconst connection = require('../platform/server/connection');\n\n// A marker always sits as the first entry to simplify logic\nlet MESSAGE_HISTORY = [{ type: 'marker' }];\nlet CURSOR = 0;\nlet HISTORY_SIZE = 20;\n\nfunction trimHistory() {\n MESSAGE_HISTORY = MESSAGE_HISTORY.slice(0, CURSOR + 1);\n\n let markers = MESSAGE_HISTORY.filter(item => item.type === 'marker');\n if (markers.length > HISTORY_SIZE) {\n let slice = markers.slice(-HISTORY_SIZE);\n let cutoff = MESSAGE_HISTORY.indexOf(slice[0]);\n MESSAGE_HISTORY = MESSAGE_HISTORY.slice(cutoff);\n CURSOR = MESSAGE_HISTORY.length - 1;\n }\n}\n\nexport function appendMessages(messages, oldData) {\n let context = getMutatorContext();\n\n if (context.undoListening && messages.length > 0) {\n trimHistory();\n\n let { undoTag } = context;\n\n MESSAGE_HISTORY.push({\n type: 'messages',\n messages,\n oldData,\n undoTag\n });\n CURSOR++;\n }\n}\n\nexport function clearUndo() {\n MESSAGE_HISTORY = [{ type: 'marker' }];\n CURSOR = 0;\n}\n\nexport function withUndo(func, meta) {\n let context = getMutatorContext();\n if (context.undoDisabled || context.undoListening) {\n return func();\n }\n\n MESSAGE_HISTORY = MESSAGE_HISTORY.slice(0, CURSOR + 1);\n\n let marker = { type: 'marker', meta };\n\n if (MESSAGE_HISTORY[MESSAGE_HISTORY.length - 1].type === 'marker') {\n MESSAGE_HISTORY[MESSAGE_HISTORY.length - 1] = marker;\n } else {\n MESSAGE_HISTORY.push(marker);\n CURSOR++;\n }\n\n return withMutatorContext(\n { undoListening: true, undoTag: context.undoTag },\n func\n );\n}\n\nexport function undoable(func) {\n return (...args) => {\n return withUndo(() => {\n return func(...args);\n });\n };\n}\n\nasync function applyUndoAction(messages, meta, undoTag) {\n await withMutatorContext({ undoListening: false }, () => {\n return sendMessages(\n messages.map(msg => ({ ...msg, timestamp: Timestamp.send() }))\n );\n });\n\n const tables = messages.reduce((acc, message) => {\n if (!acc.includes(message.dataset)) {\n acc.push(message.dataset);\n }\n return acc;\n }, []);\n\n connection.send('undo-event', {\n messages,\n tables,\n meta,\n undoTag\n });\n}\n\nexport async function undo() {\n let end = CURSOR;\n CURSOR = Math.max(CURSOR - 1, 0);\n\n // Walk back to the nearest marker\n while (CURSOR > 0 && MESSAGE_HISTORY[CURSOR].type !== 'marker') {\n CURSOR--;\n }\n\n let meta = MESSAGE_HISTORY[CURSOR].meta;\n let start = Math.max(CURSOR, 0);\n let entries = MESSAGE_HISTORY.slice(start, end + 1).filter(\n entry => entry.type === 'messages'\n );\n\n if (entries.length > 0) {\n let toApply = entries\n .reduce((acc, entry) => {\n return acc.concat(\n entry.messages\n .map(message => undoMessage(message, entry.oldData))\n .filter(x => x)\n );\n }, [])\n .reverse();\n\n await applyUndoAction(toApply, meta, entries[0].undoTag);\n }\n}\n\nfunction undoMessage(message, oldData) {\n let oldItem = getIn(oldData, [message.dataset, message.row]);\n if (oldItem) {\n let column = message.column;\n if (message.dataset === 'spreadsheet_cells') {\n // The spreadsheet messages use the `expr` column, but only as a\n // placeholder. We actually want to read the `cachedValue` prop\n // from the old item.\n column = 'cachedValue';\n }\n\n return { ...message, value: oldItem[column] };\n } else {\n if (message.dataset === 'spreadsheet_cells') {\n if (message.column === 'expr') {\n return { ...message, value: null };\n }\n return message;\n } else if (\n // The mapping fields aren't ever deleted... this should be\n // harmless since all they are is meta information. Maybe we\n // should fix this though.\n message.dataset !== 'category_mapping' &&\n message.dataset !== 'payee_mapping'\n ) {\n if (\n message.dataset === 'zero_budget_months' ||\n message.dataset === 'zero_budgets' ||\n message.dataset === 'reflect_budgets'\n ) {\n // Only these fields are reversable\n if (['buffered', 'amount', 'carryover'].includes(message.column)) {\n return { ...message, value: 0 };\n }\n return null;\n } else if (message.dataset === 'notes') {\n return { ...message, value: null };\n }\n\n return { ...message, column: 'tombstone', value: 1 };\n }\n }\n return null;\n}\n\nexport async function redo() {\n let meta =\n MESSAGE_HISTORY[CURSOR].type === 'marker'\n ? MESSAGE_HISTORY[CURSOR].meta\n : null;\n\n let start = CURSOR;\n CURSOR = Math.min(CURSOR + 1, MESSAGE_HISTORY.length - 1);\n\n // Walk forward to the nearest marker\n while (\n CURSOR < MESSAGE_HISTORY.length - 1 &&\n MESSAGE_HISTORY[CURSOR].type !== 'marker'\n ) {\n CURSOR++;\n }\n\n let end = CURSOR;\n let entries = MESSAGE_HISTORY.slice(start + 1, end + 1).filter(\n entry => entry.type === 'messages'\n );\n\n if (entries.length > 0) {\n let toApply = entries.reduce((acc, entry) => {\n return acc\n .concat(entry.messages)\n .concat(redoResurrections(entry.messages, entry.oldData));\n }, []);\n\n await applyUndoAction(toApply, meta, entries[entries.length - 1].undoTag);\n }\n}\n\nfunction redoResurrections(messages, oldData) {\n let resurrect = new Set();\n\n messages.forEach(message => {\n // If any of the ids didn't exist before, we need to \"resurrect\"\n // them by resetting their tombstones to 0\n let oldItem = getIn(oldData, [message.dataset, message.row]);\n if (\n !oldItem &&\n ![\n 'zero_budget_months',\n 'zero_budgets',\n 'reflect_budgets',\n 'notes',\n 'category_mapping',\n 'payee_mapping'\n ].includes(message.dataset)\n ) {\n resurrect.add(message.dataset + '.' + message.row);\n }\n });\n\n return [...resurrect].map(desc => {\n let [table, row] = desc.split('.');\n return {\n dataset: table,\n row,\n column: 'tombstone',\n value: 0,\n timestamp: Timestamp.send()\n };\n });\n}\n","import initSqlJS from '@jlongster/sql.js';\nimport * as perf from 'perf-deets';\n\nlet SQL = null;\n\nexport async function init() {\n // `initSqlJS` doesn't actually return a real promise, so make sure\n // we're returning a real one for correct semantics\n return new Promise((resolve, reject) => {\n initSqlJS({\n locateFile: file => process.env.PUBLIC_URL + file\n }).then(\n sql => {\n SQL = sql;\n resolve();\n },\n err => {\n reject(err);\n }\n );\n });\n}\n\nexport function _getModule() {\n if (SQL == null) {\n throw new Error('_getModule: sql.js must be initialized first');\n }\n return SQL;\n}\n\nfunction verifyParamTypes(sql, arr) {\n arr.forEach(val => {\n if (typeof val !== 'string' && typeof val !== 'number' && val !== null) {\n throw new Error('Invalid field type ' + val + ' for sql ' + sql);\n }\n });\n}\n\nexport function prepare(db, sql) {\n return db.prepare(sql);\n}\n\nexport function runQuery(db, sql, params = [], fetchAll) {\n perf.count('runQuery');\n if (params) {\n verifyParamTypes(sql, params);\n }\n\n let stmt = typeof sql === 'string' ? db.prepare(sql) : sql;\n\n if (fetchAll) {\n try {\n stmt.bind(params);\n let rows = [];\n\n while (stmt.step()) {\n rows.push(stmt.getAsObject());\n }\n\n if (typeof sql === 'string') {\n stmt.free();\n } else {\n stmt.reset();\n }\n return rows;\n } catch (e) {\n console.log(sql);\n throw e;\n }\n } else {\n try {\n stmt.run(params);\n return { changes: db.getRowsModified() };\n } catch (e) {\n // console.log(sql);\n throw e;\n }\n }\n}\n\nexport function execQuery(db, sql) {\n db.exec(sql);\n}\n\nlet transactionDepth = 0;\n\nexport function transaction(db, fn) {\n let before, after, undo;\n if (transactionDepth > 0) {\n before = 'SAVEPOINT __actual_sp';\n after = 'RELEASE __actual_sp';\n undo = 'ROLLBACK TO __actual_sp';\n } else {\n before = 'BEGIN';\n after = 'COMMIT';\n undo = 'ROLLBACK';\n }\n\n execQuery(db, before);\n transactionDepth++;\n\n try {\n const result = fn();\n execQuery(db, after);\n return result;\n } catch (ex) {\n execQuery(db, undo);\n\n if (undo !== 'ROLLBACK') {\n execQuery(db, after);\n }\n\n throw ex;\n } finally {\n transactionDepth--;\n }\n}\n\n// See the comment about this function in index.electron.js. You\n// shouldn't normally use this. I'd like to get rid of it.\nexport async function asyncTransaction(db, fn) {\n // Support nested transactions by \"coalescing\" them into the parent\n // one if one is already started\n if (transactionDepth === 0) {\n db.exec('BEGIN TRANSACTION');\n }\n transactionDepth++;\n\n try {\n await fn();\n } finally {\n transactionDepth--;\n // We always commit because rollback is more dangerous - any\n // queries that ran *in-between* this async function would be\n // lost. Right now we are only using transactions for speed\n // purposes unfortunately\n if (transactionDepth === 0) {\n db.exec('COMMIT');\n }\n }\n}\n\nexport async function openDatabase(pathOrBuffer) {\n if (pathOrBuffer) {\n if (typeof pathOrBuffer !== 'string') {\n return new SQL.Database(pathOrBuffer);\n }\n\n let path = pathOrBuffer;\n if (path !== ':memory:') {\n if (typeof SharedArrayBuffer === 'undefined') {\n let stream = SQL.FS.open(SQL.FS.readlink(path), 'a+');\n await stream.node.contents.readIfFallback();\n SQL.FS.close(stream);\n }\n\n let db = new SQL.Database(\n path.includes('/blocked') ? path : SQL.FS.readlink(path),\n { filename: true }\n );\n db.exec(`\n PRAGMA journal_mode=MEMORY;\n PRAGMA cache_size=-10000;\n `);\n return db;\n }\n }\n\n return new SQL.Database();\n}\n\nexport function closeDatabase(db) {\n db.close();\n}\n\nexport function exportDatabase(db) {\n return db.export();\n}\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","export function requiredFields(name, row, fields, update) {\n fields.forEach(field => {\n if (update) {\n if (row.hasOwnProperty(field) && row[field] == null) {\n throw new Error(`${name} is missing field ${field}`);\n }\n } else {\n if (!row.hasOwnProperty(field) || row[field] == null) {\n throw new Error(`${name} is missing field ${field}`);\n }\n }\n });\n}\n\nexport function toDateRepr(str) {\n if (typeof str !== 'string') {\n throw new Error('toDateRepr not passed a string: ' + str);\n }\n\n return parseInt(str.replace(/-/g, ''));\n}\n\nexport function fromDateRepr(number) {\n if (typeof number !== 'number') {\n throw new Error('fromDateRepr not passed a number: ' + number);\n }\n\n const dateString = number.toString();\n return (\n dateString.slice(0, 4) +\n '-' +\n dateString.slice(4, 6) +\n '-' +\n dateString.slice(6)\n );\n}\n\nexport const accountModel = {\n validateAccountType(account) {\n const { type } = account;\n if (\n type !== 'checking' &&\n type !== 'savings' &&\n type !== 'investment' &&\n type !== 'credit' &&\n type !== 'mortgage' &&\n type !== 'debt' &&\n type !== 'other'\n ) {\n throw new Error('Invalid account type: ' + type);\n }\n },\n\n validate(account, { update } = {}) {\n if (!update || account.type != null) {\n accountModel.validateAccountType(account);\n }\n\n requiredFields(\n 'account',\n account,\n update ? ['name', 'type', 'offbudget', 'closed'] : ['name', 'type'],\n update\n );\n\n return account;\n }\n};\n\nexport const categoryModel = {\n validate(category, { update } = {}) {\n requiredFields(\n 'category',\n category,\n update ? ['name', 'is_income', 'cat_group'] : ['name', 'cat_group'],\n update\n );\n\n let { sort_order, ...rest } = category;\n return rest;\n }\n};\n\nexport const categoryGroupModel = {\n validate(categoryGroup, { update } = {}) {\n requiredFields(\n 'categoryGroup',\n categoryGroup,\n update ? ['name', 'is_income'] : ['name'],\n update\n );\n\n let { sort_order, ...rest } = categoryGroup;\n return rest;\n }\n};\n\nexport const payeeModel = {\n validate(payee, { update } = {}) {\n requiredFields('payee', payee, ['name'], update);\n return payee;\n }\n};\n\nexport const payeeRuleModel = {\n validateType(rule) {\n const { type } = rule;\n if (type !== 'equals' && type !== 'contains') {\n throw new Error('Invalid rule type: ' + type);\n }\n },\n\n validate(rule, { update } = {}) {\n if (!update || 'type' in rule) {\n payeeRuleModel.validateType(rule);\n }\n\n requiredFields('payee_rules', rule, ['payee_id', 'type'], update);\n return rule;\n }\n};\n\nexport const transactionModel = {\n validate(trans, { update } = {}) {\n requiredFields('transaction', trans, ['date', 'acct'], update);\n\n if ('date' in trans) {\n // Make sure it's the right format, and also do a sanity check.\n // Really old dates can mess up the system and can happen by\n // accident\n if (\n trans.date.match(/^\\d{4}-\\d{2}-\\d{2}$/) == null ||\n trans.date < '2000-01-01'\n ) {\n throw new Error('Invalid transaction date: ' + trans.date);\n }\n }\n\n return trans;\n },\n\n toJS(row) {\n // Check a non-important field that typically wouldn't be passed in\n // manually, and use it as a smoke test to see if this is a\n // fully-formed transaction or not.\n if (!('location' in row)) {\n throw new Error(\n 'A full transaction is required to be passed to `toJS`. Instead got: ' +\n JSON.stringify(row)\n );\n }\n\n let trans = { ...row };\n trans.error = row.error ? JSON.parse(row.error) : null;\n trans.isParent = row.isParent === 1 ? true : false;\n trans.isChild = row.isChild === 1 ? true : false;\n trans.starting_balance_flag =\n row.starting_balance_flag === 1 ? true : false;\n trans.cleared = row.cleared === 1 ? true : false;\n trans.pending = row.pending === 1 ? true : false;\n trans.date = trans.date && fromDateRepr(trans.date);\n return trans;\n },\n\n fromJS(trans) {\n let row = { ...trans };\n if ('error' in row) {\n row.error = trans.error ? JSON.stringify(trans.error) : null;\n }\n if ('isParent' in row) {\n row.isParent = trans.isParent ? 1 : 0;\n }\n if ('isChild' in row) {\n row.isChild = trans.isChild ? 1 : 0;\n }\n if ('cleared' in row) {\n row.cleared = trans.cleared ? 1 : 0;\n }\n if ('pending' in row) {\n row.pending = trans.pending ? 1 : 0;\n }\n if ('starting_balance_flag' in row) {\n row.starting_balance_flag = trans.starting_balance_flag ? 1 : 0;\n }\n if ('date' in row) {\n row.date = toDateRepr(trans.date);\n }\n\n return row;\n }\n};\n","// TODO: normalize error types\nexport class PostError extends Error {\n constructor(reason, meta) {\n super('PostError: ' + reason);\n this.type = 'PostError';\n this.reason = reason;\n this.meta = meta;\n }\n}\n\nexport class HTTPError extends Error {\n constructor(code, body) {\n super(`HTTPError: unsuccessful status code (${code}): ${body}`);\n this.statusCode = code;\n this.responseBody = body;\n }\n}\n\nexport class SyncError extends Error {\n constructor(reason, meta) {\n super('SyncError: ' + reason);\n this.reason = reason;\n this.meta = meta;\n }\n}\n\nexport class TransactionError extends Error {\n // eslint-disable-next-line\n constructor(message) {\n super(message);\n }\n}\n\nexport class RuleError extends Error {\n constructor(type, message) {\n super('RuleError: ' + message);\n this.type = type;\n }\n}\n\nexport function APIError(msg, meta) {\n return { type: 'APIError', message: msg, meta };\n}\n\nexport function FileDownloadError(reason, meta) {\n return { type: 'FileDownloadError', reason, meta };\n}\n\nexport function FileUploadError(reason, meta) {\n return { type: 'FileUploadError', reason, meta };\n}\n\nexport function isCodeError(err) {\n return err instanceof ReferenceError || err instanceof SyntaxError;\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","import fs from '../platform/server/fs';\n\nlet config = null;\n\nfunction joinURL(base, ...paths) {\n let url = new URL(base);\n url.pathname = fs.join(...paths);\n return url.toString();\n}\n\nexport function setServer(url) {\n if (url == null) {\n config = null;\n } else {\n config = getServer(url);\n }\n}\n\n// `url` is optional; if not given it will provide the global config\nexport function getServer(url) {\n if (url) {\n return {\n BASE_SERVER: url,\n SYNC_SERVER: joinURL(url, '/sync'),\n SIGNUP_SERVER: joinURL(url, '/account'),\n PLAID_SERVER: joinURL(url, '/plaid')\n };\n }\n return config;\n}\n","import * as db from '../db';\nimport {\n Condition,\n Action,\n Rule,\n RuleIndexer,\n rankRules,\n migrateIds,\n iterateIds\n} from './rules';\nimport { getMappings } from '../db/mappings';\nimport { addDays, subDays, parseDate, dayFromDate } from '../../shared/months';\nimport { addSyncListener } from '../sync/index';\nimport { RuleError } from '../errors';\nimport {\n FIELD_TYPES,\n sortNumbers,\n getApproxNumberThreshold\n} from '../../shared/rules';\nimport q from '../../shared/query';\nimport { requiredFields, toDateRepr } from '../models';\nimport { currentDay } from '../../shared/months';\nimport { partitionByField, fastSetMerge } from '../../shared/util';\nimport { setSyncingMode, batchMessages } from '../sync';\nimport { schemaConfig } from '../aql/schema';\nconst uuid = require('../../platform/uuid');\n\n// TODO: Detect if it looks like the user is creating a rename rule\n// and prompt to create it in the pre phase instead\n// * We could also make the \"create rule\" button a dropdown that\n// provides different \"templates\" like \"create renaming rule\"\n\nexport { iterateIds } from './rules';\n\nlet allRules;\nlet unlistenSync;\nlet firstcharIndexer;\nlet payeeIndexer;\n\nexport function resetState() {\n allRules = new Map();\n firstcharIndexer = new RuleIndexer({\n field: 'imported_payee',\n method: 'firstchar'\n });\n payeeIndexer = new RuleIndexer({ field: 'payee' });\n}\n\n// Database functions\n\nfunction invert(obj) {\n return Object.fromEntries(\n Object.entries(obj).map(entry => {\n return [entry[1], entry[0]];\n })\n );\n}\n\nlet internalFields = schemaConfig.views.transactions.fields;\nlet publicFields = invert(schemaConfig.views.transactions.fields);\n\nfunction fromInternalField(obj) {\n return {\n ...obj,\n field: publicFields[obj.field] || obj.field\n };\n}\n\nfunction toInternalField(obj) {\n return {\n ...obj,\n field: internalFields[obj.field] || obj.field\n };\n}\n\nexport const ruleModel = {\n validate(rule, { update } = {}) {\n requiredFields('rules', rule, ['conditions', 'actions'], update);\n\n if (!update || 'stage' in rule) {\n if (\n rule.stage !== 'pre' &&\n rule.stage !== 'post' &&\n rule.stage !== null\n ) {\n throw new Error('Invalid rule stage: ' + rule.stage);\n }\n }\n\n return rule;\n },\n\n toJS(row) {\n function parseArray(str) {\n let value;\n try {\n value = typeof str === 'string' ? JSON.parse(str) : str;\n } catch (e) {\n throw new RuleError('internal', 'Cannot parse rule json');\n }\n\n if (!Array.isArray(value)) {\n throw new RuleError('internal', 'Rule json must be an array');\n }\n return value;\n }\n\n let rule = { ...row };\n rule.conditions = rule.conditions\n ? parseArray(rule.conditions).map(cond => fromInternalField(cond))\n : [];\n rule.actions = rule.actions\n ? parseArray(rule.actions).map(action => fromInternalField(action))\n : [];\n return rule;\n },\n\n fromJS(rule) {\n let row = { ...rule };\n if ('conditions' in row) {\n let conditions = row.conditions.map(cond => toInternalField(cond));\n row.conditions = JSON.stringify(conditions);\n }\n if ('actions' in row) {\n let actions = row.actions.map(action => toInternalField(action));\n row.actions = JSON.stringify(actions);\n }\n return row;\n }\n};\n\nexport function makeRule(data) {\n let rule;\n try {\n rule = new Rule({\n ...ruleModel.toJS(data),\n fieldTypes: FIELD_TYPES\n });\n } catch (e) {\n console.warn('Invalid rule', e);\n if (e instanceof RuleError) {\n return null;\n }\n throw e;\n }\n\n // This is needed because we map ids on the fly, and they might\n // not be persisted into the db. Mappings allow items to\n // transparently merge with other items\n migrateIds(rule, getMappings());\n\n return rule;\n}\n\nexport async function loadRules() {\n resetState();\n\n let rules = await db.all(`\n SELECT * FROM rules\n WHERE conditions IS NOT NULL AND actions IS NOT NULL AND tombstone = 0\n `);\n\n for (let i = 0; i < rules.length; i++) {\n let desc = rules[i];\n // These are old stages, can be removed before release\n if (desc.stage === 'cleanup' || desc.stage === 'modify') {\n desc.stage = 'pre';\n }\n\n let rule = makeRule(desc);\n if (rule) {\n allRules.set(rule.id, rule);\n firstcharIndexer.index(rule);\n payeeIndexer.index(rule);\n }\n }\n\n if (unlistenSync) {\n unlistenSync();\n }\n unlistenSync = addSyncListener(onApplySync);\n}\n\nexport function getRules() {\n // This can simply return the in-memory data\n return [...allRules.values()];\n}\n\nexport async function insertRule(rule) {\n rule = ruleModel.validate(rule);\n return db.insertWithUUID('rules', ruleModel.fromJS(rule));\n}\n\nexport async function updateRule(rule) {\n rule = ruleModel.validate(rule, { update: true });\n return db.update('rules', ruleModel.fromJS(rule));\n}\n\nexport async function deleteRule(rule) {\n let schedule = await db.first('SELECT id FROM schedules WHERE rule = ?', [\n rule.id\n ]);\n\n if (schedule) {\n return false;\n }\n\n return db.delete_('rules', rule.id);\n}\n\n// Sync projections\n\nfunction onApplySync(oldValues, newValues) {\n newValues.forEach((items, table) => {\n if (table === 'rules') {\n items.forEach(newValue => {\n let oldRule = allRules.get(newValue.id);\n\n if (newValue.tombstone === 1) {\n // Deleted, need to remove it from in-memory\n let rule = allRules.get(newValue.id);\n if (rule) {\n allRules.delete(rule.getId());\n firstcharIndexer.remove(rule);\n payeeIndexer.remove(rule);\n }\n } else {\n // Inserted/updated\n let rule = makeRule(newValue);\n if (rule) {\n if (oldRule) {\n firstcharIndexer.remove(oldRule);\n payeeIndexer.remove(oldRule);\n }\n allRules.set(newValue.id, rule);\n firstcharIndexer.index(rule);\n payeeIndexer.index(rule);\n }\n }\n });\n }\n });\n\n // If any of the mapping tables have changed, we need to refresh the\n // ids\n let tables = [...newValues.keys()];\n if (tables.find(table => table.indexOf('mapping') !== -1)) {\n getRules().forEach(rule => {\n migrateIds(rule, getMappings());\n });\n }\n}\n\n// Runner\nexport function runRules(trans) {\n let finalTrans = { ...trans };\n let allChanges = {};\n\n let rules = rankRules(\n fastSetMerge(\n firstcharIndexer.getApplicableRules(trans),\n payeeIndexer.getApplicableRules(trans)\n )\n );\n\n for (let i = 0; i < rules.length; i++) {\n finalTrans = rules[i].apply(finalTrans);\n }\n\n return finalTrans;\n}\n\n// This does the inverse: finds all the transactions matching a rule\nexport function conditionsToAQL(conditions, { recurDateBounds = 100 } = {}) {\n let errors = [];\n\n conditions = conditions\n .map(cond => {\n if (cond instanceof Condition) {\n return cond;\n }\n\n try {\n return new Condition(\n cond.op,\n cond.field,\n cond.value,\n cond.options,\n FIELD_TYPES\n );\n } catch (e) {\n errors.push(e.type || 'internal');\n console.log('conditionsToAQL: invalid condition: ' + e.message);\n return null;\n }\n })\n .filter(Boolean);\n\n // rule -> actualql\n let filters = conditions.map(cond => {\n let { type, field, op, value, options } = cond;\n\n let getValue = value => {\n if (type === 'number') {\n return value.value;\n }\n return value;\n };\n\n let apply = (field, op, value) => {\n if (type === 'number') {\n if (options) {\n if (options.outflow) {\n return {\n $and: [\n { amount: { $lt: 0 } },\n { [field]: { $transform: '$neg', [op]: value } }\n ]\n };\n } else if (options.inflow) {\n return {\n $and: [{ amount: { $gt: 0 } }, { [field]: { [op]: value } }]\n };\n }\n }\n\n return { amount: { [op]: value } };\n } else if (type === 'string') {\n return { [field]: { $transform: '$lower', [op]: value } };\n } else if (type === 'date') {\n return { [field]: { [op]: value.date } };\n }\n return { [field]: { [op]: value } };\n };\n\n switch (op) {\n case 'isapprox':\n case 'is':\n if (type === 'date') {\n if (value.type === 'recur') {\n let dates = value.schedule\n .occurrences({ take: recurDateBounds })\n .toArray()\n .map(d => dayFromDate(d.date));\n\n let compare = d => ({ $eq: d });\n\n return {\n $or: dates.map(d => {\n if (op === 'isapprox') {\n return {\n $and: [\n { date: { $gte: subDays(d, 2) } },\n { date: { $lte: addDays(d, 2) } }\n ]\n };\n }\n return { date: d };\n })\n };\n } else {\n let { date } = value;\n\n if (op === 'isapprox') {\n let fullDate = parseDate(value.date);\n let high = addDays(fullDate, 2);\n let low = subDays(fullDate, 2);\n\n return {\n $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n };\n } else {\n switch (value.type) {\n case 'date':\n return { date: value.date };\n case 'month': {\n let low = value.date + '-00';\n let high = value.date + '-99';\n return {\n $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n };\n }\n case 'year': {\n let low = value.date + '-00-00';\n let high = value.date + '-99-99';\n return {\n $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n };\n }\n default:\n }\n }\n }\n } else if (type === 'number') {\n let number = value.value;\n if (op === 'isapprox') {\n let threshold = getApproxNumberThreshold(number);\n\n return {\n $and: [\n apply(field, '$gte', number - threshold),\n apply(field, '$lte', number + threshold)\n ]\n };\n }\n return apply(field, '$eq', number);\n }\n\n return apply(field, '$eq', value);\n\n case 'isbetween':\n // This operator is only applicable to the specific `between`\n // number type so we don't use `apply`\n let [low, high] = sortNumbers(value.num1, value.num2);\n return {\n [field]: [{ $gte: low }, { $lte: high }]\n };\n case 'contains':\n // Running contains with id will automatically reach into\n // the `name` of the referenced table and do a string match\n return apply(\n type === 'id' ? field + '.name' : field,\n '$like',\n '%' + value + '%'\n );\n case 'oneOf':\n let values = value;\n if (values.length === 0) {\n // This forces it to match nothing\n return { id: null };\n }\n return { $or: values.map(v => apply(field, '$eq', v)) };\n case 'gt':\n return apply(field, '$gt', getValue(value));\n case 'gte':\n return apply(field, '$gte', getValue(value));\n case 'lt':\n return apply(field, '$lt', getValue(value));\n case 'lte':\n return apply(field, '$lte', getValue(value));\n case 'true':\n return apply(field, '$eq', true);\n case 'false':\n return apply(field, '$eq', false);\n default:\n throw new Error('Unhandled operator: ' + op);\n }\n });\n\n return { filters, errors };\n}\n\nexport function applyActions(transactionIds, actions, handlers) {\n let parsedActions = actions\n .map(action => {\n if (action instanceof Action) {\n return action;\n }\n\n try {\n return new Action(\n action.op,\n action.field,\n action.value,\n action.options,\n FIELD_TYPES\n );\n } catch (e) {\n console.log('Action error', e);\n return null;\n }\n })\n .filter(Boolean);\n\n if (parsedActions.length !== actions.length) {\n // An error happened while parsing\n return null;\n }\n\n let updated = transactionIds.map(id => {\n let update = { id };\n for (let action of parsedActions) {\n action.exec(update);\n }\n return update;\n });\n\n return handlers['transactions-batch-update']({ updated });\n}\n\nexport function getRulesForPayee(payeeId) {\n let rules = new Set();\n iterateIds(getRules(), 'payee', (rule, id) => {\n if (id === payeeId) {\n rules.add(rule);\n }\n });\n\n return rankRules([...rules]);\n}\n\nfunction* getIsSetterRules(\n stage,\n condField,\n actionField,\n { condValue, actionValue }\n) {\n let rules = getRules();\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i];\n\n if (\n rule.stage === stage &&\n rule.actions.length === 1 &&\n rule.actions[0].op === 'set' &&\n rule.actions[0].field === actionField &&\n (actionValue === undefined || rule.actions[0].value === actionValue) &&\n rule.conditions.length === 1 &&\n rule.conditions[0].op === 'is' &&\n rule.conditions[0].field === condField &&\n (condValue === undefined || rule.conditions[0].value === condValue)\n ) {\n yield rule.serialize();\n }\n }\n\n return null;\n}\n\nfunction* getOneOfSetterRules(\n stage,\n condField,\n actionField,\n { condValue, actionValue }\n) {\n let rules = getRules();\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i];\n\n if (\n rule.stage === stage &&\n rule.actions.length === 1 &&\n rule.actions[0].op === 'set' &&\n rule.actions[0].field === actionField &&\n (actionValue == null || rule.actions[0].value === actionValue) &&\n rule.conditions.length === 1 &&\n rule.conditions[0].op === 'oneOf' &&\n rule.conditions[0].field === condField &&\n (condValue == null || rule.conditions[0].value.indexOf(condValue) !== -1)\n ) {\n yield rule.serialize();\n }\n }\n\n return null;\n}\n\nexport async function updatePayeeRenameRule(fromNames, to) {\n let renameRule = getOneOfSetterRules('pre', 'imported_payee', 'payee', {\n actionValue: to\n }).next().value;\n\n // Note that we don't check for existing rules that set this\n // `imported_payee` to something else. It's important to do\n // that for categories because categories will be changes frequently\n // for the same payee, but renames won't be changed much. It's a use\n // case we could improve in the future, but this is fine for now.\n\n if (renameRule) {\n let condition = renameRule.conditions[0];\n let newValue = [\n ...fastSetMerge(\n new Set(condition.value),\n new Set(fromNames.filter(name => name !== ''))\n )\n ];\n let rule = {\n ...renameRule,\n conditions: [{ ...condition, value: newValue }]\n };\n await updateRule(rule);\n return renameRule.id;\n } else {\n let rule = new Rule({\n stage: 'pre',\n conditions: [{ op: 'oneOf', field: 'imported_payee', value: fromNames }],\n actions: [{ op: 'set', field: 'payee', value: to }],\n fieldTypes: FIELD_TYPES\n });\n return insertRule(rule.serialize());\n }\n}\n\nexport function getProbableCategory(transactions) {\n let scores = new Map();\n\n transactions.forEach(trans => {\n if (trans.category) {\n scores.set(trans.category, (scores.get(trans.category) || 0) + 1);\n }\n });\n\n let winner = transactions.reduce((winner, trans) => {\n let score = scores.get(trans.category);\n if (!winner || score > winner.score) {\n return { score, category: trans.category };\n }\n return winner;\n }, null);\n\n return winner.score >= 3 ? winner.category : null;\n}\n\nexport async function updateCategoryRules(transactions) {\n if (transactions.length === 0) {\n return;\n }\n\n let payeeIds = new Set(transactions.map(trans => trans.payee));\n let transIds = new Set(transactions.map(trans => trans.id));\n\n // It's going to be quickest to get the oldest date and then query\n // all transactions since then so we can work in memory\n let oldestDate = null;\n for (let i = 0; i < transactions.length; i++) {\n if (oldestDate === null || transactions[i].date < oldestDate) {\n oldestDate = transactions[i].date;\n }\n }\n\n // We look 6 months behind to include any other transaction. This\n // makes it so we, 1. don't have to load in all transactions ever\n // and 2. \"forget\" really old transactions which might be nice and\n // 3. don't have to individually run a query for each payee\n oldestDate = subDays(oldestDate, 180);\n\n // Also look 180 days in the future to get any future transactions\n // (this might change when we think about scheduled transactions)\n let register = await db.all(\n `SELECT t.* FROM v_transactions t\n LEFT JOIN accounts a ON a.id = t.account\n WHERE date >= ? AND date <= ? AND is_parent = 0 AND a.closed = 0`,\n [toDateRepr(oldestDate), toDateRepr(addDays(currentDay(), 180))]\n );\n\n let allTransactions = partitionByField(register, 'payee');\n let categoriesToSet = new Map();\n\n for (let payeeId of payeeIds) {\n // Don't do anything if payee is null\n if (payeeId) {\n let latestTrans = (allTransactions.get(payeeId) || []).slice(0, 5);\n\n // Check if one of the latest transactions was one that was\n // updated. We only want to update anything if so.\n if (latestTrans.find(trans => transIds.has(trans.id))) {\n let category = getProbableCategory(latestTrans);\n if (category) {\n categoriesToSet.set(payeeId, category);\n }\n }\n }\n }\n\n await batchMessages(async () => {\n for (let [payeeId, category] of categoriesToSet.entries()) {\n let ruleSetters = [\n ...getIsSetterRules(null, 'payee', 'category', {\n condValue: payeeId\n })\n ];\n\n if (ruleSetters.length > 0) {\n // If there are existing rules, change all of them to the new\n // category (if they aren't already using it). We set all of\n // them because it's possible that multiple rules exist\n // because 2 clients made them independently. Not really a big\n // deal, but to make sure our update gets applied set it to\n // all of them\n for (let rule of ruleSetters) {\n let action = rule.actions[0];\n if (action.value !== category) {\n await updateRule({\n ...rule,\n actions: [{ ...action, value: category }]\n });\n }\n }\n } else {\n // No existing rules, so create one\n let newRule = new Rule({\n stage: null,\n conditions: [{ op: 'is', field: 'payee', value: payeeId }],\n actions: [{ op: 'set', field: 'category', value: category }],\n fieldTypes: FIELD_TYPES\n });\n await insertRule(newRule.serialize());\n }\n }\n });\n}\n\n// This can be removed in the future\nexport async function migrateOldRules() {\n let allPayees = await db.all(\n `SELECT p.*, c.id as category FROM payees p\n LEFT JOIN category_mapping cm ON cm.id = p.category\n LEFT JOIN categories c ON (c.id = cm.transferId AND c.tombstone = 0)\n WHERE p.tombstone = 0 AND transfer_acct IS NULL`\n );\n let allRules = await db.all(\n `SELECT pr.*, pm.targetId as payee_id FROM payee_rules pr\n LEFT JOIN payee_mapping pm ON pm.id = pr.payee_id\n WHERE pr.tombstone = 0`\n );\n\n let payeesById = new Map();\n for (let i = 0; i < allPayees.length; i++) {\n payeesById.set(allPayees[i].id, allPayees[i]);\n }\n\n let rulesByPayeeId = new Map();\n for (let i = 0; i < allRules.length; i++) {\n let item = allRules[i];\n let rules = rulesByPayeeId.get(item.payee_id) || [];\n rules.push(item);\n rulesByPayeeId.set(item.payee_id, rules);\n }\n\n let rules = [];\n\n // Convert payee name rules\n for (let [payeeId, payeeRules] of rulesByPayeeId.entries()) {\n let equals = payeeRules.filter(r => {\n let payee = payeesById.get(r.payee_id);\n\n return (\n (r.type === 'equals' || r.type == null) &&\n (!payee || r.value.toLowerCase() !== payee.name.toLowerCase())\n );\n });\n let contains = payeeRules.filter(r => r.type === 'contains');\n let actions = [{ op: 'set', field: 'payee', value: payeeId }];\n\n if (equals.length > 0) {\n rules.push({\n stage: null,\n conditions: [\n {\n op: 'oneOf',\n field: 'imported_payee',\n value: equals.map(payeeRule => payeeRule.value)\n }\n ],\n actions\n });\n }\n\n if (contains.length > 0) {\n rules = rules.concat(\n contains.map(payeeRule => ({\n stage: null,\n conditions: [\n {\n op: 'contains',\n field: 'imported_payee',\n value: payeeRule.value\n }\n ],\n actions\n }))\n );\n }\n }\n\n // Convert category rules\n let catRules = allPayees\n .filter(p => p.category)\n .reduce((map, payee) => {\n let ids = map.get(payee.category) || new Set();\n ids.add(payee.id);\n map.set(payee.category, ids);\n return map;\n }, new Map());\n\n for (let [catId, payeeIds] of catRules) {\n rules.push({\n stage: null,\n conditions: [\n {\n op: 'oneOf',\n field: 'payee',\n value: [...payeeIds]\n }\n ],\n actions: [\n {\n op: 'set',\n field: 'category',\n value: catId\n }\n ]\n });\n }\n\n // Very important: we never want to sync migration changes, but it\n // still has to run through the syncing layer to make sure\n // projections are correct. This is only OK because we require a\n // sync reset after this.\n let prevMode = setSyncingMode('disabled');\n await batchMessages(async () => {\n for (let rule of rules) {\n await insertRule({\n stage: rule.stage,\n conditions: rule.conditions,\n actions: rule.actions\n });\n }\n\n await db.runQuery('DELETE FROM payee_rules', []);\n });\n setSyncingMode(prevMode);\n}\n","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : ''\n var output = Math.abs(number).toString()\n while (output.length < targetLength) {\n output = '0' + output\n }\n return sign + output\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/* global globalThis */\n\nexport function captureException(exc) {\n console.log('[Exception]', exc);\n if (globalThis.SentryClient) {\n globalThis.SentryClient.captureException(exc);\n }\n}\n\nexport function captureBreadcrumb(breadcrumb) {\n if (globalThis.SentryClient) {\n globalThis.SentryClient.addBreadcrumb(breadcrumb);\n }\n}\n","export class Query {\n constructor(state) {\n this.state = {\n filterExpressions: state.filterExpressions || [],\n selectExpressions: state.selectExpressions || [],\n groupExpressions: state.groupExpressions || [],\n orderExpressions: state.orderExpressions || [],\n calculation: false,\n rawMode: false,\n withDead: false,\n validateRefs: true,\n limit: null,\n offset: null,\n ...state\n };\n }\n\n filter(expr) {\n return new Query({\n ...this.state,\n filterExpressions: [...this.state.filterExpressions, expr]\n });\n }\n\n unfilter(exprs) {\n let exprSet = new Set(exprs);\n return new Query({\n ...this.state,\n filterExpressions: this.state.filterExpressions.filter(\n expr => !exprSet.has(Object.keys(expr)[0])\n )\n });\n }\n\n select(exprs = []) {\n if (!Array.isArray(exprs)) {\n exprs = [exprs];\n }\n\n let query = new Query({ ...this.state, selectExpressions: exprs });\n query.state.calculation = false;\n return query;\n }\n\n calculate(expr) {\n let query = this.select({ result: expr });\n query.state.calculation = true;\n return query;\n }\n\n groupBy(exprs) {\n if (!Array.isArray(exprs)) {\n exprs = [exprs];\n }\n\n return new Query({\n ...this.state,\n groupExpressions: [...this.state.groupExpressions, ...exprs]\n });\n }\n\n orderBy(exprs) {\n if (!Array.isArray(exprs)) {\n exprs = [exprs];\n }\n\n return new Query({\n ...this.state,\n orderExpressions: [...this.state.orderExpressions, ...exprs]\n });\n }\n\n limit(num) {\n return new Query({ ...this.state, limit: num });\n }\n\n offset(num) {\n return new Query({ ...this.state, offset: num });\n }\n\n raw() {\n return new Query({ ...this.state, rawMode: true });\n }\n\n withDead() {\n return new Query({ ...this.state, withDead: true });\n }\n\n withoutValidatedRefs() {\n return new Query({ ...this.state, validateRefs: false });\n }\n\n options(opts) {\n return new Query({ ...this.state, tableOptions: opts });\n }\n\n serialize() {\n return this.state;\n }\n}\n\nexport function getPrimaryOrderBy(query, defaultOrderBy) {\n let orderExprs = query.serialize().orderExpressions;\n if (orderExprs.length === 0) {\n if (defaultOrderBy) {\n return { order: 'asc', ...defaultOrderBy };\n }\n return null;\n }\n\n let firstOrder = orderExprs[0];\n if (typeof firstOrder === 'string') {\n return { field: firstOrder, order: 'asc' };\n }\n // Handle this form: { field: 'desc' }\n let [field] = Object.keys(firstOrder);\n return { field, order: firstOrder[field] };\n}\n\nexport default function q(table) {\n return new Query({ table });\n}\n","import * as db from '../db';\nimport { compileQuery, defaultConstructQuery } from './compiler';\nimport { convertInputType, convertOutputType } from './schema-helpers';\n\n// TODO (compiler):\n// * Properly safeguard all inputs against SQL injection\n// * Functions for incr/decr dates\n// * Support HAVING\n// * Allow creating in-memory tables to run queries against static\n// data\n// * For aggregate functions on selected ids, manually implement\n// them only only support a specific few (sum amount / etc)\n// * Select expressions should be evaluated first, and added to a\n// global \"field lookup\" table that other filter/groupBy/etc\n// expressions can reference\n\nfunction applyTypes(data, outputTypes) {\n for (let i = 0; i < data.length; i++) {\n let item = data[i];\n Object.keys(item).forEach(name => {\n item[name] = convertOutputType(item[name], outputTypes.get(name));\n });\n }\n}\n\nexport async function execQuery(\n queryState,\n state,\n sqlPieces,\n params,\n outputTypes\n) {\n let sql = defaultConstructQuery(queryState, state, sqlPieces);\n let data = await db.all(sql, params);\n applyTypes(data, outputTypes);\n return data;\n}\n\nexport async function runCompiledQuery(\n query,\n pieces,\n state,\n { params = {}, executors = {} } = {}\n) {\n let paramArray = state.namedParameters.map(param => {\n let name = param.paramName;\n if (params[name] === undefined) {\n throw new Error(`Parameter ${name} not provided to query`);\n }\n return convertInputType(params[name], param.paramType);\n });\n\n let data;\n if (executors[state.implicitTableName]) {\n data = await executors[state.implicitTableName](\n state,\n query,\n pieces,\n paramArray,\n state.outputTypes\n );\n } else {\n data = await execQuery(query, state, pieces, paramArray, state.outputTypes);\n }\n\n if (query.calculation) {\n if (data.length > 0) {\n let row = data[0];\n let k = Object.keys(row)[0];\n // TODO: the function being run should be the one to\n // determine the default value, not hardcoded as 0\n data = row[k] || 0;\n } else {\n data = null;\n }\n }\n return data;\n}\n\nexport async function runQuery(schema, schemaConfig, query, options) {\n let { sqlPieces, state } = compileQuery(query, schema, schemaConfig);\n let data = await runCompiledQuery(query, sqlPieces, state, options);\n return { data, dependencies: state.dependencies };\n}\n","import * as db from '../../db';\nimport { whereIn } from '../../db/util';\nimport { groupBy } from '../../../shared/util';\nimport { isAggregateQuery } from '../compiler';\nimport { convertOutputType } from '../schema-helpers';\nimport { execQuery } from '../exec';\n\n// Transactions executor\n\nexport function toGroup(parents, children, mapper = x => x) {\n return parents.reduce((list, parent) => {\n let childs = children.get(parent.id) || [];\n list.push({\n ...mapper(parent),\n subtransactions: childs.map(mapper)\n });\n return list;\n }, []);\n}\n\n// These two queries will return very different things:\n//\n// q('transactions').select({ $count: 'id' })\n// q('transactions', { splits: \"grouped\" }).select({ $count: 'id' })\n//\n// The first will return the count of non-split and child\n// transactions, and the second will return the count of all parent\n// (or non-split) transactions\n\nfunction execTransactions(state, query, sql, params, outputTypes) {\n let tableOptions = query.tableOptions || {};\n let splitType = tableOptions.splits || 'inline';\n\n if (['all', 'inline', 'none', 'grouped'].indexOf(splitType) === -1) {\n throw new Error(`Invalid \"splits\" option for transactions: \"${splitType}\"`);\n }\n\n if (splitType === 'all' || splitType === 'inline' || splitType === 'none') {\n return execTransactionsBasic(\n state,\n query,\n sql,\n params,\n splitType,\n outputTypes\n );\n } else if (splitType === 'grouped') {\n return execTransactionsGrouped(\n state,\n query,\n sql,\n params,\n splitType,\n outputTypes\n );\n }\n}\n\nfunction _isUnhappy(filter) {\n // These fields can be filtered - all split transactions will\n // still be returned regardless\n for (let key of Object.keys(filter)) {\n if (key === '$or' || key === '$and') {\n if (filter[key] && _isUnhappy(filter[key])) {\n return true;\n }\n } else if (!(key.indexOf('account') === 0 || key === 'date')) {\n return true;\n }\n }\n return false;\n}\n\nexport function isHappyPathQuery(queryState) {\n return queryState.filterExpressions.find(_isUnhappy) == null;\n}\n\nasync function execTransactionsGrouped(\n state,\n queryState,\n sql,\n params,\n splitType,\n outputTypes\n) {\n let { table: tableName, withDead } = queryState;\n let whereDead = withDead ? '' : `AND ${sql.from}.tombstone = 0`;\n\n if (isAggregateQuery(queryState)) {\n let allSql = `\n SELECT ${sql.select}\n FROM ${sql.from}\n ${sql.joins}\n ${sql.where} AND is_parent = 0 ${whereDead}\n ${sql.groupBy}\n ${sql.orderBy}\n ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n `;\n return db.all(allSql);\n }\n\n let rows;\n let matched = null;\n\n if (isHappyPathQuery(queryState)) {\n // This is just an optimization - we can just filter out children\n // directly and only list parents\n let rowSql = `\n SELECT ${sql.from}.id as group_id\n FROM ${sql.from}\n ${sql.joins}\n ${sql.where} AND is_child = 0 ${whereDead}\n ${sql.orderBy}\n ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n `;\n rows = await db.all(rowSql, params);\n } else {\n // TODO: phew, what a doozy. write docs why it works this way\n //\n // prettier-ignore\n let rowSql = `\n SELECT group_id, matched FROM (\n SELECT\n group_id,\n GROUP_CONCAT(id) as matched\n FROM (\n SELECT ${sql.from}.id, IFNULL(${sql.from}.parent_id, ${sql.from}.id) as group_id\n FROM ${sql.from}\n LEFT JOIN transactions _t2 ON ${sql.from}.is_child = 1 AND _t2.id = ${sql.from}.parent_id\n ${sql.joins}\n ${sql.where} AND ${sql.from}.tombstone = 0 AND IFNULL(_t2.tombstone, 0) = 0\n )\n GROUP BY group_id\n )\n LEFT JOIN ${sql.from} ON ${sql.from}.id = group_id\n ${sql.joins}\n ${sql.orderBy}\n ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n `;\n\n rows = await db.all(rowSql, params);\n matched = new Set(\n [].concat.apply([], rows.map(row => row.matched.split(',')))\n );\n }\n\n let where = whereIn(\n rows.map(row => row.group_id),\n `IFNULL(${sql.from}.parent_id, ${sql.from}.id)`\n );\n let finalSql = `\n SELECT ${sql.select}, parent_id AS _parent_id FROM ${sql.from}\n ${sql.joins}\n WHERE ${where} ${whereDead}\n ${sql.orderBy}\n `;\n\n let start = Date.now();\n let allRows = await db.all(finalSql);\n\n // Group the parents and children up\n let { parents, children } = allRows.reduce(\n (acc, trans) => {\n let pid = trans._parent_id;\n delete trans._parent_id;\n\n if (pid == null) {\n acc.parents.push(trans);\n } else {\n let arr = acc.children.get(pid) || [];\n arr.push(trans);\n acc.children.set(pid, arr);\n }\n return acc;\n },\n { parents: [], children: new Map() }\n );\n\n let mapper = trans => {\n Object.keys(trans).forEach(name => {\n trans[name] = convertOutputType(trans[name], outputTypes.get(name));\n });\n\n if (matched && !matched.has(trans.id)) {\n trans._unmatched = true;\n }\n return trans;\n };\n\n return toGroup(parents, children, mapper);\n}\n\nasync function execTransactionsBasic(\n state,\n queryState,\n sql,\n params,\n splitType,\n outputTypes\n) {\n let s = { ...sql };\n\n if (splitType !== 'all') {\n if (splitType === 'none') {\n s.where = `${s.where} AND ${s.from}.parent_id IS NULL`;\n } else {\n s.where = `${s.where} AND ${s.from}.is_parent = 0`;\n }\n }\n\n return execQuery(queryState, state, s, params, outputTypes);\n}\n\nexport default {\n transactions: execTransactions\n};\n","import { schema, schemaConfig } from './index';\nimport schemaExecutors from './executors';\nimport {\n runQuery as _runQuery,\n runCompiledQuery as _runCompiledQuery\n} from '../exec';\nimport { Query } from '../../../shared/query';\n\nexport function runCompiledQuery(query, sqlPieces, state, params) {\n return _runCompiledQuery(query, sqlPieces, state, {\n params,\n executors: schemaExecutors\n });\n}\n\nexport function runQuery(query, params) {\n if (query instanceof Query) {\n query = query.serialize();\n }\n\n return _runQuery(schema, schemaConfig, query, {\n params,\n executors: schemaExecutors\n });\n}\n","var MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds (dirtyDate) {\n var date = new Date(dirtyDate.getTime())\n var baseTimezoneOffset = date.getTimezoneOffset()\n date.setSeconds(0, 0)\n var millisecondsPartOfTimezoneOffset = date.getTime() % MILLISECONDS_IN_MINUTE\n\n return baseTimezoneOffset * MILLISECONDS_IN_MINUTE + millisecondsPartOfTimezoneOffset\n}\n","import { createApp } from './app';\nconst connection = require('../platform/server/connection');\n\n// Main app\nconst app = createApp();\n\napp.events.on('sync', info => {\n connection.send('sync-event', info);\n});\n\nexport default app;\n","import { RuleError } from '../errors';\nimport * as dateFns from 'date-fns';\nimport {\n monthFromDate,\n yearFromDate,\n isBefore,\n isAfter,\n addDays,\n subDays,\n format as formatDate,\n parseDate\n} from '../../shared/months';\nimport { fastSetMerge } from '../../shared/util';\nimport { sortNumbers, getApproxNumberThreshold } from '../../shared/rules';\nimport { recurConfigToRSchedule } from '../../shared/schedules';\nimport { Schedule as RSchedule } from '../util/rschedule';\n\nfunction safeNumber(n) {\n return isNaN(n) ? null : n;\n}\n\nfunction safeParseInt(n) {\n return safeNumber(parseInt(n));\n}\n\nfunction assert(test, type, msg) {\n if (!test) {\n throw new RuleError(type, msg);\n }\n}\n\nexport function parseRecurDate(desc) {\n try {\n let rules = recurConfigToRSchedule(desc);\n\n return {\n type: 'recur',\n schedule: new RSchedule({ rrules: rules })\n };\n } catch (e) {\n throw new RuleError('parse-recur-date', e.message);\n }\n}\n\nexport function parseDateString(str) {\n if (typeof str !== 'string') {\n return null;\n } else if (str.length === 10) {\n // YYYY-MM-DD\n if (!dateFns.isValid(dateFns.parseISO(str))) {\n return null;\n }\n\n return { type: 'date', date: str };\n } else if (str.length === 7) {\n // YYYY-MM\n if (!dateFns.isValid(dateFns.parseISO(str + '-01'))) {\n return null;\n }\n\n return { type: 'month', date: str };\n } else if (str.length === 4) {\n // YYYY\n if (!dateFns.isValid(dateFns.parseISO(str + '-01-01'))) {\n return null;\n }\n\n return { type: 'year', date: str };\n }\n\n return null;\n}\n\nexport function parseBetweenAmount(between) {\n let { num1, num2 } = between;\n if (typeof num1 !== 'number' || typeof num2 !== 'number') {\n return null;\n }\n return { type: 'between', num1, num2 };\n}\n\nlet CONDITION_TYPES = {\n date: {\n ops: ['is', 'isapprox', 'gt', 'gte', 'lt', 'lte'],\n nullable: false,\n parse(op, value, fieldName) {\n let parsed =\n typeof value === 'string'\n ? parseDateString(value)\n : value.frequency != null\n ? parseRecurDate(value)\n : null;\n assert(\n parsed,\n 'date-format',\n `Invalid date format (field: ${fieldName})`\n );\n\n // Approximate only works with exact & recurring dates\n if (op === 'isapprox') {\n assert(\n parsed.type === 'date' || parsed.type === 'recur',\n 'date-format',\n `Invalid date value for \"isapprox\" (field: ${fieldName})`\n );\n }\n // These only work with exact dates\n else if (op === 'gt' || op === 'gte' || op === 'lt' || op === 'lte') {\n assert(\n parsed.type === 'date',\n 'date-format',\n `Invalid date value for \"${op}\" (field: ${fieldName})`\n );\n }\n\n return parsed;\n }\n },\n id: {\n ops: ['is', 'contains', 'oneOf'],\n nullable: true,\n parse(op, value, fieldName) {\n if (op === 'oneOf') {\n assert(\n Array.isArray(value),\n 'no-empty-array',\n `oneOf must have an array value (field: ${fieldName})`\n );\n return value;\n }\n return value;\n }\n },\n string: {\n ops: ['is', 'contains', 'oneOf'],\n nullable: false,\n parse(op, value, fieldName) {\n if (op === 'oneOf') {\n assert(\n Array.isArray(value),\n 'no-empty-array',\n `oneOf must have an array value (field: ${fieldName}): ${JSON.stringify(\n value\n )}`\n );\n return value.filter(Boolean).map(val => val.toLowerCase());\n }\n\n if (op === 'contains') {\n assert(\n typeof value === 'string' && value.length > 0,\n 'no-empty-string',\n `contains must have non-empty string (field: ${fieldName})`\n );\n }\n\n return value.toLowerCase();\n }\n },\n number: {\n ops: ['is', 'isapprox', 'isbetween', 'gt', 'gte', 'lt', 'lte'],\n nullable: false,\n parse(op, value, fieldName) {\n let parsed =\n typeof value === 'number'\n ? { type: 'literal', value }\n : parseBetweenAmount(value);\n\n assert(\n parsed != null,\n 'not-number',\n `Value must be a number or between amount: ${JSON.stringify(\n value\n )} (field: ${fieldName})`\n );\n\n if (op === 'isbetween') {\n assert(\n parsed.type === 'between',\n 'number-format',\n `Invalid between value for \"${op}\" (field: ${fieldName})`\n );\n } else {\n assert(\n parsed.type === 'literal',\n 'number-format',\n `Invalid number value for \"${op}\" (field: ${fieldName})`\n );\n }\n\n return parsed;\n }\n },\n boolean: {\n ops: ['is'],\n nullable: false,\n parse(op, value, fieldName) {\n assert(\n typeof value === 'boolean',\n 'not-boolean',\n `Value must be a boolean: ${value} (field: ${fieldName})`\n );\n\n return value;\n }\n }\n};\n\nexport class Condition {\n constructor(op, field, value, options, fieldTypes) {\n let typeName = fieldTypes.get(field);\n assert(typeName, 'internal', 'Invalid condition field: ' + field);\n\n let type = CONDITION_TYPES[typeName];\n\n // It's important to validate rules because a faulty rule might mess\n // up the user's transaction (and be very confusing)\n assert(\n type,\n 'internal',\n `Invalid condition type: ${typeName} (field: ${field})`\n );\n assert(\n type.ops.includes(op),\n 'internal',\n `Invalid condition operator: ${op} (type: ${typeName}, field: ${field})`\n );\n\n if (type.nullable !== true) {\n assert(value != null, 'no-null', `Field cannot be empty: ${field}`);\n }\n\n // For strings, an empty string is equal to null\n if (typeName === 'string' && type.nullable !== true) {\n assert(value !== '', 'no-null', `Field cannot be empty: ${field}`);\n }\n\n this.rawValue = value;\n this.unparsedValue = value;\n this.op = op;\n this.field = field;\n this.value = type.parse ? type.parse(op, value, field) : value;\n this.options = options;\n this.type = typeName;\n }\n\n eval(object) {\n let fieldValue = object[this.field];\n if (fieldValue === undefined) {\n return false;\n }\n\n if (typeof fieldValue === 'string') {\n fieldValue = fieldValue.toLowerCase();\n }\n\n let type = this.type;\n\n if (type === 'number' && this.options) {\n if (this.options.outflow) {\n if (fieldValue > 0) {\n return false;\n }\n\n fieldValue = -fieldValue;\n } else if (this.options.inflow) {\n if (fieldValue < 0) {\n return false;\n }\n }\n }\n\n let extractValue = v => (type === 'number' ? v.value : v);\n\n switch (this.op) {\n case 'isapprox':\n case 'is':\n if (type === 'date') {\n if (fieldValue == null) {\n return false;\n }\n\n if (this.value.type === 'recur') {\n let { schedule } = this.value;\n if (this.op === 'isapprox') {\n let fieldDate = parseDate(fieldValue);\n return schedule.occursBetween(\n dateFns.subDays(fieldDate, 2),\n dateFns.addDays(fieldDate, 2)\n );\n } else {\n return schedule.occursOn({ date: parseDate(fieldValue) });\n }\n } else {\n let { date } = this.value;\n\n if (this.op === 'isapprox') {\n let fullDate = parseDate(date);\n let high = addDays(fullDate, 2);\n let low = subDays(fullDate, 2);\n\n return fieldValue >= low && fieldValue <= high;\n } else {\n switch (this.value.type) {\n case 'date':\n return fieldValue === date;\n case 'month':\n return monthFromDate(fieldValue) === date;\n case 'year':\n return yearFromDate(fieldValue) === date;\n default:\n }\n }\n }\n } else if (type === 'number') {\n let number = this.value.value;\n if (this.op === 'isapprox') {\n let threshold = getApproxNumberThreshold(number);\n return (\n fieldValue >= number - threshold &&\n fieldValue <= number + threshold\n );\n }\n return fieldValue === number;\n }\n\n return fieldValue === this.value;\n case 'isbetween': {\n // The parsing logic already checks that the value is of the\n // right type (only numbers with high and low)\n let [low, high] = sortNumbers(this.value.num1, this.value.num2);\n return fieldValue >= low && fieldValue <= high;\n }\n case 'contains':\n if (fieldValue === null) {\n return false;\n }\n return fieldValue.indexOf(this.value) !== -1;\n case 'oneOf':\n if (fieldValue === null) {\n return false;\n }\n return this.value.indexOf(fieldValue) !== -1;\n case 'gt':\n if (fieldValue === null) {\n return false;\n } else if (type === 'date') {\n return isAfter(fieldValue, this.value.date);\n }\n\n return fieldValue > extractValue(this.value);\n case 'gte':\n if (fieldValue === null) {\n return false;\n } else if (type === 'date') {\n return (\n fieldValue === this.value.date ||\n isAfter(fieldValue, this.value.date)\n );\n }\n\n return fieldValue >= extractValue(this.value);\n case 'lt':\n if (fieldValue === null) {\n return false;\n } else if (type === 'date') {\n return isBefore(fieldValue, this.value.date);\n }\n return fieldValue < extractValue(this.value);\n case 'lte':\n if (fieldValue === null) {\n return false;\n } else if (type === 'date') {\n return (\n fieldValue === this.value.date ||\n isBefore(fieldValue, this.value.date)\n );\n }\n return fieldValue <= extractValue(this.value);\n default:\n }\n\n return false;\n }\n\n getValue() {\n return this.value;\n }\n\n serialize() {\n return {\n op: this.op,\n field: this.field,\n value: this.unparsedValue,\n type: this.type,\n ...(this.options ? { options: this.options } : null)\n };\n }\n}\n\nlet ACTION_OPS = ['set', 'link-schedule'];\n\nexport class Action {\n constructor(op, field, value, options, fieldTypes) {\n assert(\n ACTION_OPS.includes(op),\n 'internal',\n `Invalid action operation: ${op}`\n );\n\n if (op === 'set') {\n let typeName = fieldTypes.get(field);\n assert(typeName, 'internal', `Invalid field for action: ${field}`);\n this.field = field;\n this.type = typeName;\n } else if (op === 'link-schedule') {\n this.field = null;\n this.type = 'id';\n }\n\n this.op = op;\n this.rawValue = value;\n this.value = value;\n this.options = options;\n }\n\n exec(object) {\n switch (this.op) {\n case 'set':\n object[this.field] = this.value;\n break;\n case 'link-schedule':\n object.schedule = this.value;\n break;\n default:\n }\n }\n\n serialize() {\n return {\n op: this.op,\n field: this.field,\n value: this.value,\n type: this.type,\n ...(this.options ? { options: this.options } : null)\n };\n }\n}\n\nexport class Rule {\n constructor({ id, stage, conditions, actions, fieldTypes }) {\n this.id = id;\n this.stage = stage;\n this.conditions = conditions.map(\n c => new Condition(c.op, c.field, c.value, c.options, fieldTypes)\n );\n this.actions = actions.map(\n a => new Action(a.op, a.field, a.value, a.options, fieldTypes)\n );\n }\n\n evalConditions(object) {\n if (this.conditions.length === 0) {\n return false;\n }\n\n return this.conditions.every(condition => {\n return condition.eval(object);\n });\n }\n\n execActions(object) {\n let changes = {};\n this.actions.forEach(action => action.exec(changes));\n return changes;\n }\n\n exec(object) {\n if (this.evalConditions(object)) {\n return this.execActions(object);\n }\n return null;\n }\n\n // Apply is similar to exec but applies the changes for you\n apply(object) {\n let changes = this.exec(object);\n return Object.assign({}, object, changes);\n }\n\n getId() {\n return this.id;\n }\n\n serialize() {\n return {\n id: this.id,\n stage: this.stage,\n conditions: this.conditions.map(c => c.serialize()),\n actions: this.actions.map(a => a.serialize())\n };\n }\n}\n\nexport class RuleIndexer {\n constructor({ field, method }) {\n this.field = field;\n this.method = method;\n this.rules = new Map();\n }\n\n getIndex(key) {\n if (!this.rules.has(key)) {\n this.rules.set(key, new Set());\n }\n return this.rules.get(key);\n }\n\n getIndexForValue(value) {\n return this.getIndex(this.getKey(value) || '*');\n }\n\n getKey(value) {\n if (typeof value === 'string' && value !== '') {\n if (this.method === 'firstchar') {\n return value[0].toLowerCase();\n }\n return value.toLowerCase();\n }\n return null;\n }\n\n getIndexes(rule) {\n let cond = rule.conditions.find(cond => cond.field === this.field);\n let indexes = [];\n\n if (cond && (cond.op === 'oneOf' || cond.op === 'is')) {\n if (cond.op === 'oneOf') {\n cond.value.forEach(val => indexes.push(this.getIndexForValue(val)));\n } else {\n indexes.push(this.getIndexForValue(cond.value));\n }\n } else {\n indexes.push(this.getIndex('*'));\n }\n\n return indexes;\n }\n\n index(rule) {\n let indexes = this.getIndexes(rule);\n indexes.forEach(index => {\n index.add(rule);\n });\n }\n\n remove(rule) {\n let indexes = this.getIndexes(rule);\n indexes.forEach(index => {\n index.delete(rule);\n });\n }\n\n getApplicableRules(object) {\n let indexedRules;\n if (this.field in object) {\n let key = this.getKey(object[this.field]);\n if (key) {\n indexedRules = this.rules.get(key);\n }\n }\n\n return fastSetMerge(\n indexedRules || new Set(),\n this.rules.get('*') || new Set()\n );\n }\n}\n\nconst OP_SCORES = {\n is: 10,\n oneOf: 9,\n isapprox: 5,\n isbetween: 5,\n gt: 1,\n gte: 1,\n lt: 1,\n lte: 1,\n contains: 0\n};\n\nfunction computeScore(rule) {\n let initialScore = rule.conditions.reduce((score, condition) => {\n if (OP_SCORES[condition.op] == null) {\n console.log(`Found invalid operation while ranking: ${condition.op}`);\n return 0;\n }\n\n return score + OP_SCORES[condition.op];\n }, 0);\n\n if (\n rule.conditions.every(\n cond => cond.op === 'is' || cond.op === 'isapprox' || cond.op === 'oneOf'\n )\n ) {\n return initialScore * 2;\n }\n return initialScore;\n}\n\nfunction _rankRules(rules) {\n let scores = new Map();\n rules.forEach(rule => {\n scores.set(rule, computeScore(rule));\n });\n\n // No matter the order of rules, this must always return exactly the same\n // order. That's why rules have ids: if two rules have the same score, it\n // sorts by id\n return [...rules].sort((r1, r2) => {\n let score1 = scores.get(r1);\n let score2 = scores.get(r2);\n if (score1 < score2) {\n return -1;\n } else if (score1 > score2) {\n return 1;\n } else {\n let id1 = r1.getId();\n let id2 = r2.getId();\n return id1 < id2 ? -1 : id1 > id2 ? 1 : 0;\n }\n });\n}\n\nexport function rankRules(rules) {\n let pre = [];\n let normal = [];\n let post = [];\n\n for (let rule of rules) {\n switch (rule.stage) {\n case 'pre':\n pre.push(rule);\n break;\n case 'post':\n post.push(rule);\n break;\n default:\n normal.push(rule);\n }\n }\n\n pre = _rankRules(pre);\n normal = _rankRules(normal);\n post = _rankRules(post);\n\n return pre.concat(normal).concat(post);\n}\n\nexport function migrateIds(rule, mappings) {\n // Go through the in-memory rules and patch up ids that have been\n // \"migrated\" to other ids. This is a little tricky, but a lot\n // easier than trying to keep an up-to-date mapping in the db. This\n // is necessary because ids can be transparently mapped as items are\n // merged/deleted in the system.\n //\n // It's very important here that we look at `rawValue` specifically,\n // and only apply the patches to the other `value` fields. We always\n // need to keep the original id around because undo can walk\n // backwards, and we need to be able to consistently apply a\n // \"projection\" of these mapped values. For example: if we have ids\n // [1, 2] and applying mappings transforms it to [2, 2], if `1` gets\n // mapped to something else there's no way to no to map *only* the\n // first id back to make [1, 2]. Keeping the original value around\n // solves this.\n for (let ci = 0; ci < rule.conditions.length; ci++) {\n let cond = rule.conditions[ci];\n if (cond.type === 'id') {\n switch (cond.op) {\n case 'is':\n cond.value = mappings.get(cond.rawValue) || cond.rawValue;\n cond.unparsedValue = cond.value;\n break;\n case 'oneOf':\n cond.value = cond.rawValue.map(v => mappings.get(v) || v);\n cond.unparsedValue = [...cond.value];\n break;\n default:\n }\n }\n }\n\n for (let ai = 0; ai < rule.actions.length; ai++) {\n let action = rule.actions[ai];\n if (action.type === 'id') {\n if (action.op === 'set') {\n action.value = mappings.get(action.rawValue) || action.rawValue;\n }\n }\n }\n}\n\n// This finds all the rules that reference the `id`\nexport function iterateIds(rules, fieldName, func) {\n let counts = {};\n let i;\n\n ruleiter: for (i = 0; i < rules.length; i++) {\n let rule = rules[i];\n for (let ci = 0; ci < rule.conditions.length; ci++) {\n let cond = rule.conditions[ci];\n if (cond.type === 'id' && cond.field === fieldName) {\n switch (cond.op) {\n case 'is':\n if (func(rule, cond.value)) {\n continue ruleiter;\n }\n break;\n case 'oneOf':\n for (let vi = 0; vi < cond.value.length; vi++) {\n if (func(rule, cond.value[vi])) {\n continue ruleiter;\n }\n }\n break;\n default:\n }\n }\n }\n\n for (let ai = 0; ai < rule.actions.length; ai++) {\n let action = rule.actions[ai];\n if (action.type === 'id' && action.field === fieldName) {\n // Currently `set` is the only op, but if we add more this\n // will need to be extended\n if (action.op === 'set') {\n if (func(rule, action.value)) {\n break;\n }\n }\n }\n }\n }\n}\n","import Platform from './platform';\nconst { PostError, HTTPError } = require('./errors');\nconst { fetch } = require('../platform/server/fetch');\n\nfunction throwIfNot200(res, text) {\n if (res.status !== 200) {\n if (res.status === 500) {\n throw new PostError(res.status === 500 ? 'internal' : text);\n }\n\n let contentType = res.headers.get('Content-Type');\n if (contentType.toLowerCase().indexOf('application/json') !== -1) {\n let json = JSON.parse(text);\n throw new PostError(json.reason);\n }\n throw new PostError(text);\n }\n}\n\nexport async function post(url, data) {\n let text;\n let res;\n\n let s = new Error().stack;\n\n try {\n res = await fetch(url, {\n method: 'POST',\n body: JSON.stringify(data),\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n text = await res.text();\n } catch (err) {\n throw new PostError('network-failure');\n }\n\n throwIfNot200(res, text);\n\n try {\n res = JSON.parse(text);\n } catch (err) {\n // Something seriously went wrong. TODO handle errors\n throw new PostError('parse-json', { meta: text });\n }\n\n if (res.status !== 'ok') {\n console.log(\n 'API call failed: ' +\n url +\n '\\nData: ' +\n JSON.stringify(data, null, 2) +\n '\\nResponse: ' +\n JSON.stringify(res, null, 2)\n );\n\n throw new PostError(res.description || res.reason || 'unknown');\n }\n\n return res.data;\n}\n\nexport async function postBinary(url, data, headers) {\n let res;\n try {\n res = await fetch(url, {\n method: 'POST',\n body: Platform.isWeb ? data : Buffer.from(data),\n headers: {\n 'Content-Length': data.length,\n 'Content-Type': 'application/actual-sync',\n ...headers\n }\n });\n } catch (err) {\n throw new PostError('network-failure');\n }\n\n let buffer;\n if (res.arrayBuffer) {\n buffer = Buffer.from(await res.arrayBuffer());\n } else {\n buffer = await res.buffer();\n }\n\n throwIfNot200(res, buffer.toString());\n\n return buffer;\n}\n\nexport function get(url, opts) {\n return fetch(url, opts).then(res => res.text());\n}\n","import * as internals from './encryption-internals';\nlet uuid = require('../platform/uuid/index.electron.js');\n\n// A map of all possible master encryption keys to use, keyed by\n// unique id\nlet keys = {};\n\nclass Key {\n constructor({ id, value }) {\n this.id = id || uuid.v4Sync();\n }\n\n async createFromPassword({ password, salt }) {\n this.value = await internals.createKey({ secret: password, salt });\n }\n\n async createFromBase64(str) {\n this.value = await internals.importKey(str);\n }\n\n getId() {\n return this.id;\n }\n\n getValue() {\n return this.value;\n }\n\n serialize() {\n return {\n id: this.id,\n base64: this.value.base64\n };\n }\n}\n\nfunction getKey(keyId) {\n if (keyId == null || keys[keyId] == null) {\n throw new Error('missing-key');\n }\n return keys[keyId];\n}\n\nfunction hasKey(keyId) {\n return keyId in keys;\n}\n\nfunction encrypt(value, keyId) {\n return internals.encrypt(getKey(keyId), value);\n}\n\nfunction decrypt(encrypted, meta) {\n return internals.decrypt(getKey(meta.keyId), encrypted, meta);\n}\n\nfunction randomBytes(n) {\n return internals.randomBytes(n);\n}\n\nasync function loadKey(key) {\n let keyInstance;\n if (!(key instanceof Key)) {\n keyInstance = new Key({ id: key.id });\n await keyInstance.createFromBase64(key.base64);\n } else {\n keyInstance = key;\n }\n\n keys[keyInstance.getId()] = keyInstance;\n}\n\nfunction unloadKey(key) {\n delete keys[key.getId()];\n}\n\nfunction unloadAllKeys() {\n keys = {};\n}\n\nasync function createKey({ id, password, salt }) {\n let key = new Key({ id });\n await key.createFromPassword({ password, salt });\n return key;\n}\n\nexport default {\n decrypt,\n encrypt,\n randomBytes,\n createKey,\n loadKey,\n getKey,\n hasKey,\n unloadKey,\n unloadAllKeys\n};\n","import * as monthUtils from '../../shared/months';\nimport * as db from '../db';\nimport { batchMessages } from '../sync';\nimport { groupBySingle } from '../../shared/util';\nimport * as prefs from '../prefs';\nimport * as sheet from '../sheet';\n\nasync function getSheetValue(sheetName, cell) {\n const node = await sheet.getCell(sheetName, cell);\n return typeof node.value === 'number' ? node.value : 0;\n}\n\n// We want to only allow the positive movement of money back and\n// forth. buffered should never be allowed to go into the negative,\n// and you shouldn't be allowed to pull non-existant money from\n// leftover.\nfunction calcBufferedAmount(toBudget, buffered, amount) {\n amount = Math.min(Math.max(amount, -buffered), Math.max(toBudget, 0));\n return buffered + amount;\n}\n\nfunction getBudgetTable() {\n let { budgetType } = prefs.getPrefs() || {};\n return budgetType === 'report' ? 'reflect_budgets' : 'zero_budgets';\n}\n\nfunction isReflectBudget() {\n let { budgetType } = prefs.getPrefs();\n return budgetType === 'report';\n}\n\nfunction isZeroBudget() {\n let { budgetType } = prefs.getPrefs();\n return budgetType === 'rollover';\n}\n\nfunction dbMonth(month) {\n return parseInt(month.replace('-', ''));\n}\n\nfunction getBudgetData(table, month) {\n return db.all(\n `\n SELECT b.*, c.is_income FROM v_categories c\n LEFT JOIN ${table} b ON b.category = c.id\n WHERE c.tombstone = 0 AND b.month = ?\n `,\n [month]\n );\n}\n\nfunction getAllMonths(startMonth) {\n let { createdMonths } = sheet.get().meta();\n let latest = null;\n for (let month of createdMonths) {\n if (latest == null || month > latest) {\n latest = month;\n }\n }\n return monthUtils.rangeInclusive(startMonth, latest);\n}\n\n// TODO: Valid month format in all the functions below\n\nexport function getBudget({ category, month }) {\n let table = getBudgetTable();\n let existing = db.firstSync(\n `SELECT * FROM ${table} WHERE month = ? AND category = ?`,\n [dbMonth(month), category]\n );\n return existing ? existing.amount || 0 : 0;\n}\n\nexport function setBudget({ category, month, amount }) {\n if (typeof amount !== 'number') {\n amount = 0;\n }\n const table = getBudgetTable();\n\n let existing = db.firstSync(\n `SELECT id FROM ${table} WHERE month = ? AND category = ?`,\n [dbMonth(month), category]\n );\n if (existing) {\n return db.update(table, { id: existing.id, amount });\n }\n return db.insert(table, {\n id: `${dbMonth(month)}-${category}`,\n month: dbMonth(month),\n category,\n amount\n });\n}\n\nexport function setBuffer(month, amount) {\n let existing = db.firstSync(\n `SELECT id FROM zero_budget_months WHERE id = ?`,\n [month]\n );\n if (existing) {\n return db.update('zero_budget_months', {\n id: existing.id,\n buffered: amount\n });\n }\n return db.insert('zero_budget_months', { id: month, buffered: amount });\n}\n\nfunction setCarryover(table, category, month, flag) {\n let existing = db.firstSync(\n `SELECT id FROM ${table} WHERE month = ? AND category = ?`,\n [month, category]\n );\n if (existing) {\n return db.update(table, { id: existing.id, carryover: flag ? 1 : 0 });\n }\n return db.insert(table, {\n id: `${month}-${category}`,\n month,\n category,\n carryover: flag ? 1 : 0\n });\n}\n\n// Actions\n\nexport async function copyPreviousMonth({ month }) {\n let prevMonth = dbMonth(monthUtils.prevMonth(month));\n let table = getBudgetTable();\n let budgetData = await getBudgetData(table, prevMonth);\n\n await batchMessages(() => {\n budgetData.forEach(prevBudget => {\n if (prevBudget.is_income === 1 && !isReflectBudget()) {\n return;\n }\n setBudget({\n category: prevBudget.category,\n month,\n amount: prevBudget.amount\n });\n });\n });\n}\n\nexport async function setZero({ month }) {\n let categories = await db.all(\n 'SELECT * FROM v_categories WHERE tombstone = 0'\n );\n\n await batchMessages(() => {\n categories.forEach(cat => {\n if (cat.is_income === 1 && !isReflectBudget()) {\n return;\n }\n setBudget({ category: cat.id, month, amount: 0 });\n });\n });\n}\n\nexport async function set3MonthAvg({ month }) {\n let categories = await db.all(\n 'SELECT * FROM v_categories WHERE tombstone = 0'\n );\n\n let prevMonth1 = monthUtils.prevMonth(month);\n let prevMonth2 = monthUtils.prevMonth(prevMonth1);\n let prevMonth3 = monthUtils.prevMonth(prevMonth2);\n\n await batchMessages(async () => {\n for (let cat of categories) {\n if (cat.is_income === 1 && !isReflectBudget()) {\n continue;\n }\n\n let spent1 = await getSheetValue(\n monthUtils.sheetForMonth(prevMonth1),\n 'sum-amount-' + cat.id\n );\n let spent2 = await getSheetValue(\n monthUtils.sheetForMonth(prevMonth2),\n 'sum-amount-' + cat.id\n );\n let spent3 = await getSheetValue(\n monthUtils.sheetForMonth(prevMonth3),\n 'sum-amount-' + cat.id\n );\n\n const avg = ((spent1 + spent2 + spent3) / 3) | 0;\n setBudget({ category: cat.id, month, amount: -avg });\n }\n });\n}\n\nexport async function setAllFuture({ startMonth }) {\n if (!isReflectBudget()) {\n throw new Error('setAllFuture only applies to report budget type');\n }\n let table = getBudgetTable();\n let budgetData = await getBudgetData(table, dbMonth(startMonth));\n let months = getAllMonths(monthUtils.addMonths(startMonth, 1));\n\n batchMessages(() => {\n for (let month of months) {\n budgetData.forEach(budget => {\n if (budget.is_income === 1 && !isReflectBudget()) {\n return;\n }\n setBudget({ category: budget.category, month, amount: budget.amount });\n });\n }\n });\n}\n\nexport async function holdForNextMonth({ month, amount }) {\n let row = await db.first(\n 'SELECT buffered FROM zero_budget_months WHERE id = ?',\n [month]\n );\n\n let sheetName = monthUtils.sheetForMonth(month);\n let toBudget = await getSheetValue(sheetName, 'to-budget');\n\n if (toBudget > 0) {\n let bufferedAmount = calcBufferedAmount(\n toBudget,\n (row && row.buffered) || 0,\n amount\n );\n\n await setBuffer(month, bufferedAmount);\n return true;\n }\n return false;\n}\n\nexport async function holdForFutureMonths({ startMonth, amount }) {\n let months = getAllMonths(startMonth);\n\n await batchMessages(async () => {\n for (let month of months) {\n if (!(await holdForNextMonth({ month, amount }))) {\n break;\n }\n }\n });\n}\n\nexport async function resetHold({ month }) {\n await setBuffer(month, 0);\n}\n\nexport async function coverOverspending({ month, to, from }) {\n let sheetName = monthUtils.sheetForMonth(month);\n let toBudgeted = await getSheetValue(sheetName, 'budget-' + to);\n let leftover = await getSheetValue(sheetName, 'leftover-' + to);\n let leftoverFrom = await getSheetValue(\n sheetName,\n from === 'to-be-budgeted' ? 'to-budget' : 'leftover-' + from\n );\n\n if (leftover >= 0 || leftoverFrom <= 0) {\n return;\n }\n\n let amountCovered = Math.min(-leftover, leftoverFrom);\n\n // If we are covering it from the to be budgeted amount, ignore this\n if (from !== 'to-be-budgeted') {\n const fromBudgeted = await getSheetValue(sheetName, 'budget-' + from);\n await setBudget({\n category: from,\n month,\n amount: fromBudgeted - amountCovered\n });\n }\n\n await setBudget({ category: to, month, amount: toBudgeted + amountCovered });\n}\n\nexport async function transferAvailable({ month, amount, category }) {\n let sheetName = monthUtils.sheetForMonth(month);\n let leftover = await getSheetValue(sheetName, 'to-budget');\n amount = Math.max(Math.min(amount, leftover), 0);\n\n let budgeted = await getSheetValue(sheetName, 'budget-' + category);\n await setBudget({ category, month, amount: budgeted + amount });\n}\n\nexport async function transferCategory({ month, amount, from, to }) {\n const sheetName = monthUtils.sheetForMonth(month);\n const fromBudgeted = await getSheetValue(sheetName, 'budget-' + from);\n\n await setBudget({ category: from, month, amount: fromBudgeted - amount });\n\n // If we are simply moving it back into available cash to budget,\n // don't do anything else\n if (to !== 'to-be-budgeted') {\n const toBudgeted = await getSheetValue(sheetName, 'budget-' + to);\n await setBudget({ category: to, month, amount: toBudgeted + amount });\n }\n}\n\nexport async function setCategoryCarryover({ startMonth, category, flag }) {\n let table = getBudgetTable();\n let months = getAllMonths(startMonth);\n\n await batchMessages(() => {\n for (let month of months) {\n setCarryover(table, category, dbMonth(month), flag);\n }\n });\n}\n","function f(type, opts) {\n return { type, ...opts };\n}\n\n// This is the table schema!\n//\n// The schema itself is the public API for querying and updating data.\n// The schema config provides a lot of control over how queries are\n// constructed other metadata used by the executors. The goal is to\n// provide a simple interface to the app, but allow the backend to\n// highly optimize how queries are run.\n//\n// A few notes:\n//\n// * `transactions` is a special table and is has a highly customized\n// executor (see `executors.js`) for performace. It should mostly be\n// transparent to you, but it's worth reading the comments in there if\n// requirements change, especially regarding split transactions.\n//\n// * You should rarely change the schema and only add to it, but it is\n// relatively safe to change if needed. The only problem is changing a\n// public API, but that could be mitigated with an option in schema\n// config to map field name for backwards compatibility.\n//\n// * It's important that the table names here in the schema map to the\n// real tables in sqlite that are updated. Otherwise subscriptions\n// might not work because the dependencies are wrong. If needed in the\n// future, we can provide another option in the schema config to map a\n// table name the internal table that is updated.\n\nexport const schema = {\n transactions: {\n id: f('id'),\n is_parent: f('boolean'),\n is_child: f('boolean'),\n parent_id: f('id'),\n account: f('id', { ref: 'accounts', required: true }),\n category: f('id', { ref: 'categories' }),\n amount: f('integer', { default: 0, required: true }),\n payee: f('id', { ref: 'payees' }),\n notes: f('string'),\n date: f('date', { required: true }),\n imported_id: f('string'),\n error: f('json'),\n imported_payee: f('string'),\n starting_balance_flag: f('boolean'),\n transfer_id: f('id'),\n sort_order: f('float', { default: () => Date.now() }),\n cleared: f('boolean', { default: true }),\n tombstone: f('boolean'),\n schedule: f('id', { ref: 'schedules' })\n // subtransactions is a special field added if the table has the\n // `splits: grouped` option\n },\n payees: {\n id: f('id'),\n name: f('string', { required: true }),\n transfer_acct: f('id', { ref: 'accounts' }),\n tombstone: f('boolean')\n },\n accounts: {\n id: f('id'),\n name: f('string', { required: true }),\n // TODO: enum\n type: f('string'),\n offbudget: f('boolean'),\n closed: f('boolean'),\n sort_order: f('float'),\n tombstone: f('boolean')\n },\n categories: {\n id: f('id'),\n name: f('string'),\n is_income: f('boolean'),\n group: f('id', { ref: 'category_groups' }),\n sort_order: f('float'),\n tombstone: f('boolean')\n },\n category_groups: {\n id: f('id'),\n name: f('string'),\n is_income: f('boolean'),\n sort_order: f('float'),\n tombstone: f('boolean')\n },\n schedules: {\n id: f('id'),\n rule: f('id', { ref: 'rules', required: true }),\n next_date: f('date'),\n completed: f('boolean'),\n posts_transaction: f('boolean'),\n tombstone: f('boolean'),\n\n // These are special fields that are actually pulled from the\n // underlying rule\n _payee: f('id', { ref: 'payees' }),\n _account: f('id', { ref: 'accounts' }),\n _amount: f('json/fallback'),\n _amountOp: f('string'),\n _date: f('json/fallback'),\n _conditions: f('json'),\n _actions: f('json')\n },\n rules: {\n id: f('id'),\n stage: f('string'),\n conditions: f('json'),\n actions: f('json'),\n tombstone: f('boolean')\n },\n notes: {\n id: f('id'),\n note: f('string')\n }\n};\n\nexport const schemaConfig = {\n // Note: these views *must* represent the underlying table that we\n // are mapping here. The compiler makes optimizations with this\n // assumption\n tableViews(name, { isJoin, withDead, tableOptions = {} }) {\n switch (name) {\n case 'transactions': {\n // If joining, we always only show alive transactions. There's\n // no way to configure join behavior yet\n if (isJoin) {\n return 'v_transactions_internal_alive';\n }\n\n let splitType = tableOptions.splits || 'inline';\n // Use the view to exclude dead transactions if using `inline` or `none`\n if (!withDead && (splitType === 'inline' || splitType === 'none')) {\n return 'v_transactions_internal_alive';\n }\n\n // Otherwse we disregard the `withDead` option here and handle\n // that in the executors to improve performance\n return 'v_transactions_internal';\n }\n\n case 'schedules':\n return 'v_schedules';\n\n case 'categories':\n return 'v_categories';\n\n case 'payees':\n return 'v_payees';\n\n default:\n }\n return name;\n },\n\n customizeQuery(queryState) {\n let { table: tableName, tableOptions = {} } = queryState;\n\n function orderBy(orders) {\n // If order was specified, always add id as the last sort to make\n // it deterministic\n if (orders.length > 0) {\n return orders.concat(['id']);\n }\n\n // Otherwise, these are the default orders for each table\n switch (tableName) {\n case 'transactions':\n return [\n { date: 'desc' },\n 'starting_balance_flag',\n { sort_order: 'desc' },\n 'id'\n ];\n case 'payees':\n return [\n { $condition: { transfer_acct: null }, $dir: 'desc' },\n { $nocase: '$name' }\n ];\n case 'accounts':\n return ['sort_order', 'name'];\n case 'schedules':\n return [{ $condition: { completed: true } }, 'next_date'];\n default:\n }\n\n return [];\n }\n\n return {\n ...queryState,\n orderExpressions: orderBy(queryState.orderExpressions)\n };\n },\n\n views: {\n payees: {\n v_payees: internalFields => {\n let fields = internalFields({\n name: 'COALESCE(__accounts.name, _.name)'\n });\n\n return `\n SELECT ${fields} FROM payees _\n LEFT JOIN accounts __accounts ON (_.transfer_acct = __accounts.id AND __accounts.tombstone = 0)\n -- We never want to show transfer payees that are pointing to deleted accounts.\n -- Either this isn't a transfer payee, if the account exists\n WHERE _.transfer_acct IS NULL OR __accounts.id IS NOT NULL\n `;\n }\n },\n\n categories: {\n fields: {\n group: 'cat_group'\n },\n\n v_categories: internalFields => {\n let fields = internalFields({ group: 'cat_group' });\n return `SELECT ${fields} FROM categories _`;\n }\n },\n\n schedules: {\n v_schedules: internalFields => {\n let fields = internalFields({\n next_date: `\n CASE\n WHEN _nd.local_next_date_ts = _nd.base_next_date_ts THEN _nd.local_next_date\n ELSE _nd.base_next_date\n END\n `,\n _payee: `pm.targetId`,\n _account: `json_extract(_rules.conditions, _paths.account || '.value')`,\n _amount: `json_extract(_rules.conditions, _paths.amount || '.value')`,\n _amountOp: `json_extract(_rules.conditions, _paths.amount || '.op')`,\n _date: `json_extract(_rules.conditions, _paths.date || '.value')`,\n _conditions: '_rules.conditions',\n _actions: '_rules.actions'\n });\n\n return `\n SELECT ${fields} FROM schedules _\n LEFT JOIN schedules_next_date _nd ON _nd.schedule_id = _.id\n LEFT JOIN schedules_json_paths _paths ON _paths.schedule_id = _.id\n LEFT JOIN rules _rules ON _rules.id = _.rule\n LEFT JOIN payee_mapping pm ON pm.id = json_extract(_rules.conditions, _paths.payee || '.value')\n `;\n }\n },\n\n transactions: {\n fields: {\n is_parent: 'isParent',\n is_child: 'isChild',\n account: 'acct',\n imported_id: 'financial_id',\n imported_payee: 'imported_description',\n transfer_id: 'transferred_id',\n payee: 'description'\n },\n\n v_transactions_internal: internalFields => {\n // Override some fields to make custom stuff\n let fields = internalFields({\n payee: 'pm.targetId',\n category: `CASE WHEN _.isParent = 1 THEN NULL ELSE cm.transferId END`,\n amount: `IFNULL(_.amount, 0)`,\n parent_id: 'CASE WHEN _.isChild = 0 THEN NULL ELSE _.parent_id END'\n });\n\n return `\n SELECT ${fields} FROM transactions _\n LEFT JOIN category_mapping cm ON cm.id = _.category\n LEFT JOIN payee_mapping pm ON pm.id = _.description\n WHERE\n _.date IS NOT NULL AND\n _.acct IS NOT NULL AND\n (_.isChild = 0 OR _.parent_id IS NOT NULL)\n `;\n },\n\n // We join on t2 to only include valid child transactions. We\n // want to only include ones with valid parents, which is when\n // an alive parent transaction exists\n v_transactions_internal_alive: `\n SELECT _.* FROM v_transactions_internal _\n LEFT JOIN transactions t2 ON (_.is_child = 1 AND t2.id = _.parent_id)\n WHERE IFNULL(_.tombstone, 0) = 0 AND (_.is_child = 0 OR t2.tombstone = 0)\n `,\n\n v_transactions: (_, publicFields) => {\n let fields = publicFields({\n payee: 'p.id',\n category: 'c.id',\n account: 'a.id'\n });\n\n // This adds an order, and also validates any id references by\n // selecting the ids through a join which return null if they\n // are dead\n return `\n SELECT ${fields} FROM v_transactions_internal_alive _\n LEFT JOIN payees p ON (p.id = _.payee AND p.tombstone = 0)\n LEFT JOIN categories c ON (c.id = _.category AND c.tombstone = 0)\n LEFT JOIN accounts a ON (a.id = _.account AND a.tombstone = 0)\n ORDER BY _.date desc, _.starting_balance_flag, _.sort_order desc, _.id;\n `;\n }\n }\n }\n};\n","import lightFormatters from '../lightFormatters/index.js'\nimport getUTCDayOfYear from '../../../_lib/getUTCDayOfYear/index.js'\nimport getUTCISOWeek from '../../../_lib/getUTCISOWeek/index.js'\nimport getUTCISOWeekYear from '../../../_lib/getUTCISOWeekYear/index.js'\nimport getUTCWeek from '../../../_lib/getUTCWeek/index.js'\nimport getUTCWeekYear from '../../../_lib/getUTCWeekYear/index.js'\nimport addLeadingZeros from '../../addLeadingZeros/index.js'\n\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n}\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function(date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, { width: 'abbreviated' })\n // A, B\n case 'GGGGG':\n return localize.era(era, { width: 'narrow' })\n // Anno Domini, Before Christ\n case 'GGGG':\n default:\n return localize.era(era, { width: 'wide' })\n }\n },\n\n // Year\n y: function(date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear()\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var year = signedYear > 0 ? signedYear : 1 - signedYear\n return localize.ordinalNumber(year, { unit: 'year' })\n }\n\n return lightFormatters.y(date, token)\n },\n\n // Local week-numbering year\n Y: function(date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options)\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear\n\n // Two digit year\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100\n return addLeadingZeros(twoDigitYear, 2)\n }\n\n // Ordinal number\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, { unit: 'year' })\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length)\n },\n\n // ISO week-numbering year\n R: function(date, token) {\n var isoWeekYear = getUTCISOWeekYear(date)\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length)\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function(date, token) {\n var year = date.getUTCFullYear()\n return addLeadingZeros(year, token.length)\n },\n\n // Quarter\n Q: function(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3)\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter)\n // 01, 02, 03, 04\n case 'QQ':\n return addLeadingZeros(quarter, 2)\n // 1st, 2nd, 3rd, 4th\n case 'Qo':\n return localize.ordinalNumber(quarter, { unit: 'quarter' })\n // Q1, Q2, Q3, Q4\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n })\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n })\n // 1st quarter, 2nd quarter, ...\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n })\n }\n },\n\n // Stand-alone quarter\n q: function(date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3)\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter)\n // 01, 02, 03, 04\n case 'qq':\n return addLeadingZeros(quarter, 2)\n // 1st, 2nd, 3rd, 4th\n case 'qo':\n return localize.ordinalNumber(quarter, { unit: 'quarter' })\n // Q1, Q2, Q3, Q4\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n })\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n })\n // 1st quarter, 2nd quarter, ...\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n })\n }\n },\n\n // Month\n M: function(date, token, localize) {\n var month = date.getUTCMonth()\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token)\n // 1st, 2nd, ..., 12th\n case 'Mo':\n return localize.ordinalNumber(month + 1, { unit: 'month' })\n // Jan, Feb, ..., Dec\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n })\n // J, F, ..., D\n case 'MMMMM':\n return localize.month(month, { width: 'narrow', context: 'formatting' })\n // January, February, ..., December\n case 'MMMM':\n default:\n return localize.month(month, { width: 'wide', context: 'formatting' })\n }\n },\n\n // Stand-alone month\n L: function(date, token, localize) {\n var month = date.getUTCMonth()\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1)\n // 01, 02, ..., 12\n case 'LL':\n return addLeadingZeros(month + 1, 2)\n // 1st, 2nd, ..., 12th\n case 'Lo':\n return localize.ordinalNumber(month + 1, { unit: 'month' })\n // Jan, Feb, ..., Dec\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n })\n // J, F, ..., D\n case 'LLLLL':\n return localize.month(month, { width: 'narrow', context: 'standalone' })\n // January, February, ..., December\n case 'LLLL':\n default:\n return localize.month(month, { width: 'wide', context: 'standalone' })\n }\n },\n\n // Local week of year\n w: function(date, token, localize, options) {\n var week = getUTCWeek(date, options)\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, { unit: 'week' })\n }\n\n return addLeadingZeros(week, token.length)\n },\n\n // ISO week of year\n I: function(date, token, localize) {\n var isoWeek = getUTCISOWeek(date)\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, { unit: 'week' })\n }\n\n return addLeadingZeros(isoWeek, token.length)\n },\n\n // Day of the month\n d: function(date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), { unit: 'date' })\n }\n\n return lightFormatters.d(date, token)\n },\n\n // Day of year\n D: function(date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date)\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, { unit: 'dayOfYear' })\n }\n\n return addLeadingZeros(dayOfYear, token.length)\n },\n\n // Day of week\n E: function(date, token, localize) {\n var dayOfWeek = date.getUTCDay()\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n })\n // T\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n })\n // Tu\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n })\n // Tuesday\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n }\n },\n\n // Local day of week\n e: function(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay()\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek)\n // Padded numerical value\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2)\n // 1st, 2nd, ..., 7th\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, { unit: 'day' })\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n })\n // T\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n })\n // Tu\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n })\n // Tuesday\n case 'eeee':\n default:\n return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n }\n },\n\n // Stand-alone local day of week\n c: function(date, token, localize, options) {\n var dayOfWeek = date.getUTCDay()\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek)\n // Padded numerical value\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length)\n // 1st, 2nd, ..., 7th\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, { unit: 'day' })\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n })\n // T\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n })\n // Tu\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n })\n // Tuesday\n case 'cccc':\n default:\n return localize.day(dayOfWeek, { width: 'wide', context: 'standalone' })\n }\n },\n\n // ISO day of week\n i: function(date, token, localize) {\n var dayOfWeek = date.getUTCDay()\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek)\n // 02\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length)\n // 2nd\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, { unit: 'day' })\n // Tue\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n })\n // T\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n })\n // Tu\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n })\n // Tuesday\n case 'iiii':\n default:\n return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n }\n },\n\n // AM or PM\n a: function(date, token, localize) {\n var hours = date.getUTCHours()\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'\n\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n })\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n })\n }\n },\n\n // AM, PM, midnight, noon\n b: function(date, token, localize) {\n var hours = date.getUTCHours()\n var dayPeriodEnumValue\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n })\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n })\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function(date, token, localize) {\n var hours = date.getUTCHours()\n var dayPeriodEnumValue\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n })\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n })\n }\n },\n\n // Hour [1-12]\n h: function(date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12\n if (hours === 0) hours = 12\n return localize.ordinalNumber(hours, { unit: 'hour' })\n }\n\n return lightFormatters.h(date, token)\n },\n\n // Hour [0-23]\n H: function(date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), { unit: 'hour' })\n }\n\n return lightFormatters.H(date, token)\n },\n\n // Hour [0-11]\n K: function(date, token, localize) {\n var hours = date.getUTCHours() % 12\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, { unit: 'hour' })\n }\n\n return addLeadingZeros(hours, token.length)\n },\n\n // Hour [1-24]\n k: function(date, token, localize) {\n var hours = date.getUTCHours()\n if (hours === 0) hours = 24\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, { unit: 'hour' })\n }\n\n return addLeadingZeros(hours, token.length)\n },\n\n // Minute\n m: function(date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), { unit: 'minute' })\n }\n\n return lightFormatters.m(date, token)\n },\n\n // Second\n s: function(date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), { unit: 'second' })\n }\n\n return lightFormatters.s(date, token)\n },\n\n // Fraction of second\n S: function(date, token) {\n var numberOfDigits = token.length\n var milliseconds = date.getUTCMilliseconds()\n var fractionalSeconds = Math.floor(\n milliseconds * Math.pow(10, numberOfDigits - 3)\n )\n return addLeadingZeros(fractionalSeconds, numberOfDigits)\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = originalDate.getTimezoneOffset()\n\n if (timezoneOffset === 0) {\n return 'Z'\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case 'XXXX':\n case 'XX': // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset)\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = originalDate.getTimezoneOffset()\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case 'xxxx':\n case 'xx': // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset)\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (GMT)\n O: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = originalDate.getTimezoneOffset()\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n // Long\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Timezone (specific non-location)\n z: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timezoneOffset = originalDate.getTimezoneOffset()\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n // Long\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':')\n }\n },\n\n // Seconds timestamp\n t: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timestamp = Math.floor(originalDate.getTime() / 1000)\n return addLeadingZeros(timestamp, token.length)\n },\n\n // Milliseconds timestamp\n T: function(date, token, _localize, options) {\n var originalDate = options._originalDate || date\n var timestamp = originalDate.getTime()\n return addLeadingZeros(timestamp, token.length)\n }\n}\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+'\n var absOffset = Math.abs(offset)\n var hours = Math.floor(absOffset / 60)\n var minutes = absOffset % 60\n if (minutes === 0) {\n return sign + String(hours)\n }\n var delimiter = dirtyDelimiter || ''\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2)\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+'\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2)\n }\n return formatTimezone(offset, dirtyDelimiter)\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || ''\n var sign = offset > 0 ? '-' : '+'\n var absOffset = Math.abs(offset)\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2)\n var minutes = addLeadingZeros(absOffset % 60, 2)\n return sign + hours + delimiter + minutes\n}\n\nexport default formatters\n","import toDate from '../../toDate/index.js'\n\nvar MILLISECONDS_IN_DAY = 86400000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCDayOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var timestamp = date.getTime()\n date.setUTCMonth(0, 1)\n date.setUTCHours(0, 0, 0, 0)\n var startOfYearTimestamp = date.getTime()\n var difference = timestamp - startOfYearTimestamp\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1\n}\n","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({ width: 'short' })\n case 'PP':\n return formatLong.date({ width: 'medium' })\n case 'PPP':\n return formatLong.date({ width: 'long' })\n case 'PPPP':\n default:\n return formatLong.date({ width: 'full' })\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({ width: 'short' })\n case 'pp':\n return formatLong.time({ width: 'medium' })\n case 'ppp':\n return formatLong.time({ width: 'long' })\n case 'pppp':\n default:\n return formatLong.time({ width: 'full' })\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/)\n var datePattern = matchResult[1]\n var timePattern = matchResult[2]\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong)\n }\n\n var dateTimeFormat\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({ width: 'short' })\n break\n case 'PP':\n dateTimeFormat = formatLong.dateTime({ width: 'medium' })\n break\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({ width: 'long' })\n break\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({ width: 'full' })\n break\n }\n\n return dateTimeFormat\n .replace('{{date}}', dateLongFormatter(datePattern, formatLong))\n .replace('{{time}}', timeLongFormatter(timePattern, formatLong))\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n}\n\nexport default longFormatters\n","import toInteger from '../_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport isValid from '../isValid/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport formatters from '../_lib/format/formatters/index.js'\nimport longFormatters from '../_lib/format/longFormatters/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\nimport {\n isProtectedToken,\n throwProtectedError\n} from '../_lib/protectedTokens/index.js'\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 8 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 8 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Su | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Su | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Su | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Su | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | a..aaa | AM, PM | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bbb | AM, PM, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 1, 2, ..., 11, 0 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 0001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 05/29/1453 | 7 |\n * | | PP | May 29, 1453 | 7 |\n * | | PPP | May 29th, 1453 | 7 |\n * | | PPPP | Sunday, May 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 05/29/1453, 12:00 AM | 7 |\n * | | PPpp | May 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | May 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Sunday, May 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n * - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n * - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens (`yy`, `yyyy`).\n * See: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see: https://git.io/fxCyr\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var formatStr = String(dirtyFormatStr)\n var options = dirtyOptions || {}\n\n var locale = options.locale || defaultLocale\n\n var localeFirstWeekContainsDate =\n locale.options && locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError(\n 'firstWeekContainsDate must be between 1 and 7 inclusively'\n )\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property')\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property')\n }\n\n var originalDate = toDate(dirtyDate)\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value')\n }\n\n // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate)\n var utcDate = subMilliseconds(originalDate, timezoneOffset)\n\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n }\n\n var result = formatStr\n .match(longFormattingTokensRegExp)\n .map(function(substring) {\n var firstCharacter = substring[0]\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter]\n return longFormatter(substring, locale.formatLong, formatterOptions)\n }\n return substring\n })\n .join('')\n .match(formattingTokensRegExp)\n .map(function(substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\"\n }\n\n var firstCharacter = substring[0]\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring)\n }\n\n var formatter = formatters[firstCharacter]\n if (formatter) {\n if (!options.awareOfUnicodeTokens && isProtectedToken(substring)) {\n throwProtectedError(substring)\n }\n return formatter(utcDate, substring, locale.localize, formatterOptions)\n }\n\n return substring\n })\n .join('')\n\n return result\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","import toDate from '../toDate/index.js'\n\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * var result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * var result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * // Wed Feb 11 1987 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var diff = dateLeft.getTime() - dateRight.getTime()\n\n if (diff < 0) {\n return -1\n } else if (diff > 0) {\n return 1\n // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff\n }\n}\n","import fs from '../platform/server/fs';\nimport asyncStorage from '../platform/server/asyncStorage';\nimport { fetch } from '../platform/server/fetch';\nimport * as monthUtils from '../shared/months';\nimport * as sqlite from '../platform/server/sqlite';\nimport * as prefs from './prefs';\nimport { getServer } from './server-config';\nimport { runMutator } from './mutators';\nimport {\n HTTPError,\n PostError,\n FileDownloadError,\n FileUploadError\n} from './errors';\nimport encryption from './encryption';\nimport { post } from './post';\nlet uuid = require('../platform/uuid');\nlet AdmZip = require('adm-zip');\n\nlet UPLOAD_FREQUENCY_IN_DAYS = 7;\n\nasync function checkHTTPStatus(res) {\n if (res.status !== 200) {\n return res.text().then(str => {\n throw new HTTPError(res.status, str);\n });\n } else {\n return res;\n }\n}\n\nasync function fetchJSON(...args) {\n let res = await fetch(...args);\n res = await checkHTTPStatus(res);\n return res.json();\n}\n\nexport async function checkKey() {\n let userToken = await asyncStorage.getItem('user-token');\n\n let { cloudFileId, encryptKeyId } = prefs.getPrefs();\n\n let res;\n try {\n res = await post(getServer().SYNC_SERVER + '/user-get-key', {\n token: userToken,\n fileId: cloudFileId\n });\n } catch (e) {\n console.log(e);\n return { error: { reason: 'network' } };\n }\n\n // This == comparison is important, they could be null or undefined\n // eslint-disable-next-line\n return {\n valid:\n res.id == encryptKeyId && // eslint-disable-line\n (encryptKeyId == null || encryption.hasKey(encryptKeyId))\n };\n}\n\nexport async function resetSyncState(newKeyState) {\n let userToken = await asyncStorage.getItem('user-token');\n\n let { cloudFileId } = prefs.getPrefs();\n\n if (process.env.IS_BETA) {\n return { error: { reason: 'beta-version' } };\n }\n\n try {\n await post(getServer().SYNC_SERVER + '/reset-user-file', {\n token: userToken,\n fileId: cloudFileId\n });\n } catch (e) {\n if (e instanceof PostError) {\n return {\n error: {\n reason: e.reason === 'unauthorized' ? 'unauthorized' : 'network'\n }\n };\n }\n return { error: { reason: 'internal' } };\n }\n\n if (newKeyState) {\n try {\n await post(getServer().SYNC_SERVER + '/user-create-key', {\n token: userToken,\n fileId: cloudFileId,\n keyId: newKeyState.key.getId(),\n keySalt: newKeyState.salt,\n testContent: newKeyState.testContent\n });\n } catch (e) {\n if (e instanceof PostError) {\n return { error: { reason: 'network' } };\n }\n return { error: { reason: 'internal' } };\n }\n }\n\n return {};\n}\n\nexport async function exportBuffer() {\n let { id, budgetName } = prefs.getPrefs();\n if (!budgetName) {\n return null;\n }\n\n let budgetDir = fs.getBudgetDir(id);\n\n // create zip\n let zipped = new AdmZip();\n\n // We run this in a mutator even though its not mutating anything\n // because we are reading the sqlite file from disk. We want to make\n // sure that we get a valid snapshot of it so we want this to be\n // serialized with all other mutations.\n await runMutator(async () => {\n let rawDbContent = await fs.readFile(\n fs.join(budgetDir, 'db.sqlite'),\n 'binary'\n );\n\n // Do some post-processing of the database. We NEVER upload the cache with\n // the database; this forces new downloads to always recompute everything\n // which is not only safer, but reduces the filesize a lot.\n let memDb = await sqlite.openDatabase(rawDbContent);\n sqlite.execQuery(\n memDb,\n `\n DELETE FROM kvcache;\n DELETE FROM kvcache_key;\n `\n );\n\n let dbContent = sqlite.exportDatabase(memDb);\n sqlite.closeDatabase(memDb);\n\n // mark it as a file that needs a new clock so when a new client\n // downloads it, it'll get set to a unique node\n let meta = JSON.parse(\n await fs.readFile(fs.join(budgetDir, 'metadata.json'))\n );\n\n meta.resetClock = true;\n let metaContent = Buffer.from(JSON.stringify(meta), 'utf8');\n\n zipped.addFile('db.sqlite', dbContent);\n zipped.addFile('metadata.json', metaContent);\n });\n\n return zipped.toBuffer();\n}\n\nexport async function upload() {\n let userToken = await asyncStorage.getItem('user-token');\n if (!userToken) {\n throw FileUploadError('unauthorized');\n }\n\n // We never change the server from the beta version\n if (process.env.IS_BETA) {\n throw FileUploadError('beta-version');\n }\n\n let zipContent = await exportBuffer();\n if (zipContent == null) {\n return;\n }\n\n let { id, groupId, budgetName, cloudFileId, encryptKeyId } = prefs.getPrefs();\n let uploadContent = zipContent;\n let uploadMeta = null;\n\n // The upload process encrypts with the key tagged in the prefs for\n // the file. It will upload the file and the server is responsible\n // for checking that the key is up-to-date and rejecting it if not\n if (encryptKeyId) {\n let encrypted;\n try {\n encrypted = await encryption.encrypt(zipContent, encryptKeyId);\n } catch (e) {\n throw FileUploadError('encrypt-failure', {\n isMissingKey: e.message === 'missing-key'\n });\n }\n uploadContent = encrypted.value;\n uploadMeta = encrypted.meta;\n }\n\n if (!cloudFileId) {\n cloudFileId = uuid.v4Sync();\n }\n\n let res;\n try {\n res = await fetchJSON(getServer().SYNC_SERVER + '/upload-user-file', {\n method: 'POST',\n headers: {\n 'Content-Length': uploadContent.length,\n 'Content-Type': 'application/encrypted-file',\n 'X-ACTUAL-TOKEN': userToken,\n 'X-ACTUAL-FILE-ID': cloudFileId,\n 'X-ACTUAL-NAME': encodeURIComponent(budgetName),\n 'X-ACTUAL-FORMAT': 2,\n ...(uploadMeta\n ? { 'X-ACTUAL-ENCRYPT-META': JSON.stringify(uploadMeta) }\n : null),\n ...(groupId ? { 'X-ACTUAL-GROUP-ID': groupId } : null)\n },\n body: uploadContent\n });\n } catch (err) {\n console.log('Upload failure', err);\n\n let reason = err instanceof PostError ? err.reason : 'network';\n\n if (err instanceof PostError) {\n throw new FileUploadError(\n err.reason === 'unauthorized' ? 'unauthorized' : err.reason || 'network'\n );\n }\n\n throw FileUploadError('internal');\n }\n\n if (res.status === 'ok') {\n // Only save it if we are still working on the same file\n if (prefs.getPrefs() && prefs.getPrefs().id === id) {\n await prefs.savePrefs({\n lastUploaded: monthUtils.currentDay(),\n cloudFileId,\n groupId: res.groupId\n });\n }\n } else {\n throw FileUploadError('internal');\n }\n}\n\nexport async function possiblyUpload() {\n let { cloudFileId, groupId, lastUploaded, id } = prefs.getPrefs();\n\n let threshold =\n lastUploaded && monthUtils.addDays(lastUploaded, UPLOAD_FREQUENCY_IN_DAYS);\n let currentDay = monthUtils.currentDay();\n\n // We only want to try to upload every UPLOAD_FREQUENCY_IN_DAYS days\n if (lastUploaded && currentDay < threshold) {\n return;\n }\n\n // We only want to upload existing cloud files that are part of a\n // valid group\n if (!cloudFileId || !groupId) {\n return;\n }\n\n // Don't block on uploading\n upload().catch(err => {});\n}\n\nexport async function removeFile(fileId) {\n const [[, userToken]] = await asyncStorage.multiGet(['user-token']);\n\n await post(getServer().SYNC_SERVER + '/delete-user-file', {\n token: userToken,\n fileId\n });\n}\n\nexport async function listRemoteFiles() {\n let userToken = await asyncStorage.getItem('user-token');\n if (!userToken) {\n return null;\n }\n\n let res;\n try {\n res = await fetchJSON(getServer().SYNC_SERVER + '/list-user-files', {\n headers: {\n 'X-ACTUAL-TOKEN': userToken\n }\n });\n } catch (e) {\n console.log('Error', e);\n return null;\n }\n\n if (res.status === 'error') {\n return null;\n }\n\n return res.data.map(file => ({\n ...file,\n hasKey: encryption.hasKey(file.encryptKeyId)\n }));\n}\n\nexport async function download(fileId, replace) {\n let userToken = await asyncStorage.getItem('user-token');\n\n let buffer;\n try {\n buffer = await fetch(getServer().SYNC_SERVER + '/download-user-file', {\n headers: {\n 'X-ACTUAL-TOKEN': userToken,\n 'X-ACTUAL-FILE-ID': fileId\n }\n })\n .then(checkHTTPStatus)\n .then(res => {\n if (res.arrayBuffer) {\n return res.arrayBuffer().then(ab => Buffer.from(ab));\n }\n return res.buffer();\n });\n } catch (err) {\n console.log('Download failure', err);\n throw FileDownloadError('download-failure');\n }\n\n let res;\n try {\n res = await fetchJSON(getServer().SYNC_SERVER + '/get-user-file-info', {\n headers: {\n 'X-ACTUAL-TOKEN': userToken,\n 'X-ACTUAL-FILE-ID': fileId\n }\n });\n } catch (err) {\n throw FileDownloadError('internal', { fileId });\n }\n\n if (res.status !== 'ok') {\n throw FileDownloadError('internal', { fileId });\n }\n let fileData = res.data;\n\n // The download process checks if the server gave us decrypt\n // information. It is assumed that this key has already been loaded\n // in, which is done in a previous step\n if (fileData.encryptMeta) {\n try {\n buffer = await encryption.decrypt(buffer, fileData.encryptMeta);\n } catch (e) {\n throw FileDownloadError('decrypt-failure', {\n isMissingKey: e.message === 'missing-key'\n });\n }\n }\n\n let zipped = new AdmZip(buffer);\n let entries = zipped.getEntries();\n let dbEntry = entries.find(e => e.entryName.includes('db.sqlite'));\n let metaEntry = entries.find(e => e.entryName.includes('metadata.json'));\n\n if (!dbEntry || !metaEntry) {\n throw FileDownloadError('invalid-zip-file');\n }\n\n let dbContent = zipped.readFile(dbEntry);\n let metaContent = zipped.readFile(metaEntry);\n\n let meta;\n try {\n meta = JSON.parse(metaContent.toString('utf8'));\n } catch (err) {\n throw FileDownloadError('invalid-meta-file');\n }\n\n // Update the metadata. The stored file on the server might be\n // out-of-date with a few keys\n meta = {\n ...meta,\n cloudFileId: fileData.fileId,\n groupId: fileData.groupId,\n lastUploaded: monthUtils.currentDay(),\n encryptKeyId: fileData.encryptMeta ? fileData.encryptMeta.keyId : null\n };\n\n let budgetDir = fs.getBudgetDir(meta.id);\n\n if (await fs.exists(budgetDir)) {\n if (replace) {\n // Don't remove the directory so that backups are retained\n let dbFile = fs.join(budgetDir, 'db.sqlite');\n let metaFile = fs.join(budgetDir, 'metadata.json');\n\n if (await fs.exists(dbFile)) {\n await fs.removeFile(dbFile);\n }\n if (await fs.exists(metaFile)) {\n await fs.removeFile(metaFile);\n }\n } else {\n throw FileDownloadError('file-exists', { id: meta.id });\n }\n } else {\n await fs.mkdir(budgetDir);\n }\n\n await fs.writeFile(fs.join(budgetDir, 'db.sqlite'), dbContent);\n await fs.writeFile(fs.join(budgetDir, 'metadata.json'), JSON.stringify(meta));\n\n return { id: meta.id };\n}\n","import { integerToAmount, amountToInteger, currencyToAmount } from './util';\n\n// For now, this info is duplicated from the backend. Figure out how\n// to share it later.\nexport const TYPE_INFO = {\n date: {\n ops: ['is', 'isapprox', 'gt', 'gte', 'lt', 'lte'],\n nullable: false\n },\n id: {\n ops: ['is', 'contains', 'oneOf'],\n nullable: true\n },\n string: {\n ops: ['is', 'contains', 'oneOf'],\n nullable: false\n },\n number: {\n ops: ['is', 'isapprox', 'isbetween', 'gt', 'gte', 'lt', 'lte'],\n nullable: false\n },\n boolean: {\n ops: ['is'],\n nullable: false\n }\n};\n\nexport const FIELD_TYPES = new Map(\n Object.entries({\n imported_payee: 'string',\n payee: 'id',\n date: 'date',\n notes: 'string',\n amount: 'number',\n amountInflow: 'number',\n amountOutfow: 'number',\n category: 'id',\n account: 'id',\n cleared: 'boolean'\n })\n);\n\nexport function mapField(field, opts) {\n opts = opts || {};\n\n switch (field) {\n case 'imported_payee':\n return 'imported payee';\n case 'amount':\n if (opts.inflow) {\n return 'amount (inflow)';\n } else if (opts.outflow) {\n return 'amount (outflow)';\n }\n return 'amount';\n case 'amount-inflow':\n return 'amount (inflow)';\n case 'amount-outflow':\n return 'amount (outflow)';\n default:\n return field;\n }\n}\n\nexport function friendlyOp(op, type) {\n switch (op) {\n case 'oneOf':\n return 'one of';\n case 'is':\n return 'is';\n case 'isapprox':\n return 'is approx';\n case 'isbetween':\n return 'is between';\n case 'contains':\n return 'contains';\n case 'gt':\n if (type === 'date') {\n return 'is after';\n }\n return 'is greater than';\n case 'gte':\n if (type === 'date') {\n return 'is after or equals';\n }\n return 'is greater than or equals';\n case 'lt':\n if (type === 'date') {\n return 'is before';\n }\n return 'is less than';\n case 'lte':\n if (type === 'date') {\n return 'is before or equals';\n }\n return 'is less than or equals';\n case 'true':\n return 'is true';\n case 'false':\n return 'is false';\n case 'set':\n return 'set';\n case 'link-schedule':\n return 'link schedule';\n default:\n return '';\n }\n}\n\nexport function deserializeField(field) {\n if (field === 'amount-inflow') {\n return { field: 'amount', options: { inflow: true } };\n } else if (field === 'amount-outflow') {\n return { field: 'amount', options: { outflow: true } };\n } else {\n return { field };\n }\n}\n\nexport function getFieldError(type) {\n switch (type) {\n case 'date-format':\n return 'Invalid date format';\n case 'no-null':\n case 'no-empty-array':\n case 'no-empty-string':\n return 'Value cannot be empty';\n case 'not-number':\n return 'Value must be a number';\n case 'invalid-field':\n return 'Please choose a valid field for this type of rule';\n default:\n return 'Internal error, sorry! Contact help@actualbudget.com';\n }\n}\n\nexport function sortNumbers(num1, num2) {\n if (num1 < num2) {\n return [num1, num2];\n }\n return [num2, num1];\n}\n\nexport function parse(item) {\n switch (item.type) {\n case 'number': {\n let parsed = item.value;\n if (item.field === 'amount' && item.op !== 'isbetween') {\n parsed = integerToAmount(parsed);\n }\n return { ...item, value: parsed };\n }\n case 'string': {\n let parsed = item.value == null ? '' : item.value;\n return { ...item, value: parsed };\n }\n default:\n }\n\n return { ...item, error: null };\n}\n\nexport function unparse({ error, inputKey, ...item }) {\n switch (item.type) {\n case 'number': {\n let unparsed = item.value;\n if (item.field === 'amount' && item.op !== 'isbetween') {\n unparsed = amountToInteger(unparsed);\n }\n\n return { ...item, value: unparsed };\n }\n case 'string': {\n let unparsed = item.value == null ? '' : item.value;\n return { ...item, value: unparsed };\n }\n default:\n }\n\n return item;\n}\n\nexport function makeValue(value, cond) {\n switch (cond.type) {\n case 'number': {\n if (cond.op !== 'isbetween') {\n return {\n ...cond,\n error: null,\n value: value ? currencyToAmount(value) || 0 : 0\n };\n }\n break;\n }\n default:\n }\n\n return { ...cond, error: null, value };\n}\n\nexport function getApproxNumberThreshold(number) {\n return (Math.abs(number) * 0.075) | 0;\n}\n","import * as models from './models';\n\nexport const transactionModel = {\n ...models.transactionModel,\n\n toExternal(transactions, idx, payees) {\n return transactions;\n // function convert(t, payee) {\n // return {\n // id: t.id,\n // account_id: t.acct,\n // amount: t.amount,\n // payee_id: payee ? payee.id : null,\n // payee: payee ? payee.name : null,\n // imported_payee: t.imported_description,\n // category_id: t.category,\n // date: t.date,\n // notes: t.notes,\n // imported_id: t.financial_id,\n // transfer_id: t.transferred_id,\n // cleared: t.cleared\n // };\n // }\n\n // let splits = getAllSplitTransactions(transactions, idx);\n // if (splits) {\n // let payee =\n // splits.parent.description && payees[splits.parent.description];\n\n // return {\n // ...convert(splits.parent, payee),\n // subtransactions: splits.children.map(child => convert(child, payee))\n // };\n // }\n\n // let transaction = transactions[idx];\n // let payee = transaction.description && payees[transaction.description];\n // return convert(transaction, payee);\n },\n\n fromExternal(transaction) {\n let result = {};\n if ('id' in transaction) {\n result.id = transaction.id;\n }\n if ('account_id' in transaction) {\n result.acct = transaction.account_id;\n }\n if ('amount' in transaction) {\n result.amount = transaction.amount;\n }\n if ('payee_id' in transaction) {\n result.description = transaction.payee_id;\n }\n if ('imported_payee' in transaction) {\n result.imported_description = transaction.imported_payee;\n }\n if ('category_id' in transaction) {\n result.category = transaction.category_id;\n }\n if ('date' in transaction) {\n result.date = transaction.date;\n }\n if ('notes' in transaction) {\n result.notes = transaction.notes;\n }\n if ('imported_id' in transaction) {\n result.financial_id = transaction.imported_id;\n }\n if ('transfer_id' in transaction) {\n result.transferred_id = transaction.transfer_id;\n }\n if ('cleared' in transaction) {\n result.cleared = transaction.cleared;\n }\n return result;\n }\n};\n\nexport const accountModel = {\n ...models.accountModel,\n\n toExternal(account) {\n return {\n id: account.id,\n name: account.name,\n type: account.type,\n offbudget: account.offbudget ? true : false,\n closed: account.closed ? true : false\n };\n },\n\n fromExternal(account) {\n let result = { ...account };\n if ('offbudget' in account) {\n result.offbudget = account.offbudget ? 1 : 0;\n }\n if ('closed' in account) {\n result.closed = account.closed ? 1 : 0;\n }\n return result;\n }\n};\n\nexport const categoryModel = {\n ...models.categoryModel,\n\n toExternal(category) {\n return {\n id: category.id,\n name: category.name,\n is_income: category.is_income ? true : false,\n group_id: category.cat_group\n };\n },\n\n fromExternal(category) {\n let { group_id: _, ...result } = category;\n if ('is_income' in category) {\n result.is_income = category.is_income ? 1 : 0;\n }\n if ('group_id' in category) {\n result.cat_group = category.group_id;\n }\n return result;\n }\n};\n\nexport const categoryGroupModel = {\n ...models.categoryGroupModel,\n\n toExternal(group) {\n return {\n id: group.id,\n name: group.name,\n is_income: group.is_income ? true : false,\n categories: group.categories.map(categoryModel.toExternal)\n };\n },\n\n fromExternal(group) {\n let result = { ...group };\n if ('is_income' in group) {\n result.is_income = group.is_income ? 1 : 0;\n }\n if ('categories' in group) {\n result.categories = group.categories.map(categoryModel.fromExternal);\n }\n return result;\n }\n};\n\nexport const payeeModel = {\n ...models.payeeModel,\n\n toExternal(payee) {\n return {\n id: payee.id,\n name: payee.name,\n category: payee.category,\n transfer_acct: payee.transfer_acct\n };\n },\n\n fromExternal(payee) {\n // No translation is needed\n return payee;\n }\n};\n\nexport const payeeRuleModel = {\n ...models.payeeRuleModel,\n\n toExternal(rule) {\n let { tombstone, ...result } = rule;\n return result;\n },\n\n fromExternal(rule) {\n return rule;\n }\n};\n","import title from './title';\nimport * as db from '../db';\nimport {\n mergeObjects,\n hasFieldsChanged,\n toRelaxedNumber,\n amountToInteger,\n integerToAmount\n} from '../../shared/util';\nimport {\n makeChild as makeChildTransaction,\n recalculateSplit\n} from '../../shared/transactions';\nimport * as monthUtils from '../../shared/months';\nimport { transactionModel } from '../api-models';\nimport { getServer } from '../server-config';\nimport { batchMessages } from '../sync';\nimport { runMutator } from '../mutators';\nimport { getStartingBalancePayee } from './payees';\nimport * as transfer from './transfer';\nimport { TransactionError } from '../errors';\nimport { runRules } from './transaction-rules';\nimport { batchUpdateTransactions } from './transactions';\n\nconst dateFns = require('date-fns');\nconst { post } = require('../post');\nconst levenshtein = require('damerau-levenshtein');\nconst uuid = require('../../platform/uuid');\n\n// Plaid article about API options:\n// https://support.plaid.com/customer/en/portal/articles/2612155-transactions-returned-per-request\n\nfunction BankSyncError(type, code) {\n return { type: 'BankSyncError', category: type, code };\n}\n\nfunction makeSplitTransaction(trans, subtransactions) {\n // We need to calculate the final state of split transactions\n let { subtransactions: sub, ...parent } = recalculateSplit({\n ...trans,\n is_parent: true,\n subtransactions: subtransactions.map((transaction, idx) =>\n makeChildTransaction(trans, {\n ...transaction,\n sort_order: 0 - idx\n })\n )\n });\n return [parent, ...sub];\n}\n\nfunction getAccountBalance(account) {\n // Debt account types need their balance reversed\n switch (account.type) {\n case 'credit':\n case 'loan':\n return -account.balances.current;\n default:\n return account.balances.current;\n }\n}\n\nasync function updateAccountBalance(id, balance) {\n await db.runQuery('UPDATE accounts SET balance_current = ? WHERE id = ?', [\n amountToInteger(balance),\n id\n ]);\n}\n\nexport async function getAccounts(userId, userKey, id) {\n let res = await post(getServer().PLAID_SERVER + '/accounts', {\n userId,\n key: userKey,\n item_id: id\n });\n\n let { accounts } = res;\n\n accounts.forEach(acct => {\n acct.balances.current = getAccountBalance(acct);\n });\n\n return accounts;\n}\n\nexport function fromPlaid(trans) {\n return {\n imported_id: trans.transaction_id,\n payee_name: trans.name,\n imported_payee: trans.name,\n amount: -amountToInteger(trans.amount),\n date: trans.date\n };\n}\n\nasync function downloadTransactions(\n userId,\n userKey,\n acctId,\n bankId,\n since,\n count\n) {\n let allTransactions = [];\n let accountBalance = null;\n let pageSize = 100;\n let offset = 0;\n let numDownloaded = 0;\n\n while (1) {\n const endDate = monthUtils.currentDay();\n\n const res = await post(getServer().PLAID_SERVER + '/transactions', {\n userId: userId,\n key: userKey,\n item_id: '' + bankId,\n account_id: acctId,\n start_date: since,\n end_date: endDate,\n count: pageSize,\n offset\n });\n\n if (res.error_code) {\n throw BankSyncError(res.error_type, res.error_code);\n }\n\n if (res.transactions.length === 0) {\n break;\n }\n\n numDownloaded += res.transactions.length;\n\n // Remove pending transactions for now - we will handle them in\n // the future.\n allTransactions = allTransactions.concat(\n res.transactions.filter(t => !t.pending)\n );\n accountBalance = getAccountBalance(res.accounts[0]);\n\n if (\n numDownloaded === res.total_transactions ||\n (count != null && allTransactions.length >= count)\n ) {\n break;\n }\n\n offset += pageSize;\n }\n\n allTransactions =\n count != null ? allTransactions.slice(0, count) : allTransactions;\n\n return {\n transactions: allTransactions.map(fromPlaid),\n accountBalance\n };\n}\n\nasync function resolvePayee(trans, payeeName, payeesToCreate) {\n if (trans.payee == null && payeeName) {\n // First check our registry of new payees (to avoid a db access)\n // then check the db for existing payees\n let payee = payeesToCreate.get(payeeName.toLowerCase());\n payee = payee || (await db.getPayeeByName(payeeName));\n\n if (payee != null) {\n return payee.id;\n } else {\n // Otherwise we're going to create a new one\n let newPayee = { id: uuid.v4Sync(), name: payeeName };\n payeesToCreate.set(payeeName.toLowerCase(), newPayee);\n return newPayee.id;\n }\n }\n\n return trans.payee;\n}\n\nasync function normalizeTransactions(\n transactions,\n acctId,\n { rawPayeeName } = {}\n) {\n let payeesToCreate = new Map();\n\n let normalized = [];\n for (let trans of transactions) {\n // Validate the date because we do some stuff with it. The db\n // layer does better validation, but this will give nicer errors\n if (trans.date == null) {\n throw new Error('`date` is required when adding a transaction');\n }\n\n // Strip off the irregular properties\n let { payee_name, subtransactions, ...rest } = trans;\n trans = rest;\n\n if (payee_name) {\n let trimmed = payee_name.trim();\n if (trimmed === '') {\n payee_name = null;\n } else {\n payee_name = rawPayeeName ? trimmed : title(trimmed);\n }\n }\n\n trans.imported_payee = trans.imported_payee || payee_name;\n if (trans.imported_payee) {\n trans.imported_payee = trans.imported_payee.trim();\n }\n\n // It's important to resolve both the account and payee early so\n // when rules are run, they have the right data. Resolving payees\n // also simplifies the payee creation process\n trans.account = acctId;\n trans.payee = await resolvePayee(trans, payee_name, payeesToCreate);\n\n normalized.push({\n payee_name,\n subtransactions: subtransactions\n ? subtransactions.map(t => ({ ...t, account: acctId }))\n : null,\n trans\n });\n }\n\n return { normalized, payeesToCreate };\n}\n\nasync function createNewPayees(payeesToCreate, addsAndUpdates) {\n let usedPayeeIds = new Set(addsAndUpdates.map(t => t.payee));\n\n await batchMessages(async () => {\n for (let payee of payeesToCreate.values()) {\n // Only create the payee if it ended up being used\n if (usedPayeeIds.has(payee.id)) {\n await db.insertPayee(payee);\n }\n }\n });\n}\n\nexport async function reconcileTransactions(acctId, transactions) {\n const hasMatched = new Set();\n const updated = [];\n const added = [];\n\n let { normalized, payeesToCreate } = await normalizeTransactions(\n transactions,\n acctId\n );\n\n // The first pass runs the rules, and preps data for fuzzy matching\n let transactionsStep1 = [];\n for (let { payee_name, trans, subtransactions } of normalized) {\n // Run the rules\n trans = runRules(trans);\n\n let match = null;\n let fuzzyDataset = null;\n\n // First, match with an existing transaction's imported_id. This\n // is the highest fidelity match and should always be attempted\n // first.\n if (trans.imported_id) {\n match = await db.first(\n 'SELECT * FROM v_transactions WHERE imported_id = ? AND account = ?',\n [trans.imported_id, acctId]\n );\n\n // TODO: Pending transactions\n\n if (match) {\n hasMatched.add(match.id);\n }\n }\n\n // If it didn't match, query data needed for fuzzy matching\n if (!match) {\n // Look 1 day ahead and 4 days back when fuzzy matching. This\n // needs to select all fields that need to be read from the\n // matched transaction. See the final pass below for the needed\n // fields.\n fuzzyDataset = await db.all(\n `SELECT id, date, imported_id, payee, category, notes FROM v_transactions\n WHERE date >= ? AND date <= ? AND amount = ? AND account = ? AND is_child = 0`,\n [\n db.toDateRepr(monthUtils.subDays(trans.date, 4)),\n db.toDateRepr(monthUtils.addDays(trans.date, 1)),\n trans.amount || 0,\n acctId\n ]\n );\n }\n\n transactionsStep1.push({\n payee_name,\n trans,\n subtransactions,\n match,\n fuzzyDataset\n });\n }\n\n // Next, do the fuzzy matching. This first pass matches based on the\n // payee id. We do this in multiple passes so that higher fidelity\n // matching always happens first, i.e. a transaction should match\n // match with low fidelity if a later transaction is going to match\n // the same one with high fidelity.\n let transactionsStep2 = transactionsStep1.map(data => {\n if (!data.match && data.fuzzyDataset) {\n // Try to find one where the payees match.\n let match = data.fuzzyDataset.find(\n row => !hasMatched.has(row.id) && data.trans.payee === row.payee\n );\n\n if (match) {\n hasMatched.add(match.id);\n return { ...data, match };\n }\n }\n return data;\n });\n\n // The final fuzzy matching pass. This is the lowest fidelity\n // matching: it just find the first transaction that hasn't been\n // matched yet. Remember the the dataset only contains transactions\n // around the same date with the same amount.\n let transactionsStep3 = transactionsStep2.map(data => {\n if (!data.match && data.fuzzyDataset) {\n let match = data.fuzzyDataset.find(row => !hasMatched.has(row.id));\n if (match) {\n hasMatched.add(match.id);\n return { ...data, match };\n }\n }\n return data;\n });\n\n // Finally, generate & commit the changes\n for (let { payee_name, trans, subtransactions, match } of transactionsStep3) {\n if (match) {\n // TODO: change the above sql query to use aql\n let existing = {\n ...match,\n cleared: match.cleared === 1,\n date: db.fromDateRepr(match.date)\n };\n\n // Update the transaction\n const updates = {\n date: trans.date,\n imported_id: trans.imported_id || null,\n payee: existing.payee || trans.payee || null,\n category: existing.category || trans.category || null,\n imported_payee: trans.imported_payee || null,\n notes: existing.notes || trans.notes || null,\n cleared: trans.cleared != null ? trans.cleared : true\n };\n\n if (hasFieldsChanged(existing, updates, Object.keys(updates))) {\n updated.push({ id: existing.id, ...updates });\n }\n } else {\n // Insert a new transaction\n let finalTransaction = {\n ...trans,\n id: uuid.v4Sync(),\n category: trans.category || null,\n cleared: trans.cleared != null ? trans.cleared : true\n };\n\n if (subtransactions && subtransactions.length > 0) {\n added.push(...makeSplitTransaction(finalTransaction, subtransactions));\n } else {\n added.push(finalTransaction);\n }\n }\n }\n\n await createNewPayees(payeesToCreate, [...added, ...updated]);\n await batchUpdateTransactions({ added, updated });\n\n return {\n added: added.map(trans => trans.id),\n updated: updated.map(trans => trans.id)\n };\n}\n\n// This is similar to `reconcileTransactions` except much simpler: it\n// does not try to match any transactions. It just adds them\nexport async function addTransactions(\n acctId,\n transactions,\n { runTransfers = true } = {}\n) {\n const added = [];\n\n let { normalized, payeesToCreate } = await normalizeTransactions(\n transactions,\n acctId,\n { rawPayeeName: true }\n );\n\n for (let { payee_name, trans, subtransactions } of normalized) {\n // Run the rules\n trans = runRules(trans);\n\n let finalTransaction = {\n id: uuid.v4Sync(),\n ...trans,\n account: acctId,\n cleared: trans.cleared != null ? trans.cleared : true\n };\n\n // Add split transactions if they are given\n if (subtransactions && subtransactions.length > 0) {\n added.push(...makeSplitTransaction(finalTransaction, subtransactions));\n } else {\n added.push(finalTransaction);\n }\n }\n\n await createNewPayees(payeesToCreate, added);\n\n let newTransactions;\n if (runTransfers) {\n let res = await batchUpdateTransactions({ added });\n newTransactions = res.added.map(t => t.id);\n } else {\n await batchMessages(async () => {\n newTransactions = await Promise.all(\n added.map(async trans => db.insertTransaction(trans))\n );\n });\n }\n return newTransactions;\n}\n\nexport async function syncAccount(userId, userKey, id, acctId, bankId) {\n // TODO: Handle the case where transactions exist in the future\n // (that will make start date after end date)\n const latestTransaction = await db.first(\n 'SELECT * FROM v_transactions WHERE account = ? ORDER BY date DESC LIMIT 1',\n [id]\n );\n\n if (latestTransaction) {\n const startingTransaction = await db.first(\n 'SELECT date FROM v_transactions WHERE account = ? ORDER BY date ASC LIMIT 1',\n [id]\n );\n const startingDate = db.fromDateRepr(startingTransaction.date);\n // assert(startingTransaction)\n\n // Get all transactions since the latest transaction, plus any 5\n // days before the latest transaction. This gives us a chance to\n // resolve any transactions that were entered manually.\n //\n // TODO: What this really should do is query the last imported_id\n // and since then\n let date = monthUtils.subDays(db.fromDateRepr(latestTransaction.date), 31);\n\n // Never download transactions before the starting date. This was\n // when the account was added to the system.\n if (date < startingDate) {\n date = startingDate;\n }\n\n let { transactions, accountBalance } = await downloadTransactions(\n userId,\n userKey,\n acctId,\n bankId,\n date\n );\n if (transactions.length === 0) {\n return { added: [], updated: [] };\n }\n\n transactions = transactions.map(trans => ({ ...trans, account: id }));\n\n return runMutator(async () => {\n const result = await reconcileTransactions(id, transactions);\n await updateAccountBalance(id, accountBalance);\n return result;\n });\n } else {\n const acctRow = await db.select('accounts', id);\n\n // Otherwise, download transaction for the last few days if it's an\n // on-budget account, or for the past 30 days if off-budget\n const startingDay = monthUtils.subDays(\n monthUtils.currentDay(),\n acctRow.offbudget === 0 ? 1 : 30\n );\n\n const { transactions } = await downloadTransactions(\n userId,\n userKey,\n acctId,\n bankId,\n dateFns.format(dateFns.parseISO(startingDay), 'yyyy-MM-dd')\n );\n\n // We need to add a transaction that represents the starting\n // balance for everything to balance out. In order to get balance\n // before the first imported transaction, we need to get the\n // current balance from the accounts table and subtract all the\n // imported transactions.\n let currentBalance = acctRow.balance_current;\n\n const previousBalance = transactions.reduce((total, trans) => {\n return total - trans.amount;\n }, currentBalance);\n\n const oldestDate =\n transactions.length > 0\n ? transactions[transactions.length - 1].date\n : monthUtils.currentDay();\n\n let payee = await getStartingBalancePayee();\n\n return runMutator(async () => {\n let initialId = await db.insertTransaction({\n account: id,\n amount: previousBalance,\n category: acctRow.offbudget === 0 ? payee.category : null,\n payee: payee.id,\n date: oldestDate,\n cleared: true,\n starting_balance_flag: true\n });\n\n let result = await reconcileTransactions(id, transactions);\n return {\n ...result,\n added: [initialId, ...result.added]\n };\n });\n }\n}\n","import * as monthUtils from './months';\nimport q from './query';\n\nexport function getStatus(nextDate, completed, hasTrans) {\n let today = monthUtils.currentDay();\n\n if (completed) {\n return 'completed';\n } else if (hasTrans) {\n return 'paid';\n } else if (nextDate === today) {\n return 'due';\n } else if (nextDate > today && nextDate <= monthUtils.addDays(today, 7)) {\n return 'upcoming';\n } else if (nextDate < today) {\n return 'missed';\n } else {\n return 'scheduled';\n }\n}\n\nexport function getHasTransactionsQuery(schedules) {\n let filters = schedules.map(schedule => {\n let dateCond = schedule._conditions.find(c => c.field === 'date');\n return {\n $and: {\n schedule: schedule.id,\n date: {\n $gte:\n dateCond && dateCond.op === 'is'\n ? schedule.next_date\n : monthUtils.subDays(schedule.next_date, 2)\n }\n }\n };\n });\n\n return q('transactions')\n .filter({ $or: filters })\n .orderBy({ date: 'desc' })\n .groupBy('schedule')\n .select(['schedule', 'date']);\n}\n\nfunction makeNumberSuffix(num) {\n // Slight abuse of date-fns to turn a number like \"1\" into the full\n // form \"1st\" but formatting a date with that number\n return monthUtils.format(new Date(2020, 0, num, 12), 'do');\n}\n\nfunction prettyDayName(day) {\n let days = {\n SU: 'Sunday',\n MO: 'Monday',\n TU: 'Tuesday',\n WE: 'Wednesday',\n TH: 'Thursday',\n FR: 'Friday',\n SA: 'Saturday'\n };\n return days[day];\n}\n\nexport function getRecurringDescription(config) {\n let interval = config.interval || 1;\n\n switch (config.frequency) {\n case 'weekly': {\n let desc = 'Every ';\n desc += interval !== 1 ? `${interval} weeks` : 'week';\n desc += ' on ' + monthUtils.format(config.start, 'EEEE');\n return desc;\n }\n case 'monthly': {\n let desc = 'Every ';\n desc += interval !== 1 ? `${interval} months` : 'month';\n\n if (config.patterns && config.patterns.length > 0) {\n // Sort the days ascending. We filter out -1 because that\n // represents \"last days\" and should always be last, but this\n // sort would put them first\n let patterns = [...config.patterns]\n .sort((p1, p2) => {\n let typeOrder =\n (p1.type === 'day' ? 1 : 0) - (p2.type === 'day' ? 1 : 0);\n let valOrder = p1.value - p2.value;\n\n if (typeOrder === 0) {\n return valOrder;\n }\n return typeOrder;\n })\n .filter(p => p.value !== -1);\n\n // Add on all -1 values to the end\n patterns = patterns.concat(config.patterns.filter(p => p.value === -1));\n\n desc += ' on the ';\n\n let strs = [];\n\n let uniqueDays = new Set(patterns.map(p => p.type));\n let isSameDay = uniqueDays.length === 1 && !uniqueDays.has('day');\n\n for (let pattern of patterns) {\n if (pattern.type === 'day') {\n if (pattern.value === -1) {\n strs.push('last day');\n } else {\n // Example: 15th day\n strs.push(makeNumberSuffix(pattern.value));\n }\n } else {\n let dayName = isSameDay ? '' : ' ' + prettyDayName(pattern.type);\n\n if (pattern.value === -1) {\n // Example: last Monday\n strs.push('last' + dayName);\n } else {\n // Example: 3rd Monday\n strs.push(makeNumberSuffix(pattern.value) + dayName);\n }\n }\n }\n\n if (strs.length > 2) {\n desc += strs.slice(0, strs.length - 1).join(', ');\n desc += ', and ';\n desc += strs[strs.length - 1];\n } else {\n desc += strs.join(' and ');\n }\n\n if (isSameDay) {\n desc += ' ' + prettyDayName(patterns[0].type);\n }\n } else {\n desc += ' on the ' + monthUtils.format(config.start, 'do');\n }\n\n return desc;\n }\n case 'yearly': {\n let desc = 'Every ';\n desc += interval !== 1 ? `${interval} years` : 'year';\n desc += ' on ' + monthUtils.format(config.start, 'LLL do');\n return desc;\n }\n default:\n return 'Recurring error';\n }\n}\n\nexport function recurConfigToRSchedule(config) {\n let base = {\n start: monthUtils.parseDate(config.start),\n frequency: config.frequency.toUpperCase(),\n byHourOfDay: [12]\n };\n\n if (config.interval) {\n base.interval = config.interval;\n }\n\n let abbrevDay = name => name.slice(0, 2).toUpperCase();\n\n switch (config.frequency) {\n case 'weekly':\n // Nothing to do\n return [base];\n case 'monthly':\n if (config.patterns && config.patterns.length > 0) {\n let days = config.patterns.filter(p => p.type === 'day');\n let dayNames = config.patterns.filter(p => p.type !== 'day');\n\n return [\n days.length > 0 && { ...base, byDayOfMonth: days.map(p => p.value) },\n dayNames.length > 0 && {\n ...base,\n byDayOfWeek: dayNames.map(p => [abbrevDay(p.type), p.value])\n }\n ].filter(Boolean);\n } else {\n // Nothing to do\n return [base];\n }\n case 'yearly':\n return [base];\n default:\n throw new Error('Invalid recurring date config');\n }\n}\n\nexport function extractScheduleConds(conditions) {\n return {\n payee:\n conditions.find(cond => cond.op === 'is' && cond.field === 'payee') ||\n conditions.find(\n cond => cond.op === 'is' && cond.field === 'description'\n ) ||\n null,\n account:\n conditions.find(cond => cond.op === 'is' && cond.field === 'account') ||\n conditions.find(cond => cond.op === 'is' && cond.field === 'acct') ||\n null,\n amount:\n conditions.find(\n cond =>\n (cond.op === 'is' ||\n cond.op === 'isapprox' ||\n cond.op === 'isbetween') &&\n cond.field === 'amount'\n ) || null,\n date:\n conditions.find(\n cond =>\n (cond.op === 'is' || cond.op === 'isapprox') && cond.field === 'date'\n ) || null\n };\n}\n\nexport function getScheduledAmount(amount) {\n if (amount && typeof amount !== 'number') {\n return ((amount.num1 + amount.num2) / 2) | 0;\n }\n return amount;\n}\n","const uuid = require('uuid');\n\nmodule.exports = {\n v4: function() {\n return Promise.resolve(uuid.v4());\n },\n\n v4Sync: function() {\n return uuid.v4();\n }\n};\n","export default {\n isMobile: false,\n isWeb: true,\n isDesktop: false\n};\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfDay from '../startOfDay/index.js'\n\nvar MILLISECONDS_IN_DAY = 86400000\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * var result = differenceInCalendarDays(\n * new Date(2011, 6, 2, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport default function differenceInCalendarDays(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var startOfDayLeft = startOfDay(dirtyDateLeft)\n var startOfDayRight = startOfDay(dirtyDateRight)\n\n var timestampLeft =\n startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft)\n var timestampRight =\n startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight)\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a day is not constant\n // (e.g. it's different in the day of the daylight saving time clock shift)\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added\n * @returns {Date} the new date with the days added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * var result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport default function addDays(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var amount = toInteger(dirtyAmount)\n date.setDate(date.getDate() + amount)\n return date\n}\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","function unresolveName(name) {\n let idx = name.indexOf('!');\n if (idx !== -1) {\n return {\n sheet: name.slice(0, idx),\n name: name.slice(idx + 1)\n };\n }\n return { sheet: null, name };\n}\n\nfunction resolveName(sheet, name) {\n return sheet + '!' + name;\n}\n\nfunction resolveNamesAsObjects(sheets) {\n const cells = {};\n Object.keys(sheets).forEach(sheetName => {\n const sheet = sheets[sheetName];\n\n Object.keys(sheet).forEach(name => {\n const expr = sheet[name];\n cells[resolveName(sheetName, name)] = expr;\n });\n });\n return cells;\n}\n\nfunction resolveNamesAsArrays(sheets) {\n const cells = [];\n Object.keys(sheets).forEach(sheetName => {\n const sheet = sheets[sheetName];\n\n sheet.forEach(name => {\n const expr = sheet[name];\n cells.push(resolveName(sheetName, name));\n });\n });\n return cells;\n}\n\nmodule.exports = {\n unresolveName,\n resolveName,\n resolveNamesAsObjects,\n resolveNamesAsArrays\n};\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * var result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMilliseconds(dirtyDate, -amount)\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var date = toDate(dirtyDate)\n var day = date.getUTCDay()\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n date.setUTCDate(date.getUTCDate() - diff)\n date.setUTCHours(0, 0, 0, 0)\n return date\n}\n","const { runHandler, isMutating } = require('../../../server/mutators');\nconst { sequential } = require('../../../shared/async');\nconst { captureException } = require('../../exceptions');\n\nfunction getGlobalObject() {\n let obj =\n typeof window !== 'undefined'\n ? window\n : typeof self !== 'undefined'\n ? self\n : null;\n if (!obj) {\n throw new Error('Cannot get global object');\n }\n return obj;\n}\n\ngetGlobalObject().__globalServerChannel = null;\n\nfunction coerceError(error) {\n if (error.type && error.type === 'APIError') {\n return error;\n }\n\n return { type: 'InternalError', message: error.message };\n}\n\nfunction init(serverChannel, handlers) {\n getGlobalObject().__globalServerChannel = serverChannel;\n\n // eslint-disable-next-line\n serverChannel.addEventListener(\n 'message',\n e => {\n let data = e.data;\n let msg = typeof data === 'string' ? JSON.parse(data) : data;\n\n if (msg.type && (msg.type === 'init' || msg.type.startsWith('__'))) {\n return;\n }\n\n let { id, name, args, undoTag, catchErrors } = msg;\n\n if (handlers[name]) {\n runHandler(handlers[name], args, { undoTag, name }).then(\n result => {\n if (catchErrors) {\n result = { data: result, error: null };\n }\n\n serverChannel.postMessage({\n type: 'reply',\n id,\n result,\n mutated: isMutating(handlers[name]),\n undoTag\n });\n },\n nativeError => {\n let error = coerceError(nativeError);\n\n if (name.startsWith('api/')) {\n // The API is newer and does automatically forward\n // errors\n serverChannel.postMessage({ type: 'reply', id, error });\n } else if (catchErrors) {\n serverChannel.postMessage({\n type: 'reply',\n id,\n result: { error, data: null }\n });\n } else {\n serverChannel.postMessage({ type: 'error', id });\n }\n\n // Only report internal errors\n if (error.type === 'InternalError') {\n captureException(nativeError);\n }\n\n if (!catchErrors) {\n // Notify the frontend that something bad happend\n send('server-error');\n }\n }\n );\n } else {\n console.warn('Unknown method: ' + name);\n serverChannel.postMessage({\n type: 'reply',\n id,\n result: null,\n error: { type: 'APIError', message: 'Unknown method: ' + name }\n });\n }\n },\n false\n );\n\n serverChannel.postMessage({ type: 'connect' });\n}\n\nfunction send(name, args) {\n if (getGlobalObject().__globalServerChannel) {\n getGlobalObject().__globalServerChannel.postMessage({\n type: 'push',\n name,\n args\n });\n }\n}\n\nfunction getNumClients() {\n return 1;\n}\n\nfunction tapIntoAPI() {}\n\nmodule.exports = { init, send, getNumClients, tapIntoAPI };\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * var result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var timestamp = toDate(dirtyDate).getTime()\n var amount = toInteger(dirtyAmount)\n return new Date(timestamp + amount)\n}\n","import mitt from 'mitt';\nimport { captureException } from '../platform/exceptions';\n\n// This is a simple helper abstraction for defining methods exposed to\n// the client. It doesn't do much, but checks for naming conflicts and\n// makes it cleaner to combine methods. We call a group of related\n// methods an \"app\".\n\nclass App {\n constructor() {\n this.handlers = {};\n this.services = [];\n this.events = mitt();\n this.unlistenServices = [];\n }\n\n method(name, func) {\n if (this.handlers[name] != null) {\n throw new Error(\n 'Conflicting method name, names must be globally unique: ' + name\n );\n }\n this.handlers[name] = func;\n }\n\n service(func) {\n this.services.push(func);\n }\n\n combine(...apps) {\n for (let app of apps) {\n Object.keys(app.handlers).forEach(name => {\n this.method(name, app.handlers[name]);\n });\n\n app.services.forEach(service => {\n this.service(service);\n });\n\n for (let [name, listeners] of app.events.all.entries()) {\n for (let listener of listeners) {\n this.events.on(name, listener);\n }\n }\n }\n }\n\n startServices() {\n if (this.unlistenServices.length > 0) {\n captureException(\n new Error(\n 'App: startServices called while services are already running'\n )\n );\n }\n this.unlistenServices = this.services.map(service => service());\n }\n\n stopServices() {\n this.unlistenServices.forEach(unlisten => {\n if (unlisten) {\n unlisten();\n }\n });\n this.unlistenServices = [];\n }\n}\n\nexport function createApp() {\n return new App();\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getDaysInMonth from '../getDaysInMonth/index.js'\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * var result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\nexport default function addMonths(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var amount = toInteger(dirtyAmount)\n var desiredMonth = date.getMonth() + amount\n var dateWithDesiredMonth = new Date(0)\n dateWithDesiredMonth.setFullYear(date.getFullYear(), desiredMonth, 1)\n dateWithDesiredMonth.setHours(0, 0, 0, 0)\n var daysInMonth = getDaysInMonth(dateWithDesiredMonth)\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n date.setMonth(desiredMonth, Math.min(daysInMonth, date.getDate()))\n return date\n}\n","let _uid = 0;\nfunction resetUid() {\n _uid = 0;\n}\n\nfunction uid(tableName) {\n _uid++;\n return tableName + _uid;\n}\n\nclass CompileError extends Error {}\n\nfunction nativeDateToInt(date) {\n let pad = x => (x < 10 ? '0' : '') + x;\n return date.getFullYear() + pad(date.getMonth() + 1) + pad(date.getDate());\n}\n\nfunction dateToInt(date) {\n return parseInt(date.replace(/-/g, ''));\n}\n\nexport function addTombstone(schema, tableName, tableId, whereStr) {\n let hasTombstone = schema[tableName].tombstone != null;\n return hasTombstone ? `${whereStr} AND ${tableId}.tombstone = 0` : whereStr;\n}\n\nfunction popPath(path) {\n let parts = path.split('.');\n return { path: parts.slice(0, -1).join('.'), field: parts[parts.length - 1] };\n}\n\nfunction isKeyword(str) {\n return str === 'group';\n}\n\nexport function quoteAlias(alias) {\n return alias.indexOf('.') === -1 && !isKeyword(alias) ? alias : `\"${alias}\"`;\n}\n\nfunction typed(value, type, { literal = false } = {}) {\n return { value, type, literal };\n}\n\nfunction getFieldDescription(schema, tableName, field) {\n if (schema[tableName] == null) {\n throw new CompileError(`Table \"${tableName}\" does not exist in the schema`);\n }\n\n let fieldDesc = schema[tableName][field];\n if (fieldDesc == null) {\n throw new CompileError(\n `Field \"${field}\" does not exist in table \"${tableName}\"`\n );\n }\n return fieldDesc;\n}\n\nfunction makePath(state, path) {\n let { schema, paths } = state;\n\n let parts = path.split('.');\n if (parts.length < 2) {\n throw new CompileError('Invalid path: ' + path);\n }\n\n let initialTable = parts[0];\n\n let tableName = parts.slice(1).reduce((tableName, field) => {\n let table = schema[tableName];\n\n if (table == null) {\n throw new CompileError(`Path error: ${tableName} table does not exist`);\n }\n\n if (!table[field] || table[field].ref == null) {\n throw new CompileError(\n `Field not joinable on table ${tableName}: \"${field}\"`\n );\n }\n\n return table[field].ref;\n }, initialTable);\n\n let joinTable;\n let parentParts = parts.slice(0, -1);\n if (parentParts.length === 1) {\n joinTable = parentParts[0];\n } else {\n let parentPath = parentParts.join('.');\n let parentDesc = paths.get(parentPath);\n if (!parentDesc) {\n throw new CompileError('Path does not exist: ' + parentPath);\n }\n joinTable = parentDesc.tableId;\n }\n\n return {\n tableName: tableName,\n tableId: uid(tableName),\n joinField: parts[parts.length - 1],\n joinTable\n };\n}\n\nfunction resolvePath(state, path) {\n let paths = path.split('.');\n let tableId;\n\n paths = paths.reduce(\n (acc, name) => {\n let fullName = acc.context + '.' + name;\n return {\n context: fullName,\n path: [...acc.path, fullName]\n };\n },\n { context: state.implicitTableName, path: [] }\n ).path;\n\n paths.forEach(path => {\n if (!state.paths.get(path)) {\n state.paths.set(path, makePath(state, path));\n }\n });\n\n let pathInfo = state.paths.get(paths[paths.length - 1]);\n return pathInfo;\n}\n\nfunction transformField(state, name) {\n if (typeof name !== 'string') {\n throw new CompileError('Invalid field name, must be a string');\n }\n\n let { path, field } = popPath(name);\n\n let pathInfo;\n if (path === '') {\n pathInfo = {\n tableName: state.implicitTableName,\n tableId: state.implicitTableId\n };\n } else {\n pathInfo = resolvePath(state, path);\n }\n\n let fieldDesc = getFieldDescription(state.schema, pathInfo.tableName, field);\n\n // If this is a field that references an item in another table, that\n // item could have been deleted. If that's the case, we want to\n // return `null` instead of an id pointing to a deleted item. This\n // converts an id reference into a path that pulls the id through a\n // table join which will filter out dead items, resulting in a\n // `null` id if the item is deleted\n if (\n state.validateRefs &&\n fieldDesc.ref &&\n fieldDesc.type === 'id' &&\n field !== 'id'\n ) {\n let refPath = state.implicitTableName + '.' + name;\n let refPathInfo = state.paths.get(refPath);\n\n if (!refPathInfo) {\n refPathInfo = makePath(state, refPath);\n refPathInfo.noMapping = true;\n state.paths.set(refPath, refPathInfo);\n }\n\n field = 'id';\n pathInfo = refPathInfo;\n }\n\n let fieldStr = pathInfo.tableId + '.' + field;\n return typed(fieldStr, fieldDesc.type);\n}\n\nfunction parseDate(str) {\n let m = str.match(/^(\\d{4}-\\d{2}-\\d{2})$/);\n if (m) {\n return typed(dateToInt(m[1]), 'date', { literal: true });\n }\n return null;\n}\n\nfunction parseMonth(str) {\n let m = str.match(/^(\\d{4}-\\d{2})$/);\n if (m) {\n return typed(dateToInt(m[1]), 'date', { literal: true });\n }\n return null;\n}\n\nfunction parseYear(str) {\n let m = str.match(/^(\\d{4})$/);\n if (m) {\n return typed(dateToInt(m[1]), 'date', { literal: true });\n }\n return null;\n}\n\nfunction badDateFormat(str, type) {\n throw new CompileError(`Bad ${type} format: ${str}`);\n}\n\nfunction inferParam(param, type) {\n let existingType = param.paramType;\n if (existingType) {\n let casts = {\n date: ['string'],\n 'date-month': ['date'],\n 'date-year': ['date', 'date-month'],\n id: ['string'],\n float: ['integer']\n };\n\n if (\n existingType !== type &&\n (!casts[type] || !casts[type].includes(existingType))\n ) {\n throw new Error(\n `Parameter \"${name}\" can't convert to ${type} (already inferred as ${existingType})`\n );\n }\n } else {\n param.paramType = type;\n }\n}\n\nfunction castInput(state, expr, type) {\n if (expr.type === type) {\n return expr;\n } else if (expr.type === 'param') {\n inferParam(expr, type);\n return typed(expr.value, type);\n } else if (expr.type === 'null') {\n if (!expr.literal) {\n throw new CompileError(\"A non-literal null doesn't make sense\");\n }\n\n if (type === 'boolean') {\n return typed(0, 'boolean', { literal: true });\n }\n return expr;\n }\n\n // These are all things that can be safely casted automatically\n if (type === 'date') {\n if (expr.type === 'string') {\n if (expr.literal) {\n return parseDate(expr.value) || badDateFormat(expr.value, 'date');\n } else {\n throw new CompileError(\n 'Casting string fields to dates is not supported'\n );\n }\n }\n\n throw new CompileError(`Can't cast ${expr.type} to date`);\n } else if (type === 'date-month') {\n let expr2;\n if (expr.type === 'date') {\n expr2 = expr;\n } else if (expr.type === 'string' || expr.type === 'any') {\n expr2 =\n parseMonth(expr.value) ||\n parseDate(expr.value) ||\n badDateFormat(expr.value, 'date-month');\n } else {\n throw new CompileError(`Can't cast ${expr.type} to date-month`);\n }\n\n if (expr2.literal) {\n return typed(\n dateToInt(expr2.value.toString().slice(0, 6)),\n 'date-month',\n { literal: true }\n );\n } else {\n return typed(\n `CAST(SUBSTR(${expr2.value}, 1, 6) AS integer)`,\n 'date-month'\n );\n }\n } else if (type === 'date-year') {\n let expr2;\n if (expr.type === 'date' || expr.type === 'date-month') {\n expr2 = expr;\n } else if (expr.type === 'string') {\n expr2 =\n parseYear(expr.value) ||\n parseMonth(expr.value) ||\n parseDate(expr.value) ||\n badDateFormat(expr.value, 'date-year');\n } else {\n throw new CompileError(`Can't cast ${expr.type} to date-year`);\n }\n\n if (expr2.literal) {\n return typed(dateToInt(expr2.value.toString().slice(0, 4)), 'date-year', {\n literal: true\n });\n } else {\n return typed(\n `CAST(SUBSTR(${expr2.value}, 1, 4) AS integer)`,\n 'date-year'\n );\n }\n } else if (type === 'id') {\n if (expr.type === 'string') {\n return typed(expr.value, 'id', { literal: expr.literal });\n }\n } else if (type === 'float') {\n if (expr.type === 'integer') {\n return typed(expr.value, 'float', { literal: expr.literal });\n }\n }\n\n if (expr.type === 'any') {\n return typed(expr.value, type, { literal: expr.literal });\n }\n\n throw new CompileError(`Can't convert ${expr.type} to ${type}`);\n}\n\n// TODO: remove state from these functions\nfunction val(state, expr, type) {\n let castedExpr = expr;\n\n // Cast the type if necessary\n if (type) {\n castedExpr = castInput(state, expr, type);\n }\n\n if (castedExpr.literal) {\n if (castedExpr.type === 'id') {\n return `'${castedExpr.value}'`;\n } else if (castedExpr.type === 'string') {\n // Escape quotes\n let value = castedExpr.value.replace(/'/g, \"''\");\n return `'${value}'`;\n }\n }\n\n return castedExpr.value;\n}\n\nfunction valArray(state, arr, types) {\n return arr.map((value, idx) => val(state, value, types ? types[idx] : null));\n}\n\nfunction validateArgLength(arr, min, max) {\n if (max == null) {\n max = min;\n }\n\n if (min != null && arr.length < min) {\n throw new CompileError('Too few arguments');\n }\n if (max != null && arr.length > max) {\n throw new CompileError('Too many arguments');\n }\n}\n\n//// Nice errors\n\nfunction saveStack(type, func) {\n return (state, ...args) => {\n if (state == null || state.compileStack == null) {\n throw new CompileError(\n 'This function cannot track error data. ' +\n 'It needs to accept the compiler state as the first argument.'\n );\n }\n\n state.compileStack.push({ type, args });\n let ret = func(state, ...args);\n state.compileStack.pop();\n return ret;\n };\n}\n\nfunction prettyValue(value) {\n if (typeof value === 'string') {\n return value;\n } else if (value === undefined) {\n return 'undefined';\n }\n\n let str = JSON.stringify(value);\n if (str.length > 70) {\n let expanded = JSON.stringify(value, null, 2);\n return expanded.split('\\n').join('\\n ');\n }\n return str;\n}\n\nfunction getCompileError(error, stack) {\n if (stack.length === 0) {\n return error;\n }\n\n let stackStr = stack\n .slice(1)\n .reverse()\n .map(entry => {\n switch (entry.type) {\n case 'expr':\n case 'function':\n return prettyValue(entry.args[0]);\n case 'op': {\n let [fieldRef, opData] = entry.args;\n return prettyValue({ [fieldRef]: opData });\n }\n case 'value':\n return prettyValue(entry.value);\n default:\n return '';\n }\n })\n .map(str => '\\n ' + str)\n .join('');\n\n const rootMethod = stack[0].type;\n const methodArgs = stack[0].args[0];\n stackStr += `\\n ${rootMethod}(${prettyValue(\n methodArgs.length === 1 ? methodArgs[0] : methodArgs\n )})`;\n\n // In production, hide internal stack traces\n if (process.env.NODE_ENV === 'production') {\n const err = new CompileError();\n err.message = `${error.message}\\n\\nExpression stack:` + stackStr;\n err.stack = null;\n return err;\n }\n\n error.message = `${error.message}\\n\\nExpression stack:` + stackStr;\n return error;\n}\n\n//// Compiler\n\nfunction compileLiteral(value) {\n if (value === undefined) {\n throw new CompileError('`undefined` is not a valid query value');\n } else if (value === null) {\n return typed('NULL', 'null', { literal: true });\n } else if (value instanceof Date) {\n return typed(nativeDateToInt(value), 'date', { literal: true });\n } else if (typeof value === 'string') {\n // Allow user to escape $, and quote the string to make it a\n // string literal in the output\n value = value.replace(/\\\\\\$/g, '$');\n return typed(value, 'string', { literal: true });\n } else if (typeof value === 'boolean') {\n return typed(value ? 1 : 0, 'boolean', { literal: true });\n } else if (typeof value === 'number') {\n return typed(value, (value | 0) === value ? 'integer' : 'float', {\n literal: true\n });\n } else if (Array.isArray(value)) {\n return typed(value, 'array', { literal: true });\n } else {\n throw new CompileError(\n 'Unsupported type of expression: ' + JSON.stringify(value)\n );\n }\n}\n\nconst compileExpr = saveStack('expr', (state, expr) => {\n if (typeof expr === 'string') {\n // Field reference\n if (expr[0] === '$') {\n let fieldRef = expr === '$' ? state.implicitField : expr.slice(1);\n\n if (fieldRef == null || fieldRef === '') {\n throw new CompileError('Invalid field reference: ' + expr);\n }\n\n return transformField(state, fieldRef);\n }\n\n // Named parameter\n if (expr[0] === ':') {\n let param = { value: '?', type: 'param', paramName: expr.slice(1) };\n state.namedParameters.push(param);\n return param;\n }\n }\n\n if (expr !== null) {\n if (Array.isArray(expr)) {\n return compileLiteral(expr);\n } else if (\n typeof expr === 'object' &&\n Object.keys(expr).find(k => k[0] === '$')\n ) {\n // It's a function call\n return compileFunction(state, expr);\n }\n }\n\n return compileLiteral(expr);\n});\n\nfunction assertType(name, data, acceptedTypes) {\n if (acceptedTypes.indexOf(data.type) === -1) {\n throw new CompileError(\n `Invalid type of expression to ${name}, must be one of ${JSON.stringify(\n acceptedTypes\n )}: ${JSON.stringify(data.value)}`\n );\n }\n}\n\nfunction assertArgLength(name, args, len) {\n if (args.length !== len) {\n throw new CompileError(\n `Invalid number of args to ${name}: expected ${len} but received ${args.length}`\n )();\n }\n}\n\nconst compileFunction = saveStack('function', (state, func) => {\n let [name] = Object.keys(func);\n let argExprs = func[name];\n if (!Array.isArray(argExprs)) {\n argExprs = [argExprs];\n }\n\n if (name[0] !== '$') {\n throw new CompileError(\n `Unknown property \"${name}\". Did you mean to call a function? Try prefixing it with $`\n );\n }\n\n let args = argExprs;\n // `$condition` is a special-case where it will be evaluated later\n if (name !== '$condition') {\n args = argExprs.map(arg => compileExpr(state, arg));\n }\n\n switch (name) {\n // aggregate functions\n case '$sum': {\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args, ['float']);\n return typed(`SUM(${arg1})`, args[0].type);\n }\n\n case '$sumOver': {\n let [arg1] = valArray(state, args, ['float']);\n let order = state.orders\n ? 'ORDER BY ' + compileOrderBy(state, state.orders)\n : '';\n\n return typed(\n `(SUM(${arg1}) OVER (${order} ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING))`,\n args[0].type\n );\n }\n\n case '$count': {\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args);\n return typed(`COUNT(${arg1})`, 'integer');\n }\n\n // string functions\n case '$substr': {\n validateArgLength(args, 2, 3);\n let [arg1, arg2, arg3] = valArray(state, args, [\n 'string',\n 'integer',\n 'integer'\n ]);\n return typed(`SUBSTR(${arg1}, ${arg2}, ${arg3})`, 'string');\n }\n case '$lower': {\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args, ['string']);\n return typed(`LOWER(${arg1})`, 'string');\n }\n\n // integer/float functions\n case '$neg': {\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args, ['float']);\n return typed(`(-${val(state, args[0])})`, args[0].type);\n }\n case '$abs': {\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args, ['float']);\n return typed(`ABS(${val(state, args[0])})`, args[0].type);\n }\n case '$idiv': {\n validateArgLength(args, 2);\n let [arg1, arg2] = valArray(state, args, ['integer', 'integer']);\n return typed(\n `(${val(state, args[0])} / ${val(state, args[1])})`,\n args[0].type\n );\n }\n\n // date functions\n case '$month': {\n validateArgLength(args, 1);\n return castInput(state, args[0], 'date-month');\n }\n case '$year': {\n validateArgLength(args, 1);\n return castInput(state, args[0], 'date-year');\n }\n\n // various functions\n case '$condition':\n validateArgLength(args, 1);\n let conds = compileConditions(state, args[0]);\n return typed(conds.join(' AND '), 'boolean');\n\n case '$nocase':\n validateArgLength(args, 1);\n let [arg1] = valArray(state, args, ['string']);\n return typed(`${arg1} COLLATE NOCASE`, args[0].type);\n\n case '$literal': {\n validateArgLength(args, 1);\n if (!args[0].literal) {\n throw new CompileError('Literal not passed to $literal');\n }\n return args[0];\n }\n default:\n throw new CompileError(`Unknown function: ${name}`);\n }\n});\n\nconst compileOp = saveStack('op', (state, fieldRef, opData) => {\n let { $transform, ...opExpr } = opData;\n let [op] = Object.keys(opExpr);\n\n let rhs = compileExpr(state, opData[op]);\n\n let lhs;\n if ($transform) {\n lhs = compileFunction(\n { ...state, implicitField: fieldRef },\n typeof $transform === 'string' ? { [$transform]: '$' } : $transform\n );\n } else {\n lhs = compileExpr(state, '$' + fieldRef);\n }\n\n switch (op) {\n case '$gte': {\n let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n return `${left} >= ${right}`;\n }\n case '$lte': {\n let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n return `${left} <= ${right}`;\n }\n case '$gt': {\n let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n return `${left} > ${right}`;\n }\n case '$lt': {\n let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n return `${left} < ${right}`;\n }\n case '$eq': {\n if (castInput(state, rhs, lhs.type).type === 'null') {\n return `${val(state, lhs)} IS NULL`;\n }\n\n let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n\n if (rhs.type === 'param') {\n let orders = state.namedParameters.map(param => {\n return param === rhs || param === lhs ? [param, { ...param }] : param;\n });\n state.namedParameters = [].concat.apply([], orders);\n\n return `CASE\n WHEN ${left} IS NULL THEN ${right} IS NULL\n ELSE ${left} = ${right}\n END`;\n }\n\n return `${left} = ${right}`;\n }\n case '$oneof': {\n let [left, right] = valArray(state, [lhs, rhs], [null, 'array']);\n // Dedupe the ids\n let ids = [...new Set(right)];\n return `${left} IN (` + ids.map(id => `'${id}'`).join(',') + ')';\n }\n case '$like': {\n let [left, right] = valArray(state, [lhs, rhs], ['string', 'string']);\n return `${left} LIKE ${right}`;\n }\n default:\n throw new CompileError(`Unknown operator: ${op}`);\n }\n});\n\nfunction compileConditions(state, conds) {\n if (!Array.isArray(conds)) {\n // Convert the object form `{foo: 1, bar:2}` into the array form\n // `[{foo: 1}, {bar:2}]`\n conds = Object.entries(conds).map(cond => {\n return { [cond[0]]: cond[1] };\n });\n }\n\n return conds.filter(Boolean).reduce((res, condsObj) => {\n let compiled = Object.entries(condsObj)\n .map(([field, cond]) => {\n // Allow a falsy value in the lhs of $and and $or to allow for\n // quick forms like `$or: amount != 0 && ...`\n if (field === '$and') {\n if (!cond) {\n return null;\n }\n return compileAnd(state, cond);\n } else if (field === '$or') {\n if (!cond) {\n return null;\n }\n return compileOr(state, cond);\n }\n\n if (\n typeof cond === 'string' ||\n typeof cond === 'number' ||\n typeof cond === 'boolean' ||\n cond instanceof Date ||\n cond == null\n ) {\n return compileOp(state, field, { $eq: cond });\n }\n\n if (Array.isArray(cond)) {\n // An array of conditions for a field is implicitly an `and`\n return cond.map(c => compileOp(state, field, c)).join(' AND ');\n }\n return compileOp(state, field, cond);\n })\n .filter(Boolean);\n\n return [...res, ...compiled];\n }, []);\n}\n\nfunction compileOr(state, conds) {\n // Same as above\n if (!conds) {\n return '0';\n }\n let res = compileConditions(state, conds);\n if (res.length === 0) {\n return '0';\n }\n return '(' + res.join('\\n OR ') + ')';\n}\n\nfunction compileAnd(state, conds) {\n // Same as above\n if (!conds) {\n return '1';\n }\n let res = compileConditions(state, conds);\n if (res.length === 0) {\n return '1';\n }\n return '(' + res.join('\\n AND ') + ')';\n}\n\nconst compileWhere = saveStack('filter', (state, conds) => {\n return compileAnd(state, conds);\n});\n\nfunction compileJoins(state, tableRef, internalTableFilters) {\n let joins = [];\n state.paths.forEach((desc, path) => {\n let {\n tableName,\n tableId,\n joinField,\n joinTable,\n noMapping\n } = state.paths.get(path);\n\n let on = `${tableId}.id = ${tableRef(joinTable)}.${quoteAlias(joinField)}`;\n\n let filters = internalTableFilters(tableName);\n if (filters.length > 0) {\n on +=\n ' AND ' +\n compileAnd(\n { ...state, implicitTableName: tableName, implicitTableId: tableId },\n filters\n );\n }\n\n joins.push(\n `LEFT JOIN ${\n noMapping ? tableName : tableRef(tableName, true)\n } ${tableId} ON ${addTombstone(state.schema, tableName, tableId, on)}`\n );\n\n if (state.dependencies.indexOf(tableName) === -1) {\n state.dependencies.push(tableName);\n }\n });\n return joins.join('\\n');\n}\n\nfunction expandStar(state, expr) {\n let path;\n let pathInfo;\n if (expr === '*') {\n pathInfo = {\n tableName: state.implicitTableName,\n tableId: state.implicitTableId\n };\n } else if (expr.match(/\\.\\*$/)) {\n let result = popPath(expr);\n path = result.path;\n pathInfo = resolvePath(state, result.path);\n }\n\n let table = state.schema[pathInfo.tableName];\n if (table == null) {\n throw new Error(`Table \"${pathInfo.tableName}\" does not exist`);\n }\n\n return Object.keys(table).map(field => (path ? `${path}.${field}` : field));\n}\n\nconst compileSelect = saveStack(\n 'select',\n (state, exprs, isAggregate, orders) => {\n // Always include the id if it's not an aggregate\n if (!isAggregate && !exprs.includes('id') && !exprs.includes('*')) {\n exprs = exprs.concat(['id']);\n }\n\n let select = exprs.map(expr => {\n if (typeof expr === 'string') {\n if (expr.indexOf('*') !== -1) {\n let fields = expandStar(state, expr);\n\n return fields\n .map(field => {\n let compiled = compileExpr(state, '$' + field);\n state.outputTypes.set(field, compiled.type);\n return compiled.value + ' AS ' + quoteAlias(field);\n })\n .join(', ');\n }\n\n let compiled = compileExpr(state, '$' + expr);\n state.outputTypes.set(expr, compiled.type);\n return compiled.value + ' AS ' + quoteAlias(expr);\n }\n\n let [name, value] = Object.entries(expr)[0];\n if (name[0] === '$') {\n state.compileStack.push({ type: 'value', value: expr });\n throw new CompileError(\n `Invalid field \"${name}\", are you trying to select a function? You need to name the expression`\n );\n }\n\n if (typeof value === 'string') {\n let compiled = compileExpr(state, '$' + value);\n state.outputTypes.set(name, compiled.type);\n return `${compiled.value} AS ${quoteAlias(name)}`;\n }\n\n let compiled = compileFunction({ ...state, orders }, value);\n state.outputTypes.set(name, compiled.type);\n return compiled.value + ` AS ${quoteAlias(name)}`;\n });\n\n return select.join(', ');\n }\n);\n\nconst compileGroupBy = saveStack('groupBy', (state, exprs) => {\n let groupBy = exprs.map(expr => {\n if (typeof expr === 'string') {\n return compileExpr(state, '$' + expr).value;\n }\n\n return compileFunction(state, expr).value;\n });\n\n return groupBy.join(', ');\n});\n\nconst compileOrderBy = saveStack('orderBy', (state, exprs) => {\n let orderBy = exprs.map(expr => {\n let compiled;\n let dir = null;\n\n if (typeof expr === 'string') {\n compiled = compileExpr(state, '$' + expr).value;\n } else {\n let entries = Object.entries(expr);\n let entry = entries[0];\n\n // Check if this is a field reference\n if (entries.length === 1 && entry[0][0] !== '$') {\n dir = entry[1];\n compiled = compileExpr(state, '$' + entry[0]).value;\n } else {\n // Otherwise it's a function\n let { $dir, ...func } = expr;\n dir = $dir;\n compiled = compileFunction(state, func).value;\n }\n }\n\n if (dir != null) {\n if (dir !== 'desc' && dir !== 'asc') {\n throw new CompileError('Invalid order direction: ' + dir);\n }\n return `${compiled} ${dir}`;\n }\n return compiled;\n });\n\n return orderBy.join(', ');\n});\n\nlet AGGREGATE_FUNCTIONS = ['$sum', '$count'];\nfunction isAggregateFunction(expr) {\n if (typeof expr !== 'object' || Array.isArray(expr)) {\n return false;\n }\n\n let [name, argExprs] = Object.entries(expr)[0];\n if (!Array.isArray(argExprs)) {\n argExprs = [argExprs];\n }\n\n if (AGGREGATE_FUNCTIONS.indexOf(name) !== -1) {\n return true;\n }\n\n return argExprs.find(ex => isAggregateFunction(ex));\n}\n\nexport function isAggregateQuery(queryState) {\n // it's aggregate if:\n // either an aggregate function is used in `select`\n // or a `groupBy` exists\n\n if (queryState.groupExpressions.length > 0) {\n return true;\n }\n\n return queryState.selectExpressions.find(expr => {\n if (typeof expr !== 'string') {\n let [name, value] = Object.entries(expr)[0];\n return isAggregateFunction(value);\n }\n return false;\n });\n}\n\nexport function compileQuery(queryState, schema, schemaConfig = {}) {\n let { withDead, validateRefs = true, tableOptions, rawMode } = queryState;\n\n let {\n tableViews = {},\n tableFilters = name => [],\n customizeQuery = queryState => queryState\n } = schemaConfig;\n\n let internalTableFilters = name => {\n let filters = tableFilters(name);\n // These filters cannot join tables and must be simple strings\n for (let filter of filters) {\n if (Array.isArray(filter)) {\n throw new CompileError(\n 'Invalid internal table filter: only object filters are supported'\n );\n }\n if (Object.keys(filter)[0].indexOf('.') !== -1) {\n throw new CompileError(\n 'Invalid internal table filter: field names cannot contain paths'\n );\n }\n }\n return filters;\n };\n\n let tableRef = (name, isJoin) => {\n let view =\n typeof tableViews === 'function'\n ? tableViews(name, { withDead, isJoin, tableOptions })\n : tableViews[name];\n return view || name;\n };\n\n let tableName = queryState.table;\n\n let {\n filterExpressions,\n selectExpressions,\n groupExpressions,\n orderExpressions,\n limit,\n offset,\n calculation\n } = customizeQuery(queryState);\n\n let select = '';\n let where = '';\n let joins = '';\n let groupBy = '';\n let orderBy = '';\n let dependences = [];\n let state = {\n schema,\n implicitTableName: tableName,\n implicitTableId: tableRef(tableName),\n paths: new Map(),\n dependencies: [tableName],\n compileStack: [],\n outputTypes: new Map(),\n validateRefs,\n namedParameters: []\n };\n\n resetUid();\n\n try {\n select = compileSelect(\n state,\n selectExpressions,\n isAggregateQuery(queryState),\n orderExpressions\n );\n\n if (filterExpressions.length > 0) {\n let result = compileWhere(state, filterExpressions);\n where = 'WHERE ' + result;\n } else {\n where = 'WHERE 1';\n }\n\n if (!rawMode) {\n let filters = internalTableFilters(tableName);\n if (filters.length > 0) {\n where += ' AND ' + compileAnd(state, filters);\n }\n }\n\n if (groupExpressions.length > 0) {\n let result = compileGroupBy(state, groupExpressions);\n groupBy = 'GROUP BY ' + result;\n }\n\n // Orders don't matter if doing a single calculation\n if (orderExpressions.length > 0) {\n let result = compileOrderBy(state, orderExpressions);\n orderBy = 'ORDER BY ' + result;\n }\n\n if (state.paths.size > 0) {\n joins = compileJoins(state, tableRef, internalTableFilters);\n }\n } catch (e) {\n if (e instanceof CompileError) {\n throw getCompileError(e, state.compileStack);\n }\n\n throw e;\n }\n\n let sqlPieces = {\n select,\n from: tableRef(tableName),\n joins,\n where,\n groupBy,\n orderBy,\n limit,\n offset\n };\n\n return {\n sqlPieces,\n state\n };\n}\n\nexport function defaultConstructQuery(queryState, state, sqlPieces) {\n let s = sqlPieces;\n\n let where = queryState.withDead\n ? s.where\n : addTombstone(\n state.schema,\n state.implicitTableName,\n state.implicitTableId,\n s.where\n );\n\n return `\n SELECT ${s.select} FROM ${s.from}\n ${s.joins}\n ${where}\n ${s.groupBy}\n ${s.orderBy}\n ${s.limit != null ? `LIMIT ${s.limit}` : ''}\n ${s.offset != null ? `OFFSET ${s.offset}` : ''}\n `;\n}\n\nexport function generateSQLWithState(queryState, schema, schemaConfig) {\n let { sqlPieces, state } = compileQuery(queryState, schema, schemaConfig);\n return { sql: defaultConstructQuery(queryState, state, sqlPieces), state };\n}\n\nexport function generateSQL(queryState) {\n return generateSQLWithState(queryState).sql;\n}\n","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n\n halfAMinute: 'half a minute',\n\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n}\n\nexport default function formatDistance (token, count, options) {\n options = options || {}\n\n var result\n if (typeof formatDistanceLocale[token] === 'string') {\n result = formatDistanceLocale[token]\n } else if (count === 1) {\n result = formatDistanceLocale[token].one\n } else {\n result = formatDistanceLocale[token].other.replace('{{count}}', count)\n }\n\n if (options.addSuffix) {\n if (options.comparison > 0) {\n return 'in ' + result\n } else {\n return result + ' ago'\n }\n }\n\n return result\n}\n","export default function buildFormatLongFn (args) {\n return function (dirtyOptions) {\n var options = dirtyOptions || {}\n var width = options.width ? String(options.width) : args.defaultWidth\n var format = args.formats[width] || args.formats[args.defaultWidth]\n return format\n }\n}\n","import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'\n\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n}\n\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n}\n\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n}\n\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n}\n\nexport default formatLong\n","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n}\n\nexport default function formatRelative (token, date, baseDate, options) {\n return formatRelativeLocale[token]\n}\n","export default function buildLocalizeFn (args) {\n return function (dirtyIndex, dirtyOptions) {\n var options = dirtyOptions || {}\n var width = options.width ? String(options.width) : args.defaultWidth\n var context = options.context ? String(options.context) : 'standalone'\n\n var valuesArray\n if (context === 'formatting' && args.formattingValues) {\n valuesArray = args.formattingValues[width] || args.formattingValues[args.defaultFormattingWidth]\n } else {\n valuesArray = args.values[width] || args.values[args.defaultWidth]\n }\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex\n return valuesArray[index]\n }\n}\n","export default function buildMatchFn (args) {\n return function (dirtyString, dirtyOptions) {\n var string = String(dirtyString)\n var options = dirtyOptions || {}\n var width = options.width\n\n var matchPattern = (width && args.matchPatterns[width]) || args.matchPatterns[args.defaultMatchWidth]\n var matchResult = string.match(matchPattern)\n\n if (!matchResult) {\n return null\n }\n var matchedString = matchResult[0]\n\n var parsePatterns = (width && args.parsePatterns[width]) || args.parsePatterns[args.defaultParseWidth]\n\n var value\n if (Object.prototype.toString.call(parsePatterns) === '[object Array]') {\n value = parsePatterns.findIndex(function (pattern) {\n return pattern.test(string)\n })\n } else {\n value = findKey(parsePatterns, function (pattern) {\n return pattern.test(string)\n })\n }\n\n value = args.valueCallback ? args.valueCallback(value) : value\n value = options.valueCallback ? options.valueCallback(value) : value\n\n return {\n value: value,\n rest: string.slice(matchedString.length)\n }\n }\n}\n\nfunction findKey (object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key\n }\n }\n}\n","import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index.js'\nimport buildMatchFn from '../../../_lib/buildMatchFn/index.js'\n\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i\nvar parseOrdinalNumberPattern = /\\d+/i\n\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n}\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n}\n\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n}\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n}\n\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n}\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n}\n\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n}\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n}\n\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n}\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n}\n\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10)\n }\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function (index) {\n return index + 1\n }\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n}\n\nexport default match\n","export default function buildMatchPatternFn (args) {\n return function (dirtyString, dirtyOptions) {\n var string = String(dirtyString)\n var options = dirtyOptions || {}\n\n var matchResult = string.match(args.matchPattern)\n if (!matchResult) {\n return null\n }\n var matchedString = matchResult[0]\n\n var parseResult = string.match(args.parsePattern)\n if (!parseResult) {\n return null\n }\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]\n value = options.valueCallback ? options.valueCallback(value) : value\n\n return {\n value: value,\n rest: string.slice(matchedString.length)\n }\n }\n}\n","import formatDistance from './_lib/formatDistance/index.js'\nimport formatLong from './_lib/formatLong/index.js'\nimport formatRelative from './_lib/formatRelative/index.js'\nimport localize from './_lib/localize/index.js'\nimport match from './_lib/match/index.js'\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1\n }\n}\n\nexport default locale\n","import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'\n\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n}\n\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n}\n\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n}\n\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n}\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n}\n\nfunction ordinalNumber (dirtyNumber, dirtyOptions) {\n var number = Number(dirtyNumber)\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`:\n //\n // var options = dirtyOptions || {}\n // var unit = String(options.unit)\n //\n // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'\n\n var rem100 = number % 100\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st'\n case 2:\n return number + 'nd'\n case 3:\n return number + 'rd'\n }\n }\n return number + 'th'\n}\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function (quarter) {\n return Number(quarter) - 1\n }\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n}\n\nexport default localize\n","import toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var weekStartsOn = 1\n\n var date = toDate(dirtyDate)\n var day = date.getUTCDay()\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n date.setUTCDate(date.getUTCDate() - diff)\n date.setUTCHours(0, 0, 0, 0)\n return date\n}\n","import { number } from '../spreadsheet/globals';\n\nexport { number } from '../spreadsheet/globals';\n\nexport function sumAmounts(...amounts) {\n return amounts.reduce((total, amount) => {\n return total + number(amount);\n }, 0);\n}\n\nexport function flatten2(arr) {\n return Array.prototype.concat.apply([], arr);\n}\n\nexport function unflatten2(arr) {\n let res = [];\n for (let i = 0; i < arr.length; i += 2) {\n res.push([arr[i], arr[i + 1]]);\n }\n return res;\n}\n\n","import * as sheet from '../sheet';\nimport * as monthUtils from '../../shared/months';\nimport { number, sumAmounts } from './util';\nconst { resolveName } = require('../spreadsheet/util');\n\nexport async function createCategory(cat, sheetName, prevSheetName) {\n sheet.get().createStatic(sheetName, `budget-${cat.id}`, 0);\n\n // This makes the app more robust by \"fixing up\" null budget values.\n // Those should not be allowed, but in case somehow a null value\n // ends up there, we are resilient to it. Preferrably the\n // spreadsheet would have types and be more strict about what is\n // allowed to be set.\n if (sheet.get().getCellValue(sheetName, `budget-${cat.id}`) == null) {\n sheet.get().set(resolveName(sheetName, `budget-${cat.id}`), 0);\n }\n\n sheet.get().createDynamic(sheetName, `leftover-${cat.id}`, {\n initialValue: 0,\n dependencies: [\n `budget-${cat.id}`,\n `sum-amount-${cat.id}`,\n `${prevSheetName}!carryover-${cat.id}`,\n `${prevSheetName}!leftover-${cat.id}`\n ],\n run: (budgeted, sumAmount, prevCarryover, prevLeftover) => {\n if (cat.is_income) {\n return (\n number(budgeted) -\n number(sumAmount) +\n (prevCarryover ? number(prevLeftover) : 0)\n );\n }\n\n return (\n number(budgeted) +\n number(sumAmount) +\n (prevCarryover ? number(prevLeftover) : 0)\n );\n }\n });\n sheet.get().createDynamic(sheetName, `spent-with-carryover-${cat.id}`, {\n initialValue: 0,\n dependencies: [\n `budget-${cat.id}`,\n `sum-amount-${cat.id}`,\n `carryover-${cat.id}`\n ],\n // TODO: Why refresh??\n refresh: true,\n run: (budgeted, sumAmount, carryover) => {\n return carryover\n ? Math.max(0, number(budgeted) + number(sumAmount))\n : sumAmount;\n }\n });\n\n sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n}\n\nexport function createSummary(groups, categories, sheetName) {\n let incomeGroup = groups.filter(group => group.is_income)[0];\n let expenseCategories = categories.filter(cat => !cat.is_income);\n\n sheet.get().createDynamic(sheetName, 'total-budgeted', {\n initialValue: 0,\n dependencies: groups\n .filter(group => !group.is_income)\n .map(group => `group-budget-${group.id}`),\n run: sumAmounts\n });\n\n sheet.get().createDynamic(sheetName, 'total-spent', {\n initialValue: 0,\n refresh: true,\n dependencies: expenseCategories.map(\n cat => `${sheetName}!spent-with-carryover-${cat.id}`\n ),\n run: sumAmounts\n });\n\n sheet.get().createDynamic(sheetName, 'total-income', {\n initialValue: 0,\n dependencies: [`group-sum-amount-${incomeGroup.id}`],\n run: amount => amount\n });\n\n sheet.get().createDynamic(sheetName, 'total-leftover', {\n initialValue: 0,\n dependencies: ['total-budgeted', 'total-spent'],\n run: sumAmounts\n });\n\n sheet.get().createDynamic(sheetName, 'total-budget-income', {\n initialValue: 0,\n dependencies: [`group-budget-${incomeGroup.id}`],\n run: amount => amount\n });\n\n sheet.get().createDynamic(sheetName, 'total-saved', {\n initialValue: 0,\n dependencies: ['total-budget-income', 'total-budgeted'],\n run: (income, budgeted) => {\n return income - budgeted;\n }\n });\n\n sheet.get().createDynamic(sheetName, 'real-saved', {\n initialValue: 0,\n dependencies: ['total-income', 'total-spent'],\n run: (income, spent) => {\n return income - -spent;\n }\n });\n}\n","import * as sheet from '../sheet';\nimport * as monthUtils from '../../shared/months';\nimport { number, sumAmounts, flatten2, unflatten2 } from './util';\nconst { resolveName } = require('../spreadsheet/util');\n\nfunction getBlankSheet(months) {\n let blankMonth = monthUtils.prevMonth(months[0]);\n return monthUtils.sheetForMonth(blankMonth, 'rollover');\n}\n\nexport function createBlankCategory(cat, months) {\n if (months.length > 0) {\n let sheetName = getBlankSheet(months);\n sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n sheet.get().createStatic(sheetName, `leftover-${cat.id}`, 0);\n sheet.get().createStatic(sheetName, `leftover-pos-${cat.id}`, 0);\n }\n}\n\nfunction createBlankMonth(categories, sheetName, months) {\n sheet.get().createStatic(sheetName, 'is-blank', true);\n sheet.get().createStatic(sheetName, 'to-budget', 0);\n sheet.get().createStatic(sheetName, 'buffered', 0);\n\n categories.forEach(cat => createBlankCategory(cat, months));\n}\n\nexport function createCategory(cat, sheetName, prevSheetName) {\n if (!cat.is_income) {\n sheet.get().createStatic(sheetName, `budget-${cat.id}`, 0);\n\n // This makes the app more robust by \"fixing up\" null budget values.\n // Those should not be allowed, but in case somehow a null value\n // ends up there, we are resilient to it. Preferrably the\n // spreadsheet would have types and be more strict about what is\n // allowed to be set.\n if (sheet.get().getCellValue(sheetName, `budget-${cat.id}`) == null) {\n sheet.get().set(resolveName(sheetName, `budget-${cat.id}`), 0);\n }\n\n sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n\n sheet.get().createDynamic(sheetName, `leftover-${cat.id}`, {\n initialValue: 0,\n dependencies: [\n `budget-${cat.id}`,\n `sum-amount-${cat.id}`,\n `${prevSheetName}!carryover-${cat.id}`,\n `${prevSheetName}!leftover-${cat.id}`,\n `${prevSheetName}!leftover-pos-${cat.id}`\n ],\n run: (budgeted, spent, prevCarryover, prevLeftover, prevLeftoverPos) => {\n return (\n number(budgeted) +\n number(spent) +\n (prevCarryover ? number(prevLeftover) : number(prevLeftoverPos))\n );\n }\n });\n\n sheet.get().createDynamic(sheetName, 'leftover-pos-' + cat.id, {\n initialValue: 0,\n dependencies: [`leftover-${cat.id}`],\n run: leftover => {\n return leftover < 0 ? 0 : leftover;\n }\n });\n }\n}\n\nexport function createSummary(groups, categories, prevSheetName, sheetName) {\n let incomeGroup = groups.filter(group => group.is_income)[0];\n let expenseCategories = categories.filter(cat => !cat.is_income);\n\n sheet.get().createStatic(sheetName, 'buffered', 0);\n\n sheet.get().createDynamic(sheetName, 'from-last-month', {\n initialValue: 0,\n dependencies: [`${prevSheetName}!to-budget`, `${prevSheetName}!buffered`],\n run: (toBudget, buffered) => number(toBudget) + number(buffered)\n });\n\n // Alias the group income total to `total-income`\n sheet.get().createDynamic(sheetName, 'total-income', {\n initialValue: 0,\n dependencies: [`group-sum-amount-${incomeGroup.id}`],\n run: amount => amount\n });\n\n sheet.get().createDynamic(sheetName, 'available-funds', {\n initialValue: 0,\n dependencies: ['total-income', 'from-last-month'],\n run: (income, fromLastMonth) => number(income) + number(fromLastMonth)\n });\n\n sheet.get().createDynamic(sheetName, 'last-month-overspent', {\n initialValue: 0,\n dependencies: flatten2(\n expenseCategories.map(cat => [\n `${prevSheetName}!leftover-${cat.id}`,\n `${prevSheetName}!carryover-${cat.id}`\n ])\n ),\n run: (...data) => {\n data = unflatten2(data);\n return data.reduce((total, [leftover, carryover]) => {\n if (carryover) {\n return total;\n }\n return total + Math.min(0, number(leftover));\n }, 0);\n }\n });\n\n sheet.get().createDynamic(sheetName, 'total-budgeted', {\n initialValue: 0,\n dependencies: groups\n .filter(group => !group.is_income)\n .map(group => `group-budget-${group.id}`),\n run: (...amounts) => {\n // Negate budgeted amount\n return -sumAmounts(...amounts);\n }\n });\n\n sheet.get().createDynamic(sheetName, 'buffered', { initialValue: 0 });\n\n sheet.get().createDynamic(sheetName, 'to-budget', {\n initialValue: 0,\n dependencies: [\n 'available-funds',\n 'last-month-overspent',\n 'total-budgeted',\n 'buffered'\n ],\n run: (available, lastOverspent, totalBudgeted, buffered) => {\n return (\n number(available) +\n number(lastOverspent) +\n number(totalBudgeted) -\n number(buffered)\n );\n }\n });\n\n sheet.get().createDynamic(sheetName, 'total-spent', {\n initialValue: 0,\n dependencies: groups\n .filter(group => !group.is_income)\n .map(group => `group-sum-amount-${group.id}`),\n run: sumAmounts\n });\n\n sheet.get().createDynamic(sheetName, 'total-leftover', {\n initialValue: 0,\n dependencies: groups\n .filter(group => !group.is_income)\n .map(group => `group-leftover-${group.id}`),\n run: sumAmounts\n });\n}\n\nexport function createBudget(meta, categories, months) {\n // The spreadsheet is now strict - so we need to fill in some\n // default values for the month before the first month. Only do this\n // if it doesn't already exist\n let blankSheet = getBlankSheet(months);\n if (meta.blankSheet !== blankSheet) {\n sheet.get().clearSheet(meta.blankSheet);\n createBlankMonth(categories, blankSheet, months);\n meta.blankSheet = blankSheet;\n }\n}\n","import * as sheet from '../sheet';\nimport * as db from '../db';\nimport * as monthUtils from '../../shared/months';\nimport { getChangedValues } from '../../shared/util';\nimport { resolveName } from '../spreadsheet/util';\nimport * as report from './report';\nimport * as rollover from './rollover';\nimport { sumAmounts } from './util';\nimport * as budgetActions from '../budget/actions';\n\nfunction mergeUpdates(updates) {\n const merged = {};\n updates.forEach(update => {\n Object.keys(update).forEach(sheet => {\n if (merged[sheet]) {\n merged[sheet] = { ...merged[sheet], ...update[sheet] };\n } else {\n merged[sheet] = update[sheet];\n }\n });\n });\n return merged;\n}\n\nexport function getBudgetType() {\n let meta = sheet.get().meta();\n return meta.budgetType || 'rollover';\n}\n\nexport function getBudgetRange(start, end) {\n start = monthUtils.getMonth(start);\n end = monthUtils.getMonth(end);\n\n // The start date should never be after the end date. If that\n // happened, the month range might be a valid range and weird\n // things happen\n if (start > end) {\n start = end;\n }\n\n // Budgets should exist 3 months before the earliest needed date\n // (either the oldest transaction or the current month if no\n // transactions yet), and a year from the current date. There's no\n // need to ever have budgets outside that range.\n start = monthUtils.subMonths(start, 3);\n end = monthUtils.addMonths(end, 12);\n\n return { start, end, range: monthUtils.rangeInclusive(start, end) };\n}\n\nfunction createCategory(cat, sheetName, prevSheetName, start, end) {\n sheet.get().createDynamic(sheetName, 'sum-amount-' + cat.id, {\n initialValue: 0,\n run: () => {\n // Making this sync is faster!\n let rows = db.runQuery(\n `SELECT SUM(amount) as amount FROM v_transactions_internal_alive t\n LEFT JOIN accounts a ON a.id = t.account\n WHERE t.date >= ${start} AND t.date <= ${end}\n AND category = '${cat.id}' AND a.offbudget = 0`,\n [],\n true\n );\n let row = rows[0];\n let amount = row ? row.amount : 0;\n return amount || 0;\n }\n });\n\n if (getBudgetType() === 'rollover') {\n rollover.createCategory(cat, sheetName, prevSheetName);\n } else {\n report.createCategory(cat, sheetName, prevSheetName);\n }\n}\n\nfunction createCategoryGroup(group, sheetName) {\n sheet.get().createDynamic(sheetName, 'group-sum-amount-' + group.id, {\n initialValue: 0,\n dependencies: group.categories.map(cat => `sum-amount-${cat.id}`),\n run: sumAmounts\n });\n\n if (!group.is_income || getBudgetType() !== 'rollover') {\n sheet.get().createDynamic(sheetName, 'group-budget-' + group.id, {\n initialValue: 0,\n dependencies: group.categories.map(cat => `budget-${cat.id}`),\n run: sumAmounts\n });\n\n sheet.get().createDynamic(sheetName, 'group-leftover-' + group.id, {\n initialValue: 0,\n dependencies: group.categories.map(cat => `leftover-${cat.id}`),\n run: sumAmounts\n });\n }\n}\n\nfunction handleAccountChange(months, oldValue, newValue) {\n if (!oldValue || oldValue.offbudget !== newValue.offbudget) {\n let rows = db.runQuery(\n `\n SELECT DISTINCT(category) as category FROM transactions\n WHERE acct = ?\n `,\n [newValue.id],\n true\n );\n\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n\n rows.forEach(row => {\n sheet\n .get()\n .recompute(resolveName(sheetName, 'sum-amount-' + row.category));\n });\n });\n }\n}\n\nfunction handleTransactionChange(transaction, changedFields) {\n if (\n (changedFields.has('date') ||\n changedFields.has('acct') ||\n changedFields.has('amount') ||\n changedFields.has('category') ||\n changedFields.has('tombstone') ||\n changedFields.has('isParent')) &&\n transaction.date &&\n transaction.category\n ) {\n let month = monthUtils.monthFromDate(db.fromDateRepr(transaction.date));\n let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n\n sheet\n .get()\n .recompute(resolveName(sheetName, 'sum-amount-' + transaction.category));\n }\n}\n\nfunction handleCategoryMappingChange(months, oldValue, newValue) {\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n if (oldValue) {\n sheet\n .get()\n .recompute(resolveName(sheetName, 'sum-amount-' + oldValue.transferId));\n }\n sheet\n .get()\n .recompute(resolveName(sheetName, 'sum-amount-' + newValue.transferId));\n });\n}\n\nfunction handleCategoryChange(months, oldValue, newValue) {\n function addDeps(sheetName, groupId, catId) {\n sheet\n .get()\n .addDependencies(sheetName, `group-sum-amount-${groupId}`, [\n `sum-amount-${catId}`\n ]);\n sheet\n .get()\n .addDependencies(sheetName, `group-budget-${groupId}`, [\n `budget-${catId}`\n ]);\n sheet\n .get()\n .addDependencies(sheetName, `group-leftover-${groupId}`, [\n `leftover-${catId}`\n ]);\n }\n\n function removeDeps(sheetName, groupId, catId) {\n sheet\n .get()\n .removeDependencies(sheetName, `group-sum-amount-${groupId}`, [\n `sum-amount-${catId}`\n ]);\n sheet\n .get()\n .removeDependencies(sheetName, `group-budget-${groupId}`, [\n `budget-${catId}`\n ]);\n sheet\n .get()\n .removeDependencies(sheetName, `group-leftover-${groupId}`, [\n `leftover-${catId}`\n ]);\n }\n\n let budgetType = getBudgetType();\n\n if (oldValue && oldValue.tombstone === 0 && newValue.tombstone === 1) {\n let id = newValue.id;\n let groupId = newValue.cat_group;\n\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month);\n removeDeps(sheetName, groupId, id);\n });\n } else if (\n newValue.tombstone === 0 &&\n (!oldValue || oldValue.tombstone === 1)\n ) {\n if (budgetType === 'rollover') {\n rollover.createBlankCategory(newValue, months);\n }\n\n months.forEach(month => {\n let prevMonth = monthUtils.prevMonth(month);\n let prevSheetName = monthUtils.sheetForMonth(prevMonth, budgetType);\n let sheetName = monthUtils.sheetForMonth(month, budgetType);\n let { start, end } = monthUtils.bounds(month);\n\n createCategory(newValue, sheetName, prevSheetName, start, end);\n\n let id = newValue.id;\n let groupId = newValue.cat_group;\n\n if (getBudgetType() === 'rollover') {\n sheet\n .get()\n .addDependencies(sheetName, 'last-month-overspent', [\n `${prevSheetName}!leftover-${id}`,\n `${prevSheetName}!carryover-${id}`\n ]);\n }\n\n addDeps(sheetName, groupId, id);\n });\n } else if (oldValue && oldValue.cat_group !== newValue.cat_group) {\n // The category moved so we need to update the dependencies\n let id = newValue.id;\n\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month, budgetType);\n removeDeps(sheetName, oldValue.cat_group, id);\n addDeps(sheetName, newValue.cat_group, id);\n });\n }\n}\n\nfunction handleCategoryGroupChange(months, oldValue, newValue) {\n let budgetType = getBudgetType();\n\n function addDeps(sheetName, groupId) {\n sheet\n .get()\n .addDependencies(sheetName, 'total-budgeted', [\n `group-budget-${groupId}`\n ]);\n sheet\n .get()\n .addDependencies(sheetName, 'total-spent', [\n `group-sum-amount-${groupId}`\n ]);\n sheet\n .get()\n .addDependencies(sheetName, 'total-leftover', [\n `group-leftover-${groupId}`\n ]);\n }\n\n function removeDeps(sheetName, groupId) {\n sheet\n .get()\n .removeDependencies(sheetName, 'total-budgeted', [\n `group-budget-${groupId}`\n ]);\n sheet\n .get()\n .removeDependencies(sheetName, 'total-spent', [\n `group-sum-amount-${groupId}`\n ]);\n sheet\n .get()\n .removeDependencies(sheetName, 'total-leftover', [\n `group-leftover-${groupId}`\n ]);\n }\n\n if (newValue.tombstone === 1 && oldValue && oldValue.tombstone === 0) {\n let id = newValue.id;\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month, budgetType);\n removeDeps(sheetName, id);\n });\n } else if (\n newValue.tombstone === 0 &&\n (!oldValue || oldValue.tombstone === 1)\n ) {\n let group = newValue;\n\n if (!group.is_income || budgetType !== 'rollover') {\n months.forEach(month => {\n let sheetName = monthUtils.sheetForMonth(month, budgetType);\n\n // Dirty, dirty hack. These functions should not be async, but this is\n // OK because we're leveraging the sync nature of queries. Ideally we\n // wouldn't be querying here. But I think we have to. At least for now\n // we do\n let categories = db.runQuery(\n 'SELECT * FROM categories WHERE tombstone = 0 AND cat_group = ?',\n [group.id],\n true\n );\n createCategoryGroup({ ...group, categories }, sheetName);\n\n addDeps(sheetName, group.id);\n });\n }\n }\n}\n\nfunction handleBudgetMonthChange(budget) {\n let sheetName = monthUtils.sheetForMonth(budget.id);\n sheet.get().set(`${sheetName}!buffered`, budget.buffered);\n}\n\nfunction handleBudgetChange(budget) {\n if (budget.category) {\n let sheetName = monthUtils.sheetForMonth(budget.month.toString());\n sheet\n .get()\n .set(`${sheetName}!budget-${budget.category}`, budget.amount || 0);\n sheet\n .get()\n .set(\n `${sheetName}!carryover-${budget.category}`,\n budget.carryover === 1 ? true : false\n );\n }\n}\n\nexport function triggerBudgetChanges(oldValues, newValues) {\n let { createdMonths = new Set() } = sheet.get().meta();\n sheet.startTransaction();\n\n try {\n newValues.forEach((items, table) => {\n let old = oldValues.get(table);\n\n items.forEach(newValue => {\n let oldValue = old && old.get(newValue.id);\n\n if (table === 'zero_budget_months') {\n handleBudgetMonthChange(newValue);\n } else if (table === 'zero_budgets' || table === 'reflect_budgets') {\n handleBudgetChange(newValue);\n } else if (table === 'transactions') {\n let changed = new Set(\n Object.keys(getChangedValues(oldValue || {}, newValue) || {})\n );\n\n if (oldValue) {\n handleTransactionChange(oldValue, changed);\n }\n handleTransactionChange(newValue, changed);\n } else if (table === 'category_mapping') {\n handleCategoryMappingChange(createdMonths, oldValue, newValue);\n } else if (table === 'categories') {\n handleCategoryChange(createdMonths, oldValue, newValue);\n } else if (table === 'category_groups') {\n handleCategoryGroupChange(createdMonths, oldValue, newValue);\n } else if (table === 'accounts') {\n handleAccountChange(createdMonths, oldValue, newValue);\n }\n });\n });\n } finally {\n sheet.endTransaction();\n }\n}\n\nexport async function doTransfer(categoryIds, transferId) {\n let { createdMonths: months } = sheet.get().meta();\n\n [...months].map(month => {\n let totalValue = categoryIds\n .map(id => {\n return budgetActions.getBudget({ month, category: id });\n })\n .reduce((total, value) => total + value, 0);\n\n let transferValue = budgetActions.getBudget({\n month,\n category: transferId\n });\n\n budgetActions.setBudget({\n month,\n category: transferId,\n amount: totalValue + transferValue\n });\n });\n}\n\nexport async function createBudget(months) {\n const categories = await db.getCategories();\n const groups = await db.getCategoriesGrouped();\n\n sheet.startTransaction();\n let meta = sheet.get().meta();\n meta.createdMonths = meta.createdMonths || new Set();\n\n let budgetType = getBudgetType();\n\n if (budgetType === 'rollover') {\n rollover.createBudget(meta, categories, months);\n }\n\n months.forEach(month => {\n if (!meta.createdMonths.has(month)) {\n let prevMonth = monthUtils.prevMonth(month);\n let { start, end } = monthUtils.bounds(month);\n let sheetName = monthUtils.sheetForMonth(month, budgetType);\n let prevSheetName = monthUtils.sheetForMonth(prevMonth, budgetType);\n\n categories.forEach(cat => {\n createCategory(cat, sheetName, prevSheetName, start, end);\n });\n groups.forEach(group => {\n createCategoryGroup(group, sheetName);\n });\n\n if (budgetType === 'rollover') {\n rollover.createSummary(groups, categories, prevSheetName, sheetName);\n } else {\n report.createSummary(groups, categories, sheetName);\n }\n\n meta.createdMonths.add(month);\n }\n });\n\n sheet.get().setMeta(meta);\n sheet.endTransaction();\n\n // Wait for the spreadsheet to finish computing. Normally this won't\n // do anything (as values are cached) but on first run this need to\n // show the loading screen while it initially sets up.\n await sheet.waitOnSpreadsheet();\n}\n\nexport async function createAllBudgets() {\n let earliestTransaction = await db.first(\n 'SELECT * FROM transactions WHERE isChild=0 AND date IS NOT NULL ORDER BY date ASC LIMIT 1'\n );\n let earliestDate =\n earliestTransaction && db.fromDateRepr(earliestTransaction.date);\n let currentMonth = monthUtils.currentMonth();\n\n // Get the range based off of the earliest transaction and the\n // current month. If no transactions currently exist the current\n // month is also used as the starting month\n let { start, end, range } = getBudgetRange(\n earliestDate || currentMonth,\n currentMonth\n );\n\n let meta = sheet.get().meta();\n let createdMonths = meta.createdMonths || new Set();\n let newMonths = range.filter(m => !createdMonths.has(m));\n\n if (newMonths.length > 0) {\n await createBudget(range);\n }\n\n return { start, end };\n}\n\nexport async function setType(type) {\n let meta = sheet.get().meta();\n if (type === meta.budgetType) {\n return;\n }\n\n meta.budgetType = type;\n meta.createdMonths = new Set();\n\n // Go through and force all the cells to be recomputed\n let nodes = sheet.get().getNodes();\n db.transaction(() => {\n for (let name of nodes.keys()) {\n let [sheetName, cellName] = name.split('!');\n if (sheetName.match(/^budget\\d+/)) {\n sheet.get().deleteCell(sheetName, cellName);\n }\n }\n });\n\n sheet.get().startCacheBarrier();\n sheet.loadUserBudgets(db);\n let bounds = await createAllBudgets();\n sheet.get().endCacheBarrier();\n\n return bounds;\n}\n","import addLeadingZeros from '../../addLeadingZeros/index.js'\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Year\n y: function(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n var signedYear = date.getUTCFullYear()\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n var year = signedYear > 0 ? signedYear : 1 - signedYear\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length)\n },\n\n // Month\n M: function(date, token) {\n var month = date.getUTCMonth()\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2)\n },\n\n // Day of the month\n d: function(date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length)\n },\n\n // AM or PM\n a: function(date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am'\n\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return dayPeriodEnumValue.toUpperCase()\n case 'aaaaa':\n return dayPeriodEnumValue[0]\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.'\n }\n },\n\n // Hour [1-12]\n h: function(date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length)\n },\n\n // Hour [0-23]\n H: function(date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length)\n },\n\n // Minute\n m: function(date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length)\n },\n\n // Second\n s: function(date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length)\n }\n}\n\nexport default formatters\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * var result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport default function addHours(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfWeek(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n date.setDate(date.getDate() - diff)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * var result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return startOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import toDate from '../toDate/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `getISOYear` to `getISOWeekYear`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * var result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport default function getISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n\n var fourthOfJanuaryOfNextYear = new Date(0)\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear)\n\n var fourthOfJanuaryOfThisYear = new Date(0)\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4)\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0)\n var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear)\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year\n } else {\n return year - 1\n }\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * var result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var year = getISOWeekYear(dirtyDate)\n var fourthOfJanuary = new Date(0)\n fourthOfJanuary.setFullYear(year, 0, 4)\n fourthOfJanuary.setHours(0, 0, 0, 0)\n var date = startOfISOWeek(fourthOfJanuary)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfISOWeekYear from '../startOfISOWeekYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name setISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Set the ISO week-numbering year to the given date.\n *\n * @description\n * Set the ISO week-numbering year to the given date,\n * saving the week number and the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `setISOYear` to `setISOWeekYear`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `setWeekYear`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeekYear - the ISO week-numbering year of the new date\n * @returns {Date} the new date with the ISO week-numbering year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set ISO week-numbering year 2007 to 29 December 2008:\n * var result = setISOWeekYear(new Date(2008, 11, 29), 2007)\n * //=> Mon Jan 01 2007 00:00:00\n */\nexport default function setISOWeekYear(dirtyDate, dirtyISOWeekYear) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var isoWeekYear = toInteger(dirtyISOWeekYear)\n var diff = differenceInCalendarDays(date, startOfISOWeekYear(date))\n var fourthOfJanuary = new Date(0)\n fourthOfJanuary.setFullYear(isoWeekYear, 0, 4)\n fourthOfJanuary.setHours(0, 0, 0, 0)\n date = startOfISOWeekYear(fourthOfJanuary)\n date.setDate(date.getDate() + diff)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getISOWeekYear from '../getISOWeekYear/index.js'\nimport setISOWeekYear from '../setISOWeekYear/index.js'\n\n/**\n * @name addISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Add the specified number of ISO week-numbering years to the given date.\n *\n * @description\n * Add the specified number of ISO week-numbering years to the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `addISOYears` to `addISOWeekYears`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be added\n * @returns {Date} the new date with the ISO week-numbering years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 ISO week-numbering years to 2 July 2010:\n * var result = addISOWeekYears(new Date(2010, 6, 2), 5)\n * //=> Fri Jun 26 2015 00:00:00\n */\nexport default function addISOWeekYears(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return setISOWeekYear(dirtyDate, getISOWeekYear(dirtyDate) + amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\nvar MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added\n * @returns {Date} the new date with the minutes added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * var result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport default function addMinutes(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be added\n * @returns {Date} the new date with the quarters added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * var result = addQuarters(new Date(2014, 8, 1), 1)\n * //=> Mon Dec 01 2014 00:00:00\n */\nexport default function addQuarters(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n var months = amount * 3\n return addMonths(dirtyDate, months)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be added\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * var result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport default function addSeconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMilliseconds(dirtyDate, amount * 1000)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name areIntervalsOverlapping\n * @category Interval Helpers\n * @summary Is the given time interval overlapping with another time interval?\n *\n * @description\n * Is the given time interval overlapping with another time interval?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `areRangesOverlapping` to `areIntervalsOverlapping`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * areRangesOverlapping(\n * new Date(2014, 0, 10), new Date(2014, 0, 20),\n * new Date(2014, 0, 17), new Date(2014, 0, 21)\n * )\n *\n * // v2.0.0 onward\n *\n * areIntervalsOverlapping(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * ```\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/types/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/types/Interval}\n * @returns {Boolean} whether the time intervals are overlapping\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals:\n * areIntervalsOverlapping(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> true\n *\n * @example\n * // For non-overlapping time intervals:\n * areIntervalsOverlapping(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> false\n */\nexport default function areIntervalsOverlapping(\n dirtyIntervalLeft,\n dirtyIntervalRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var intervalLeft = dirtyIntervalLeft || {}\n var intervalRight = dirtyIntervalRight || {}\n var leftStartTime = toDate(intervalLeft.start).getTime()\n var leftEndTime = toDate(intervalLeft.end).getTime()\n var rightStartTime = toDate(intervalRight.start).getTime()\n var rightEndTime = toDate(intervalRight.end).getTime()\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n throw new RangeError('Invalid interval')\n }\n\n return leftStartTime < rightEndTime && rightStartTime < leftEndTime\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name closestIndexTo\n * @category Common Helpers\n * @summary Return an index of the closest date from the array comparing to the given date.\n *\n * @description\n * Return an index of the closest date from the array comparing to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now, `closestIndexTo` doesn't throw an exception\n * when the second argument is not an array, and returns Invalid Date instead.\n *\n * @param {Date|Number} dateToCompare - the date to compare with\n * @param {Date[]|Number[]} datesArray - the array to search\n * @returns {Number} an index of the date closest to the given date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015?\n * var dateToCompare = new Date(2015, 8, 6)\n * var datesArray = [\n * new Date(2015, 0, 1),\n * new Date(2016, 0, 1),\n * new Date(2017, 0, 1)\n * ]\n * var result = closestIndexTo(dateToCompare, datesArray)\n * //=> 1\n */\nexport default function closestIndexTo(dirtyDateToCompare, dirtyDatesArray) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateToCompare = toDate(dirtyDateToCompare)\n\n if (isNaN(dateToCompare)) {\n return NaN\n }\n\n var timeToCompare = dateToCompare.getTime()\n\n var datesArray\n // `dirtyDatesArray` is undefined or null\n if (dirtyDatesArray == null) {\n datesArray = []\n\n // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n } else if (typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray\n\n // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n } else {\n datesArray = Array.prototype.slice.call(dirtyDatesArray)\n }\n\n var result\n var minDistance\n datesArray.forEach(function(dirtyDate, index) {\n var currentDate = toDate(dirtyDate)\n\n if (isNaN(currentDate)) {\n result = NaN\n minDistance = NaN\n return\n }\n\n var distance = Math.abs(timeToCompare - currentDate.getTime())\n if (result == null || distance < minDistance) {\n result = index\n minDistance = distance\n }\n })\n\n return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name closestTo\n * @category Common Helpers\n * @summary Return a date from the array closest to the given date.\n *\n * @description\n * Return a date from the array closest to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now, `closestTo` doesn't throw an exception\n * when the second argument is not an array, and returns Invalid Date instead.\n *\n * @param {Date|Number} dateToCompare - the date to compare with\n * @param {Date[]|Number[]} datesArray - the array to search\n * @returns {Date} the date from the array closest to the given date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015: 1 January 2000 or 1 January 2030?\n * var dateToCompare = new Date(2015, 8, 6)\n * var result = closestTo(dateToCompare, [\n * new Date(2000, 0, 1),\n * new Date(2030, 0, 1)\n * ])\n * //=> Tue Jan 01 2030 00:00:00\n */\nexport default function closestTo(dirtyDateToCompare, dirtyDatesArray) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateToCompare = toDate(dirtyDateToCompare)\n\n if (isNaN(dateToCompare)) {\n return new Date(NaN)\n }\n\n var timeToCompare = dateToCompare.getTime()\n\n var datesArray\n // `dirtyDatesArray` is undefined or null\n if (dirtyDatesArray == null) {\n datesArray = []\n\n // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n } else if (typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray\n\n // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n } else {\n datesArray = Array.prototype.slice.call(dirtyDatesArray)\n }\n\n var result\n var minDistance\n datesArray.forEach(function(dirtyDate) {\n var currentDate = toDate(dirtyDate)\n\n if (isNaN(currentDate)) {\n result = new Date(NaN)\n minDistance = NaN\n return\n }\n\n var distance = Math.abs(timeToCompare - currentDate.getTime())\n if (result == null || distance < minDistance) {\n result = currentDate\n minDistance = distance\n }\n })\n\n return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name compareDesc\n * @category Common Helpers\n * @summary Compare the two dates reverse chronologically and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return -1 if the first date is after the second,\n * 1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989 reverse chronologically:\n * var result = compareDesc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> 1\n *\n * @example\n * // Sort the array of dates in reverse chronological order:\n * var result = [\n * new Date(1995, 6, 2),\n * new Date(1987, 1, 11),\n * new Date(1989, 6, 10)\n * ].sort(compareDesc)\n * //=> [\n * // Sun Jul 02 1995 00:00:00,\n * // Mon Jul 10 1989 00:00:00,\n * // Wed Feb 11 1987 00:00:00\n * // ]\n */\nexport default function compareDesc(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var diff = dateLeft.getTime() - dateRight.getTime()\n\n if (diff > 0) {\n return -1\n } else if (diff < 0) {\n return 1\n // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff\n }\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\n\n/**\n * @name differenceInCalendarISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of calendar ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of calendar ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `differenceInCalendarISOYears` to `differenceInCalendarISOWeekYears`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO week-numbering years are 1 January 2010 and 1 January 2012?\n * var result = differenceInCalendarISOWeekYears(\n * new Date(2012, 0, 1),\n * new Date(2010, 0, 1)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarISOWeekYears(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n return getISOWeekYear(dirtyDateLeft) - getISOWeekYear(dirtyDateRight)\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name differenceInCalendarISOWeeks\n * @category ISO Week Helpers\n * @summary Get the number of calendar ISO weeks between the given dates.\n *\n * @description\n * Get the number of calendar ISO weeks between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO weeks are between 6 July 2014 and 21 July 2014?\n * var result = differenceInCalendarISOWeeks(\n * new Date(2014, 6, 21),\n * new Date(2014, 6, 6)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarISOWeeks(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var startOfISOWeekLeft = startOfISOWeek(dirtyDateLeft)\n var startOfISOWeekRight = startOfISOWeek(dirtyDateRight)\n\n var timestampLeft =\n startOfISOWeekLeft.getTime() -\n getTimezoneOffsetInMilliseconds(startOfISOWeekLeft)\n var timestampRight =\n startOfISOWeekRight.getTime() -\n getTimezoneOffsetInMilliseconds(startOfISOWeekRight)\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInCalendarMonths(\n * new Date(2014, 8, 1),\n * new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport default function differenceInCalendarMonths(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()\n var monthDiff = dateLeft.getMonth() - dateRight.getMonth()\n\n return yearDiff * 12 + monthDiff\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getQuarter\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which quarter is 2 July 2014?\n * var result = getQuarter(new Date(2014, 6, 2))\n * //=> 3\n */\nexport default function getQuarter(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var quarter = Math.floor(date.getMonth() / 3) + 1\n return quarter\n}\n","import getQuarter from '../getQuarter/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarQuarters\n * @category Quarter Helpers\n * @summary Get the number of calendar quarters between the given dates.\n *\n * @description\n * Get the number of calendar quarters between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar quarters are between 31 December 2013 and 2 July 2014?\n * var result = differenceInCalendarQuarters(\n * new Date(2014, 6, 2),\n * new Date(2013, 11, 31)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarQuarters(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()\n var quarterDiff = getQuarter(dateLeft) - getQuarter(dateRight)\n\n return yearDiff * 4 + quarterDiff\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name differenceInCalendarWeeks\n * @category Week Helpers\n * @summary Get the number of calendar weeks between the given dates.\n *\n * @description\n * Get the number of calendar weeks between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInCalendarWeeks(\n * new Date(2014, 6, 20),\n * new Date(2014, 6, 5)\n * )\n * //=> 3\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInCalendarWeeks(\n * new Date(2014, 6, 20),\n * new Date(2014, 6, 5),\n * { weekStartsOn: 1 }\n * )\n * //=> 2\n */\nexport default function differenceInCalendarWeeks(\n dirtyDateLeft,\n dirtyDateRight,\n dirtyOptions\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var startOfWeekLeft = startOfWeek(dirtyDateLeft, dirtyOptions)\n var startOfWeekRight = startOfWeek(dirtyDateRight, dirtyOptions)\n\n var timestampLeft =\n startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft)\n var timestampRight =\n startOfWeekRight.getTime() -\n getTimezoneOffsetInMilliseconds(startOfWeekRight)\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInCalendarYears(\n * new Date(2015, 1, 11),\n * new Date(2013, 11, 31)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarYears(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n return dateLeft.getFullYear() - dateRight.getFullYear()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * var result = differenceInMilliseconds(\n * new Date(2014, 6, 2, 12, 30, 21, 700),\n * new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport default function differenceInMilliseconds(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n return dateLeft.getTime() - dateRight.getTime()\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\n\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * var result = differenceInHours(\n * new Date(2014, 6, 2, 19, 0),\n * new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nexport default function differenceInHours(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var diff =\n differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) /\n MILLISECONDS_IN_HOUR\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addISOWeekYears from '../addISOWeekYears/index.js'\n\n/**\n * @name subISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Subtract the specified number of ISO week-numbering years from the given date.\n *\n * @description\n * Subtract the specified number of ISO week-numbering years from the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `subISOYears` to `subISOWeekYears`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `setWeekYear`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be subtracted\n * @returns {Date} the new date with the ISO week-numbering years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 ISO week-numbering years from 1 September 2014:\n * var result = subISOWeekYears(new Date(2014, 8, 1), 5)\n * //=> Mon Aug 31 2009 00:00:00\n */\nexport default function subISOWeekYears(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addISOWeekYears(dirtyDate, -amount)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarISOWeekYears from '../differenceInCalendarISOWeekYears/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport subISOWeekYears from '../subISOWeekYears/index.js'\n\n/**\n * @name differenceInISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of full ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of full ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `differenceInISOYears` to `differenceInISOWeekYears`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full ISO week-numbering years are between 1 January 2010 and 1 January 2012?\n * var result = differenceInISOWeekYears(\n * new Date(2012, 0, 1),\n * new Date(2010, 0, 1)\n * )\n * //=> 1\n */\nexport default function differenceInISOWeekYears(\n dirtyDateLeft,\n dirtyDateRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var sign = compareAsc(dateLeft, dateRight)\n var difference = Math.abs(\n differenceInCalendarISOWeekYears(dateLeft, dateRight)\n )\n dateLeft = subISOWeekYears(dateLeft, sign * difference)\n\n // Math.abs(diff in full ISO years - diff in calendar ISO years) === 1\n // if last calendar ISO year is not full\n // If so, result must be decreased by 1 in absolute value\n var isLastISOWeekYearNotFull = compareAsc(dateLeft, dateRight) === -sign\n var result = sign * (difference - isLastISOWeekYearNotFull)\n // Prevent negative zero\n return result === 0 ? 0 : result\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the number of minutes between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * var result = differenceInMinutes(\n * new Date(2014, 6, 2, 12, 20, 0),\n * new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n */\nexport default function differenceInMinutes(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var diff =\n differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) /\n MILLISECONDS_IN_MINUTE\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarMonths from '../differenceInCalendarMonths/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var sign = compareAsc(dateLeft, dateRight)\n var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight))\n dateLeft.setMonth(dateLeft.getMonth() - sign * difference)\n\n // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n // If so, result must be decreased by 1 in absolute value\n var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign\n var result = sign * (difference - isLastMonthNotFull)\n // Prevent negative zero\n return result === 0 ? 0 : result\n}\n","import differenceInMonths from '../differenceInMonths/index.js'\n\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of full quarters between the given dates.\n *\n * @description\n * Get the number of full quarters between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * var result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\nexport default function differenceInQuarters(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var diff = differenceInMonths(dirtyDateLeft, dirtyDateRight) / 3\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * var result = differenceInSeconds(\n * new Date(2014, 6, 2, 12, 30, 20, 0),\n * new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport default function differenceInSeconds(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import differenceInDays from '../differenceInDays/index.js'\n\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n */\nexport default function differenceInWeeks(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var diff = differenceInDays(dirtyDateLeft, dirtyDateRight) / 7\n return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarYears from '../differenceInCalendarYears/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var sign = compareAsc(dateLeft, dateRight)\n var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight))\n dateLeft.setFullYear(dateLeft.getFullYear() - sign * difference)\n\n // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n // If so, result must be decreased by 1 in absolute value\n var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign\n var result = sign * (difference - isLastYearNotFull)\n // Prevent negative zero\n return result === 0 ? 0 : result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `eachDay` to `eachDayOfInterval`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))\n *\n * // v2.0.0 onward\n *\n * eachDayOfInterval(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }\n * )\n * ```\n *\n * @param {Interval} interval - the interval. See [Interval]{@link docs/types/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * var result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\nexport default function eachDayOfInterval(dirtyInterval, options) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var interval = dirtyInterval || {}\n var startDate = toDate(interval.start)\n var endDate = toDate(interval.end)\n\n var endTime = endDate.getTime()\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval')\n }\n\n var dates = []\n\n var currentDate = startDate\n currentDate.setHours(0, 0, 0, 0)\n\n var step = options && 'step' in options ? Number(options.step) : 1\n if (step < 1 || isNaN(step))\n throw new RangeError('`options.step` must be a number greater than 1')\n\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate))\n currentDate.setDate(currentDate.getDate() + step)\n currentDate.setHours(0, 0, 0, 0)\n }\n\n return dates\n}\n","import toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\n/**\n * @name eachWeekOfInterval\n * @category Interval Helpers\n * @summary Return the array of weeks within the specified time interval.\n *\n * @description\n * Return the array of weeks within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Interval} interval - the interval. See [Interval]{@link docs/types/Interval}\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date[]} the array with starts of weeks from the week of the interval start to the week of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be 0, 1, ..., 6\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each week within interval 6 October 2014 - 23 November 2014:\n * var result = eachWeekOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 10, 23)\n * })\n * //=> [\n * // Sun Oct 05 2014 00:00:00,\n * // Sun Oct 12 2014 00:00:00,\n * // Sun Oct 19 2014 00:00:00,\n * // Sun Oct 26 2014 00:00:00,\n * // Sun Nov 02 2014 00:00:00,\n * // Sun Nov 09 2014 00:00:00,\n * // Sun Nov 16 2014 00:00:00,\n * // Sun Nov 23 2014 00:00:00\n * // ]\n */\nexport default function eachWeekOfInterval(dirtyInterval, options) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var interval = dirtyInterval || {}\n var startDate = toDate(interval.start)\n var endDate = toDate(interval.end)\n\n var endTime = endDate.getTime()\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval')\n }\n\n var startDateWeek = startOfWeek(startDate, options)\n var endDateWeek = startOfWeek(endDate, options)\n\n // Some timezones switch DST at midnight, making start of day unreliable in these timezones, 3pm is a safe bet\n startDateWeek.setHours(15)\n endDateWeek.setHours(15)\n\n endTime = endDateWeek.getTime()\n\n var weeks = []\n\n var currentWeek = startDateWeek\n\n while (currentWeek.getTime() <= endTime) {\n currentWeek.setHours(0)\n weeks.push(toDate(currentWeek))\n currentWeek = addWeeks(currentWeek, 1)\n currentWeek.setHours(15)\n }\n\n return weeks\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSunday\n * @category Weekday Helpers\n * @summary Is the given date Sunday?\n *\n * @description\n * Is the given date Sunday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 21 September 2014 Sunday?\n * var result = isSunday(new Date(2014, 8, 21))\n * //=> true\n */\nexport default function isSunday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 0\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWeekend\n * @category Weekday Helpers\n * @summary Does the given date fall on a weekend?\n *\n * @description\n * Does the given date fall on a weekend?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date falls on a weekend\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Does 5 October 2014 fall on a weekend?\n * var result = isWeekend(new Date(2014, 9, 5))\n * //=> true\n */\nexport default function isWeekend(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n return day === 0 || day === 6\n}\n","import eachDayOfInterval from '../eachDayOfInterval/index.js'\nimport isSunday from '../isSunday/index.js'\nimport isWeekend from '../isWeekend/index.js'\n\n/**\n * @name eachWeekendOfInterval\n * @category Interval Helpers\n * @summary List all the Saturdays and Sundays in the given date interval.\n *\n * @description\n * Get all the Saturdays and Sundays in the given date interval.\n *\n * @param {Interval} interval - the given interval. See [Interval]{@link docs/types/Interval}\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Lists all Saturdays and Sundays in the given date interval\n * var result = eachWeekendOfInterval({\n * start: new Date(2018, 8, 17),\n * end: new Date(2018, 8, 30)\n * })\n * //=> [\n * // Sat Sep 22 2018 00:00:00,\n * // Sun Sep 23 2018 00:00:00,\n * // Sat Sep 29 2018 00:00:00,\n * // Sun Sep 30 2018 00:00:00\n * // ]\n */\nexport default function eachWeekendOfInterval(interval) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateInterval = eachDayOfInterval(interval)\n var weekends = []\n var index = 0\n while (index++ < dateInterval.length) {\n var date = dateInterval[index]\n if (isWeekend(date)) {\n weekends.push(date)\n if (isSunday(date)) index = index + 5\n }\n }\n return weekends\n}\n","import eachWeekendOfInterval from '../eachWeekendOfInterval/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\nimport endOfMonth from '../endOfMonth/index.js'\n\n/**\n * @name eachWeekendOfMonth\n * @category Month Helpers\n * @summary List all the Saturdays and Sundays in the given month.\n *\n * @description\n * Get all the Saturdays and Sundays in the given month.\n *\n * @param {Date|Number} date - the given month\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the given month\n * var result = eachWeekendOfMonth(new Date(2022, 1, 1))\n * //=> [\n * // Sat Feb 05 2022 00:00:00,\n * // Sun Feb 06 2022 00:00:00,\n * // Sat Feb 12 2022 00:00:00,\n * // Sun Feb 13 2022 00:00:00,\n * // Sat Feb 19 2022 00:00:00,\n * // Sun Feb 20 2022 00:00:00,\n * // Sat Feb 26 2022 00:00:00,\n * // Sun Feb 27 2022 00:00:00\n * // ]\n */\nexport default function eachWeekendOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var startDate = startOfMonth(dirtyDate)\n if (isNaN(startDate)) throw new RangeError('The passed date is invalid')\n\n var endDate = endOfMonth(dirtyDate)\n return eachWeekendOfInterval({ start: startDate, end: endDate })\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * var result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport default function startOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var cleanDate = toDate(dirtyDate)\n var date = new Date(0)\n date.setFullYear(cleanDate.getFullYear(), 0, 1)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * var result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport default function endOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n date.setFullYear(year + 1, 0, 0)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import eachWeekendOfInterval from '../eachWeekendOfInterval/index.js'\nimport startOfYear from '../startOfYear/index.js'\nimport endOfYear from '../endOfYear/index.js'\n\n/**\n * @name eachWeekendOfYear\n * @category Year Helpers\n * @summary List all the Saturdays and Sundays in the year.\n *\n * @description\n * Get all the Saturdays and Sundays in the year.\n *\n * @param {Date|Number} date - the given year\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the year\n * var result = eachWeekendOfYear(new Date(2020, 1, 1))\n * //=> [\n * // Sat Jan 03 2020 00:00:00,\n * // Sun Jan 04 2020 00:00:00,\n * // ...\n * // Sun Dec 27 2020 00:00:00\n * // ]\n * ]\n */\nexport default function eachWeekendOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var startDate = startOfYear(dirtyDate)\n if (isNaN(startDate)) throw new RangeError('The passed date is invalid')\n\n var endDate = endOfYear(dirtyDate)\n return eachWeekendOfInterval({ start: startDate, end: endDate })\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * var result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport default function endOfDay(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfDecade\n * @category Decade Helpers\n * @summary Return the end of a decade for the given date.\n *\n * @description\n * Return the end of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a decade\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The end of a decade for 12 May 1984 00:00:00:\n * var result = endOfDecade(new Date(1984, 4, 12, 00, 00, 00))\n * //=> Dec 31 1989 23:59:59.999\n */\nexport default function endOfDecade(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n var decade = 9 + Math.floor(year / 10) * 10\n date.setFullYear(decade, 11, 31)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * var result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\nexport default function endOfHour(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setMinutes(59, 59, 999)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)\n\n date.setDate(date.getDate() + diff)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import endOfWeek from '../endOfWeek/index.js'\n\n/**\n * @name endOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the end of an ISO week for the given date.\n *\n * @description\n * Return the end of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week for 2 September 2014 11:55:00:\n * var result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return endOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name endOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the end of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the end of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `endOfISOYear` to `endOfISOWeekYear`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week-numbering year for 2 July 2005:\n * var result = endOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 23:59:59.999\n */\nexport default function endOfISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var year = getISOWeekYear(dirtyDate)\n var fourthOfJanuaryOfNextYear = new Date(0)\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n var date = startOfISOWeek(fourthOfJanuaryOfNextYear)\n date.setMilliseconds(date.getMilliseconds() - 1)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * var result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\nexport default function endOfMinute(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setSeconds(59, 999)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * var result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfQuarter(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var currentMonth = date.getMonth()\n var month = currentMonth - (currentMonth % 3) + 3\n date.setMonth(month, 0)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * var result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\nexport default function endOfSecond(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setMilliseconds(999)\n return date\n}\n","export default function assign(target, dirtyObject) {\n if (target == null) {\n throw new TypeError(\n 'assign requires that input parameter not be null or undefined'\n )\n }\n\n dirtyObject = dirtyObject || {}\n\n for (var property in dirtyObject) {\n if (dirtyObject.hasOwnProperty(property)) {\n target[property] = dirtyObject[property]\n }\n }\n\n return target\n}\n","import assign from '../assign/index.js'\n\nexport default function cloneObject(dirtyObject) {\n return assign({}, dirtyObject)\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport toDate from '../toDate/index.js'\nimport differenceInSeconds from '../differenceInSeconds/index.js'\nimport differenceInMonths from '../differenceInMonths/index.js'\nimport cloneObject from '../_lib/cloneObject/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\n\nvar MINUTES_IN_DAY = 1440\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520\nvar MINUTES_IN_MONTH = 43200\nvar MINUTES_IN_TWO_MONTHS = 86400\n\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates | Result |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs | less than a minute |\n * | 30 secs ... 1 min 30 secs | 1 minute |\n * | 1 min 30 secs ... 44 mins 30 secs | [2..44] minutes |\n * | 44 mins ... 30 secs ... 89 mins 30 secs | about 1 hour |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs | 1 day |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs | [2..30] days |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr | [2..12] months |\n * | 1 yr ... 1 yr 3 months | about 1 year |\n * | 1 yr 3 months ... 1 yr 9 month s | over 1 year |\n * | 1 yr 9 months ... 2 yrs | almost 2 years |\n * | N yrs ... N yrs 3 months | about N years |\n * | N yrs 3 months ... N yrs 9 months | over N years |\n * | N yrs 9 months ... N+1 yrs | almost N+1 years |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs | less than 5 seconds |\n * | 5 secs ... 10 secs | less than 10 seconds |\n * | 10 secs ... 20 secs | less than 20 seconds |\n * | 20 secs ... 40 secs | half a minute |\n * | 40 secs ... 60 secs | less than a minute |\n * | 60 secs ... 90 secs | 1 minute |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWords ` to `formatDistance `\n * to make its name consistent with `format` and `formatRelative`.\n *\n * - The order of arguments is swapped to make the function\n * consistent with `differenceIn...` functions.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWords(\n * new Date(1986, 3, 4, 10, 32, 0),\n * new Date(1986, 3, 4, 11, 32, 0),\n * { addSuffix: true }\n * ) //=> 'in about 1 hour'\n *\n * // v2.0.0 onward\n *\n * formatDistance(\n * new Date(1986, 3, 4, 11, 32, 0),\n * new Date(1986, 3, 4, 10, 32, 0),\n * { addSuffix: true }\n * ) //=> 'in about 1 hour'\n * ```\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * var result = formatDistance(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0),\n * { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\nexport default function formatDistance(dirtyDate, dirtyBaseDate, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale || defaultLocale\n\n if (!locale.formatDistance) {\n throw new RangeError('locale must contain formatDistance property')\n }\n\n var comparison = compareAsc(dirtyDate, dirtyBaseDate)\n\n if (isNaN(comparison)) {\n throw new RangeError('Invalid time value')\n }\n\n var localizeOptions = cloneObject(options)\n localizeOptions.addSuffix = Boolean(options.addSuffix)\n localizeOptions.comparison = comparison\n\n var dateLeft\n var dateRight\n if (comparison > 0) {\n dateLeft = toDate(dirtyBaseDate)\n dateRight = toDate(dirtyDate)\n } else {\n dateLeft = toDate(dirtyDate)\n dateRight = toDate(dirtyBaseDate)\n }\n\n var seconds = differenceInSeconds(dateRight, dateLeft)\n var offsetInSeconds =\n (getTimezoneOffsetInMilliseconds(dateRight) -\n getTimezoneOffsetInMilliseconds(dateLeft)) /\n 1000\n var minutes = Math.round((seconds - offsetInSeconds) / 60)\n var months\n\n // 0 up to 2 mins\n if (minutes < 2) {\n if (options.includeSeconds) {\n if (seconds < 5) {\n return locale.formatDistance('lessThanXSeconds', 5, localizeOptions)\n } else if (seconds < 10) {\n return locale.formatDistance('lessThanXSeconds', 10, localizeOptions)\n } else if (seconds < 20) {\n return locale.formatDistance('lessThanXSeconds', 20, localizeOptions)\n } else if (seconds < 40) {\n return locale.formatDistance('halfAMinute', null, localizeOptions)\n } else if (seconds < 60) {\n return locale.formatDistance('lessThanXMinutes', 1, localizeOptions)\n } else {\n return locale.formatDistance('xMinutes', 1, localizeOptions)\n }\n } else {\n if (minutes === 0) {\n return locale.formatDistance('lessThanXMinutes', 1, localizeOptions)\n } else {\n return locale.formatDistance('xMinutes', minutes, localizeOptions)\n }\n }\n\n // 2 mins up to 0.75 hrs\n } else if (minutes < 45) {\n return locale.formatDistance('xMinutes', minutes, localizeOptions)\n\n // 0.75 hrs up to 1.5 hrs\n } else if (minutes < 90) {\n return locale.formatDistance('aboutXHours', 1, localizeOptions)\n\n // 1.5 hrs up to 24 hrs\n } else if (minutes < MINUTES_IN_DAY) {\n var hours = Math.round(minutes / 60)\n return locale.formatDistance('aboutXHours', hours, localizeOptions)\n\n // 1 day up to 1.75 days\n } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n return locale.formatDistance('xDays', 1, localizeOptions)\n\n // 1.75 days up to 30 days\n } else if (minutes < MINUTES_IN_MONTH) {\n var days = Math.round(minutes / MINUTES_IN_DAY)\n return locale.formatDistance('xDays', days, localizeOptions)\n\n // 1 month up to 2 months\n } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n months = Math.round(minutes / MINUTES_IN_MONTH)\n return locale.formatDistance('aboutXMonths', months, localizeOptions)\n }\n\n months = differenceInMonths(dateRight, dateLeft)\n\n // 2 months up to 12 months\n if (months < 12) {\n var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH)\n return locale.formatDistance('xMonths', nearestMonth, localizeOptions)\n\n // 1 year up to max Date\n } else {\n var monthsSinceStartOfYear = months % 12\n var years = Math.floor(months / 12)\n\n // N years up to 1 years 3 months\n if (monthsSinceStartOfYear < 3) {\n return locale.formatDistance('aboutXYears', years, localizeOptions)\n\n // N years 3 months up to N years 9 months\n } else if (monthsSinceStartOfYear < 9) {\n return locale.formatDistance('overXYears', years, localizeOptions)\n\n // N years 9 months up to N year 12 months\n } else {\n return locale.formatDistance('almostXYears', years + 1, localizeOptions)\n }\n }\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport toDate from '../toDate/index.js'\nimport differenceInSeconds from '../differenceInSeconds/index.js'\nimport cloneObject from '../_lib/cloneObject/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\n\nvar MINUTES_IN_DAY = 1440\nvar MINUTES_IN_MONTH = 43200\nvar MINUTES_IN_YEAR = 525600\n\n/**\n * @name formatDistanceStrict\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result |\n * |------------------------|---------------------|\n * | 0 ... 59 secs | [0..59] seconds |\n * | 1 ... 59 mins | [1..59] minutes |\n * | 1 ... 23 hrs | [1..23] hours |\n * | 1 ... 29 days | [1..29] days |\n * | 1 ... 11 months | [1..11] months |\n * | 1 ... N years | [1..N] years |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWordsStrict` to `formatDistanceStrict`\n * to make its name consistent with `format` and `formatRelative`.\n *\n * - The order of arguments is swapped to make the function\n * consistent with `differenceIn...` functions.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWordsStrict(\n * new Date(2015, 0, 2),\n * new Date(2014, 6, 2)\n * ) //=> '6 months'\n *\n * // v2.0.0 onward\n *\n * formatDistanceStrict(\n * new Date(2014, 6, 2),\n * new Date(2015, 0, 2)\n * ) //=> '6 months'\n * ```\n *\n * - `partialMethod` option is renamed to `roundingMethod`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWordsStrict(\n * new Date(1986, 3, 4, 10, 32, 0),\n * new Date(1986, 3, 4, 10, 33, 1),\n * { partialMethod: 'ceil' }\n * ) //=> '2 minutes'\n *\n * // v2.0.0 onward\n *\n * formatDistanceStrict(\n * new Date(1986, 3, 4, 10, 33, 1),\n * new Date(1986, 3, 4, 10, 32, 0),\n * { roundingMethod: 'ceil' }\n * ) //=> '2 minutes'\n * ```\n *\n * - If `roundingMethod` is not specified, it now defaults to `round` instead of `floor`.\n *\n * - `unit` option now accepts one of the strings:\n * 'second', 'minute', 'hour', 'day', 'month' or 'year' instead of 's', 'm', 'h', 'd', 'M' or 'Y'\n *\n * ```javascript\n * // Before v2.0.0\n *\n * distanceInWordsStrict(\n * new Date(1986, 3, 4, 10, 32, 0),\n * new Date(1986, 3, 4, 10, 33, 1),\n * { unit: 'm' }\n * )\n *\n * // v2.0.0 onward\n *\n * formatDistanceStrict(\n * new Date(1986, 3, 4, 10, 33, 1),\n * new Date(1986, 3, 4, 10, 32, 0),\n * { unit: 'minute' }\n * )\n * ```\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.roundingMethod` must be 'floor', 'ceil' or 'round'\n * @throws {RangeError} `options.unit` must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = formatDistanceStrict(new Date(2014, 6, 2), new Date(2015, 0, 2))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00?\n * var result = formatDistanceStrict(\n * new Date(2015, 0, 1, 0, 0, 15),\n * new Date(2015, 0, 1, 0, 0, 0)\n * )\n * //=> '15 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = formatDistanceStrict(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n * addSuffix: true\n * })\n * //=> '1 year ago'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, in minutes?\n * var result = formatDistanceStrict(new Date(2016, 0, 1), new Date(2015, 0, 1), {\n * unit: 'minute'\n * })\n * //=> '525600 minutes'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 28 January 2015, in months, rounded up?\n * var result = formatDistanceStrict(new Date(2015, 0, 28), new Date(2015, 0, 1), {\n * unit: 'month',\n * roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = formatDistanceStrict(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n * locale: eoLocale\n * })\n * //=> '1 jaro'\n */\nexport default function formatDistanceStrict(\n dirtyDate,\n dirtyBaseDate,\n dirtyOptions\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale || defaultLocale\n\n if (!locale.formatDistance) {\n throw new RangeError('locale must contain localize.formatDistance property')\n }\n\n var comparison = compareAsc(dirtyDate, dirtyBaseDate)\n\n if (isNaN(comparison)) {\n throw new RangeError('Invalid time value')\n }\n\n var localizeOptions = cloneObject(options)\n localizeOptions.addSuffix = Boolean(options.addSuffix)\n localizeOptions.comparison = comparison\n\n var dateLeft\n var dateRight\n if (comparison > 0) {\n dateLeft = toDate(dirtyBaseDate)\n dateRight = toDate(dirtyDate)\n } else {\n dateLeft = toDate(dirtyDate)\n dateRight = toDate(dirtyBaseDate)\n }\n\n var roundingMethod =\n options.roundingMethod == null ? 'round' : String(options.roundingMethod)\n var roundingMethodFn\n\n if (roundingMethod === 'floor') {\n roundingMethodFn = Math.floor\n } else if (roundingMethod === 'ceil') {\n roundingMethodFn = Math.ceil\n } else if (roundingMethod === 'round') {\n roundingMethodFn = Math.round\n } else {\n throw new RangeError(\"roundingMethod must be 'floor', 'ceil' or 'round'\")\n }\n\n var seconds = differenceInSeconds(dateRight, dateLeft)\n var offsetInSeconds =\n (getTimezoneOffsetInMilliseconds(dateRight) -\n getTimezoneOffsetInMilliseconds(dateLeft)) /\n 1000\n var minutes = roundingMethodFn((seconds - offsetInSeconds) / 60)\n\n var unit\n if (options.unit == null) {\n if (minutes < 1) {\n unit = 'second'\n } else if (minutes < 60) {\n unit = 'minute'\n } else if (minutes < MINUTES_IN_DAY) {\n unit = 'hour'\n } else if (minutes < MINUTES_IN_MONTH) {\n unit = 'day'\n } else if (minutes < MINUTES_IN_YEAR) {\n unit = 'month'\n } else {\n unit = 'year'\n }\n } else {\n unit = String(options.unit)\n }\n\n // 0 up to 60 seconds\n if (unit === 'second') {\n return locale.formatDistance('xSeconds', seconds, localizeOptions)\n\n // 1 up to 60 mins\n } else if (unit === 'minute') {\n return locale.formatDistance('xMinutes', minutes, localizeOptions)\n\n // 1 up to 24 hours\n } else if (unit === 'hour') {\n var hours = roundingMethodFn(minutes / 60)\n return locale.formatDistance('xHours', hours, localizeOptions)\n\n // 1 up to 30 days\n } else if (unit === 'day') {\n var days = roundingMethodFn(minutes / MINUTES_IN_DAY)\n return locale.formatDistance('xDays', days, localizeOptions)\n\n // 1 up to 12 months\n } else if (unit === 'month') {\n var months = roundingMethodFn(minutes / MINUTES_IN_MONTH)\n return locale.formatDistance('xMonths', months, localizeOptions)\n\n // 1 year up to max Date\n } else if (unit === 'year') {\n var years = roundingMethodFn(minutes / MINUTES_IN_YEAR)\n return locale.formatDistance('xYears', years, localizeOptions)\n }\n\n throw new RangeError(\n \"unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\"\n )\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport format from '../format/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\n\n/**\n * @name formatRelative\n * @category Common Helpers\n * @summary Represent the date in words relative to the given base date.\n *\n * @description\n * Represent the date in words relative to the given base date.\n *\n * | Distance to the base date | Result |\n * |---------------------------|---------------------------|\n * | Previous 6 days | last Sunday at 04:30 AM |\n * | Last day | yesterday at 04:30 AM |\n * | Same day | today at 04:30 AM |\n * | Next day | tomorrow at 04:30 AM |\n * | Next 6 days | Sunday at 04:30 AM |\n * | Other | 12/31/2017 |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to format\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the date in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.locale` must contain `formatRelative` property\n */\nexport default function formatRelative(dirtyDate, dirtyBaseDate, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var baseDate = toDate(dirtyBaseDate)\n\n var options = dirtyOptions || {}\n var locale = options.locale || defaultLocale\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property')\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property')\n }\n\n if (!locale.formatRelative) {\n throw new RangeError('locale must contain formatRelative property')\n }\n\n var diff = differenceInCalendarDays(date, baseDate)\n\n if (isNaN(diff)) {\n throw new RangeError('Invalid time value')\n }\n\n var token\n if (diff < -6) {\n token = 'other'\n } else if (diff < -1) {\n token = 'lastWeek'\n } else if (diff < 0) {\n token = 'yesterday'\n } else if (diff < 1) {\n token = 'today'\n } else if (diff < 2) {\n token = 'tomorrow'\n } else if (diff < 7) {\n token = 'nextWeek'\n } else {\n token = 'other'\n }\n\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date))\n var utcBaseDate = subMilliseconds(\n baseDate,\n getTimezoneOffsetInMilliseconds(baseDate)\n )\n var formatStr = locale.formatRelative(token, utcDate, utcBaseDate, options)\n return format(date, formatStr, options)\n}\n","import toDate from '../toDate/index.js'\nimport toInteger from '../_lib/toInteger/index.js'\n\n/**\n * @name fromUnixTime\n * @category Timestamp Helpers\n * @summary Create a date from a Unix timestamp.\n *\n * @description\n * Create a date from a Unix timestamp.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Number} unixTime - the given Unix timestamp\n * @returns {Date} the date\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Create the date 29 February 2012 11:45:05:\n * var result = fromUnixTime(1330515905)\n * //=> Wed Feb 29 2012 11:45:05\n */\nexport default function fromUnixTime(dirtyUnixTime) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var unixTime = toInteger(dirtyUnixTime)\n\n return toDate(unixTime * 1000)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * var result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nexport default function getDay(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n return day\n}\n","import toDate from '../toDate/index.js'\nimport startOfYear from '../startOfYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * var result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport default function getDayOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var diff = differenceInCalendarDays(date, startOfYear(date))\n var dayOfYear = diff + 1\n return dayOfYear\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isLeapYear\n * @category Year Helpers\n * @summary Is the given date in the leap year?\n *\n * @description\n * Is the given date in the leap year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the leap year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2012 in the leap year?\n * var result = isLeapYear(new Date(2012, 8, 1))\n * //=> true\n */\nexport default function isLeapYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n","import toDate from '../toDate/index.js'\nimport isLeapYear from '../isLeapYear/index.js'\n\n/**\n * @name getDaysInYear\n * @category Year Helpers\n * @summary Get the number of days in a year of the given date.\n *\n * @description\n * Get the number of days in a year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in 2012?\n * var result = getDaysInYear(new Date(2012, 0, 1))\n * //=> 366\n */\nexport default function getDaysInYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n\n if (isNaN(date)) {\n return NaN\n }\n\n return isLeapYear(date) ? 366 : 365\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDecade\n * @category Decade Helpers\n * @summary Get the decade of the given date.\n *\n * @description\n * Get the decade of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year of decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which decade belongs 27 November 1942?\n * var result = getDecade(new Date(1942, 10, 27))\n * //=> 1940\n */\nexport default function getDecade(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n var decade = Math.floor(year / 10) * 10\n return decade\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * var result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\nexport default function getHours(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var hours = date.getHours()\n return hours\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * var result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport default function getISODay(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n\n if (day === 0) {\n day = 7\n }\n\n return day\n}\n","import toDate from '../toDate/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\nimport startOfISOWeekYear from '../startOfISOWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport default function getISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime()\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import startOfISOWeekYear from '../startOfISOWeekYear/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getISOWeeksInYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * @description\n * Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of ISO weeks in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many weeks are in ISO week-numbering year 2015?\n * var result = getISOWeeksInYear(new Date(2015, 1, 11))\n * //=> 53\n */\nexport default function getISOWeeksInYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var thisYear = startOfISOWeekYear(dirtyDate)\n var nextYear = startOfISOWeekYear(addWeeks(thisYear, 60))\n var diff = nextYear.valueOf() - thisYear.valueOf()\n // Round the number of weeks to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMilliseconds\n * @category Millisecond Helpers\n * @summary Get the milliseconds of the given date.\n *\n * @description\n * Get the milliseconds of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the milliseconds of 29 February 2012 11:45:05.123:\n * var result = getMilliseconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 123\n */\nexport default function getMilliseconds(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var milliseconds = date.getMilliseconds()\n return milliseconds\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * var result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\nexport default function getMinutes(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var minutes = date.getMinutes()\n return minutes\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * var result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport default function getMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var month = date.getMonth()\n return month\n}\n","import toDate from '../toDate/index.js'\n\nvar MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000\n\n/**\n * @name getOverlappingDaysInIntervals\n * @category Interval Helpers\n * @summary Get the number of days that overlap in two time intervals\n *\n * @description\n * Get the number of days that overlap in two time intervals\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `getOverlappingDaysInRanges` to `getOverlappingDaysInIntervals`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * getOverlappingDaysInRanges(\n * new Date(2014, 0, 10), new Date(2014, 0, 20),\n * new Date(2014, 0, 17), new Date(2014, 0, 21)\n * )\n *\n * // v2.0.0 onward\n *\n * getOverlappingDaysInIntervals(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * ```\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/Interval}\n * @returns {Number} the number of days that overlap in two time intervals\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals adds 1 for each started overlapping day:\n * getOverlappingDaysInIntervals(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> 3\n *\n * @example\n * // For non-overlapping time intervals returns 0:\n * getOverlappingDaysInIntervals(\n * { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n * { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> 0\n */\nexport default function getOverlappingDaysInIntervals(\n dirtyIntervalLeft,\n dirtyIntervalRight\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var intervalLeft = dirtyIntervalLeft || {}\n var intervalRight = dirtyIntervalRight || {}\n var leftStartTime = toDate(intervalLeft.start).getTime()\n var leftEndTime = toDate(intervalLeft.end).getTime()\n var rightStartTime = toDate(intervalRight.start).getTime()\n var rightEndTime = toDate(intervalRight.end).getTime()\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n throw new RangeError('Invalid interval')\n }\n\n var isOverlapping =\n leftStartTime < rightEndTime && rightStartTime < leftEndTime\n\n if (!isOverlapping) {\n return 0\n }\n\n var overlapStartDate =\n rightStartTime < leftStartTime ? leftStartTime : rightStartTime\n\n var overlapEndDate = rightEndTime > leftEndTime ? leftEndTime : rightEndTime\n\n var differenceInMs = overlapEndDate - overlapStartDate\n\n return Math.ceil(differenceInMs / MILLISECONDS_IN_DAY)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * var result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\nexport default function getSeconds(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var seconds = date.getSeconds()\n return seconds\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * var result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\nexport default function getTime(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var timestamp = date.getTime()\n return timestamp\n}\n","import getTime from '../getTime/index.js'\n\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * var result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport default function getUnixTime(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return Math.floor(getTime(dirtyDate) / 1000)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the local week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * var result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * var result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * var result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport default function getWeekYear(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeFirstWeekContainsDate =\n locale && locale.options && locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError(\n 'firstWeekContainsDate must be between 1 and 7 inclusively'\n )\n }\n\n var firstWeekOfNextYear = new Date(0)\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate)\n firstWeekOfNextYear.setHours(0, 0, 0, 0)\n var startOfNextYear = startOfWeek(firstWeekOfNextYear, dirtyOptions)\n\n var firstWeekOfThisYear = new Date(0)\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate)\n firstWeekOfThisYear.setHours(0, 0, 0, 0)\n var startOfThisYear = startOfWeek(firstWeekOfThisYear, dirtyOptions)\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year\n } else {\n return year - 1\n }\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getWeekYear from '../getWeekYear/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the start of a week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * var result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * var result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfWeekYear(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeFirstWeekContainsDate =\n locale && locale.options && locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n var year = getWeekYear(dirtyDate, dirtyOptions)\n var firstWeek = new Date(0)\n firstWeek.setFullYear(year, 0, firstWeekContainsDate)\n firstWeek.setHours(0, 0, 0, 0)\n var date = startOfWeek(firstWeek, dirtyOptions)\n return date\n}\n","import toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\nimport startOfWeekYear from '../startOfWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * var result = getISOWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport default function getWeek(dirtyDate, options) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var diff =\n startOfWeek(date, options).getTime() -\n startOfWeekYear(date, options).getTime()\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getDate from '../getDate/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\nimport getDay from '../getDay/index.js'\n\n/**\n * @name getWeekOfMonth\n * @category Week Helpers\n * @summary Get the week of the month of the given date.\n *\n * @description\n * Get the week of the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the week of month\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Which week of the month is 9 November 2017?\n * var result = getWeekOfMonth(new Date(2017, 10, 9))\n * //=> 2\n */\nexport default function getWeekOfMonth(date, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var startWeekDay = getDay(startOfMonth(date))\n var currentWeekDay = getDay(date)\n\n var startWeekDayWithOptions =\n startWeekDay < weekStartsOn ? 7 - weekStartsOn : startWeekDay\n var diff = startWeekDayWithOptions > currentWeekDay ? 7 - weekStartsOn : 0\n\n return Math.ceil((getDate(date) + diff) / 7)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * var result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var month = date.getMonth()\n date.setFullYear(date.getFullYear(), month + 1, 0)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import differenceInCalendarWeeks from '../differenceInCalendarWeeks/index.js'\nimport lastDayOfMonth from '../lastDayOfMonth/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\n\n/**\n * @name getWeeksInMonth\n * @category Week Helpers\n * @summary Get the number of calendar weeks a month spans.\n *\n * @description\n * Get the number of calendar weeks the month in the given date spans.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks does February 2015 span?\n * var result = getWeeksInMonth(new Date(2015, 1, 8))\n * //=> 4\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks does July 2017 span?\n * var result = getWeeksInMonth(new Date(2017, 6, 5), { weekStartsOn: 1 })\n * //=> 6\n */\nexport default function getWeeksInMonth(date, options) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return (\n differenceInCalendarWeeks(\n lastDayOfMonth(date),\n startOfMonth(date),\n options\n ) + 1\n )\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * var result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport default function getYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n return year\n}\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * var result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * var result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * var result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * var result = isDate({})\n * //=> false\n */\nexport default function isDate(value) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return (\n value instanceof Date ||\n (typeof value === 'object' &&\n Object.prototype.toString.call(value) === '[object Date]')\n )\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * var result = isEqual(\n * new Date(2014, 6, 2, 6, 30, 45, 0),\n * new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyLeftDate)\n var dateRight = toDate(dirtyRightDate)\n return dateLeft.getTime() === dateRight.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isFirstDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the first day of a month?\n *\n * @description\n * Is the given date the first day of a month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the first day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2014 the first day of a month?\n * var result = isFirstDayOfMonth(new Date(2014, 8, 1))\n * //=> true\n */\nexport default function isFirstDayOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDate() === 1\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isFriday\n * @category Weekday Helpers\n * @summary Is the given date Friday?\n *\n * @description\n * Is the given date Friday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Friday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 26 September 2014 Friday?\n * var result = isFriday(new Date(2014, 8, 26))\n * //=> true\n */\nexport default function isFriday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 5\n}\n","import toDate from '../toDate/index.js'\nimport endOfDay from '../endOfDay/index.js'\nimport endOfMonth from '../endOfMonth/index.js'\n\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * var result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport default function isLastDayOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n return endOfDay(date).getTime() === endOfMonth(date).getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isMonday\n * @category Weekday Helpers\n * @summary Is the given date Monday?\n *\n * @description\n * Is the given date Monday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 22 September 2014 Monday?\n * var result = isMonday(new Date(2014, 8, 22))\n * //=> true\n */\nexport default function isMonday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 1\n}\n","import startOfDay from '../startOfDay/index.js'\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day?\n *\n * @description\n * Are the given dates in the same day?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * var result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n */\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft)\n var dateRightStartOfDay = startOfDay(dirtyDateRight)\n\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * var result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nexport default function startOfHour(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setMinutes(0, 0, 0)\n return date\n}\n","import startOfHour from '../startOfHour/index.js'\n\n/**\n * @name isSameHour\n * @category Hour Helpers\n * @summary Are the given dates in the same hour?\n *\n * @description\n * Are the given dates in the same hour?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same hour\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 4 September 06:30:00 in the same hour?\n * var result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 6, 30))\n * //=> true\n */\nexport default function isSameHour(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfHour = startOfHour(dirtyDateLeft)\n var dateRightStartOfHour = startOfHour(dirtyDateRight)\n\n return dateLeftStartOfHour.getTime() === dateRightStartOfHour.getTime()\n}\n","import startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name isSameWeek\n * @category Week Helpers\n * @summary Are the given dates in the same week?\n *\n * @description\n * Are the given dates in the same week?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Boolean} the dates are in the same week\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Are 31 August 2014 and 4 September 2014 in the same week?\n * var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4))\n * //=> true\n *\n * @example\n * // If week starts with Monday,\n * // are 31 August 2014 and 4 September 2014 in the same week?\n * var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4), {\n * weekStartsOn: 1\n * })\n * //=> false\n */\nexport default function isSameWeek(\n dirtyDateLeft,\n dirtyDateRight,\n dirtyOptions\n) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfWeek = startOfWeek(dirtyDateLeft, dirtyOptions)\n var dateRightStartOfWeek = startOfWeek(dirtyDateRight, dirtyOptions)\n\n return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime()\n}\n","import isSameWeek from '../isSameWeek/index.js'\n\n/**\n * @name isSameISOWeek\n * @category ISO Week Helpers\n * @summary Are the given dates in the same ISO week?\n *\n * @description\n * Are the given dates in the same ISO week?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 September 2014 and 7 September 2014 in the same ISO week?\n * var result = isSameISOWeek(new Date(2014, 8, 1), new Date(2014, 8, 7))\n * //=> true\n */\nexport default function isSameISOWeek(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n return isSameWeek(dirtyDateLeft, dirtyDateRight, { weekStartsOn: 1 })\n}\n","import startOfISOWeekYear from '../startOfISOWeekYear/index.js'\n\n/**\n * @name isSameISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Are the given dates in the same ISO week-numbering year?\n *\n * @description\n * Are the given dates in the same ISO week-numbering year?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `isSameISOYear` to `isSameISOWeekYear`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week-numbering year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 29 December 2003 and 2 January 2005 in the same ISO week-numbering year?\n * var result = isSameISOWeekYear(new Date(2003, 11, 29), new Date(2005, 0, 2))\n * //=> true\n */\nexport default function isSameISOWeekYear(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfYear = startOfISOWeekYear(dirtyDateLeft)\n var dateRightStartOfYear = startOfISOWeekYear(dirtyDateRight)\n\n return dateLeftStartOfYear.getTime() === dateRightStartOfYear.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * var result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\nexport default function startOfMinute(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setSeconds(0, 0)\n return date\n}\n","import startOfMinute from '../startOfMinute/index.js'\n\n/**\n * @name isSameMinute\n * @category Minute Helpers\n * @summary Are the given dates in the same minute?\n *\n * @description\n * Are the given dates in the same minute?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same minute\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:00 and 4 September 2014 06:30:15\n * // in the same minute?\n * var result = isSameMinute(\n * new Date(2014, 8, 4, 6, 30),\n * new Date(2014, 8, 4, 6, 30, 15)\n * )\n * //=> true\n */\nexport default function isSameMinute(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfMinute = startOfMinute(dirtyDateLeft)\n var dateRightStartOfMinute = startOfMinute(dirtyDateRight)\n\n return dateLeftStartOfMinute.getTime() === dateRightStartOfMinute.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month?\n *\n * @description\n * Are the given dates in the same month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * var result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n return (\n dateLeft.getFullYear() === dateRight.getFullYear() &&\n dateLeft.getMonth() === dateRight.getMonth()\n )\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * var result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport default function startOfQuarter(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var currentMonth = date.getMonth()\n var month = currentMonth - (currentMonth % 3)\n date.setMonth(month, 1)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import startOfQuarter from '../startOfQuarter/index.js'\n\n/**\n * @name isSameQuarter\n * @category Quarter Helpers\n * @summary Are the given dates in the same year quarter?\n *\n * @description\n * Are the given dates in the same year quarter?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same quarter\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 January 2014 and 8 March 2014 in the same quarter?\n * var result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8))\n * //=> true\n */\nexport default function isSameQuarter(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfQuarter = startOfQuarter(dirtyDateLeft)\n var dateRightStartOfQuarter = startOfQuarter(dirtyDateRight)\n\n return dateLeftStartOfQuarter.getTime() === dateRightStartOfQuarter.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * var result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nexport default function startOfSecond(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setMilliseconds(0)\n return date\n}\n","import startOfSecond from '../startOfSecond/index.js'\n\n/**\n * @name isSameSecond\n * @category Second Helpers\n * @summary Are the given dates in the same second?\n *\n * @description\n * Are the given dates in the same second?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same second\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500\n * // in the same second?\n * var result = isSameSecond(\n * new Date(2014, 8, 4, 6, 30, 15),\n * new Date(2014, 8, 4, 6, 30, 15, 500)\n * )\n * //=> true\n */\nexport default function isSameSecond(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft)\n var dateRightStartOfSecond = startOfSecond(dirtyDateRight)\n\n return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * var result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isSameYear(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n return dateLeft.getFullYear() === dateRight.getFullYear()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSaturday\n * @category Weekday Helpers\n * @summary Is the given date Saturday?\n *\n * @description\n * Is the given date Saturday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 27 September 2014 Saturday?\n * var result = isSaturday(new Date(2014, 8, 27))\n * //=> true\n */\nexport default function isSaturday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 6\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isThursday\n * @category Weekday Helpers\n * @summary Is the given date Thursday?\n *\n * @description\n * Is the given date Thursday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Thursday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 25 September 2014 Thursday?\n * var result = isThursday(new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isThursday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 4\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isTuesday\n * @category Weekday Helpers\n * @summary Is the given date Tuesday?\n *\n * @description\n * Is the given date Tuesday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Tuesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 23 September 2014 Tuesday?\n * var result = isTuesday(new Date(2014, 8, 23))\n * //=> true\n */\nexport default function isTuesday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 2\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWednesday\n * @category Weekday Helpers\n * @summary Is the given date Wednesday?\n *\n * @description\n * Is the given date Wednesday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Wednesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 24 September 2014 Wednesday?\n * var result = isWednesday(new Date(2014, 8, 24))\n * //=> true\n */\nexport default function isWednesday(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return toDate(dirtyDate).getDay() === 3\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `isWithinRange` to `isWithinInterval`.\n * This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n * ```\n * 2.1.3\n * time interval\n * part of the time axis limited by two instants\n * ```\n *\n * Also, this function now accepts an object with `start` and `end` properties\n * instead of two arguments as an interval.\n * This function now throws `RangeError` if the start of the interval is after its end\n * or if any date in the interval is `Invalid Date`.\n *\n * ```javascript\n * // Before v2.0.0\n *\n * isWithinRange(\n * new Date(2014, 0, 3),\n * new Date(2014, 0, 1), new Date(2014, 0, 7)\n * )\n *\n * // v2.0.0 onward\n *\n * isWithinInterval(\n * new Date(2014, 0, 3),\n * { start: new Date(2014, 0, 1), end: new Date(2014, 0, 7) }\n * )\n * ```\n *\n * @param {Date|Number} date - the date to check\n * @param {Interval} interval - the interval to check\n * @returns {Boolean} the date is within the interval\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> false\n */\nexport default function isWithinInterval(dirtyDate, dirtyInterval) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var interval = dirtyInterval || {}\n var time = toDate(dirtyDate).getTime()\n var startTime = toDate(interval.start).getTime()\n var endTime = toDate(interval.end).getTime()\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(startTime <= endTime)) {\n throw new RangeError('Invalid interval')\n }\n\n return time >= startTime && time <= endTime\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfDecade\n * @category Decade Helpers\n * @summary Return the last day of a decade for the given date.\n *\n * @description\n * Return the last day of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a decade for 21 December 2012 21:12:00:\n * var result = lastDayOfDecade(new Date(2012, 11, 21, 21, 12, 00))\n * //=> Wed Dec 31 2019 00:00:00\n */\nexport default function lastDayOfDecade(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n var decade = 9 + Math.floor(year / 10) * 10\n date.setFullYear(decade + 1, 0, 0)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfWeek\n * @category Week Helpers\n * @summary Return the last day of a week for the given date.\n *\n * @description\n * Return the last day of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the last day of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The last day of a week for 2 September 2014 11:55:00:\n * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the last day of the week for 2 September 2014 11:55:00:\n * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfWeek(dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6')\n }\n\n var date = toDate(dirtyDate)\n var day = date.getDay()\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)\n\n date.setHours(0, 0, 0, 0)\n date.setDate(date.getDate() + diff)\n return date\n}\n","import lastDayOfWeek from '../lastDayOfWeek/index.js'\n\n/**\n * @name lastDayOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the last day of an ISO week for the given date.\n *\n * @description\n * Return the last day of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week for 2 September 2014 11:55:00:\n * var result = lastDayOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n return lastDayOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name lastDayOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the last day of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the last day of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `lastDayOfISOYear` to `lastDayOfISOWeekYear`.\n * \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n * This change makes the name consistent with\n * locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week-numbering year for 2 July 2005:\n * var result = lastDayOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 00:00:00\n */\nexport default function lastDayOfISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var year = getISOWeekYear(dirtyDate)\n var fourthOfJanuary = new Date(0)\n fourthOfJanuary.setFullYear(year + 1, 0, 4)\n fourthOfJanuary.setHours(0, 0, 0, 0)\n var date = startOfISOWeek(fourthOfJanuary)\n date.setDate(date.getDate() - 1)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfQuarter\n * @category Quarter Helpers\n * @summary Return the last day of a year quarter for the given date.\n *\n * @description\n * Return the last day of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the last day of a quarter\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The last day of a quarter for 2 September 2014 11:55:00:\n * var result = lastDayOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfQuarter(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var currentMonth = date.getMonth()\n var month = currentMonth - (currentMonth % 3) + 3\n date.setMonth(month, 0)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfYear\n * @category Year Helpers\n * @summary Return the last day of a year for the given date.\n *\n * @description\n * Return the last day of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a year for 2 September 2014 11:55:00:\n * var result = lastDayOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 00:00:00\n */\nexport default function lastDayOfYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n date.setFullYear(year + 1, 0, 0)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\nimport formatters from '../_lib/format/lightFormatters/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport isValid from '../isValid/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\n\n// This RegExp consists of three parts separated by `|`:\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\n/**\n * @name lightFormat\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. Unlike `format`,\n * `lightFormat` doesn't use locales and outputs date using the most popular tokens.\n *\n * > ⚠️ Please note that the `lightFormat` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples |\n * |---------------------------------|---------|-----------------------------------|\n * | AM, PM | a..aaa | AM, PM |\n * | | aaaa | a.m., p.m. |\n * | | aaaaa | a, p |\n * | Calendar year | y | 44, 1, 1900, 2017 |\n * | | yy | 44, 01, 00, 17 |\n * | | yyy | 044, 001, 000, 017 |\n * | | yyyy | 0044, 0001, 1900, 2017 |\n * | Month (formatting) | M | 1, 2, ..., 12 |\n * | | MM | 01, 02, ..., 12 |\n * | Day of month | d | 1, 2, ..., 31 |\n * | | dd | 01, 02, ..., 31 |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 |\n * | | hh | 01, 02, ..., 11, 12 |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 |\n * | | HH | 00, 01, 02, ..., 23 |\n * | Minute | m | 0, 1, ..., 59 |\n * | | mm | 00, 01, ..., 59 |\n * | Second | s | 0, 1, ..., 59 |\n * | | ss | 00, 01, ..., 59 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z |\n * | | XX | -0800, +0530, Z |\n * | | XXX | -08:00, +05:30, Z |\n * | | XXXX | -0800, +0530, Z, +123456 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 |\n * | | xx | -0800, +0530, +0000 |\n * | | xxx | -08:00, +05:30, +00:00 |\n * | | xxxx | -0800, +0530, +0000, +123456 |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 |\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * var result = format(new Date(2014, 1, 11), 'yyyy-MM-dd')\n * //=> '1987-02-11'\n */\nexport default function lightFormat(dirtyDate, dirtyFormatStr) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var formatStr = String(dirtyFormatStr)\n\n var originalDate = toDate(dirtyDate)\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value')\n }\n\n // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate)\n var utcDate = subMilliseconds(originalDate, timezoneOffset)\n\n var result = formatStr\n .match(formattingTokensRegExp)\n .map(function(substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\"\n }\n\n var firstCharacter = substring[0]\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring)\n }\n\n var formatter = formatters[firstCharacter]\n if (formatter) {\n return formatter(utcDate, substring, null, {})\n }\n\n return substring\n })\n .join('')\n\n return result\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `max` function now accepts an array of dates rather than spread arguments.\n *\n * ```javascript\n * // Before v2.0.0\n * var date1 = new Date(1989, 6, 10)\n * var date2 = new Date(1987, 1, 11)\n * var maxDate = max(date1, date2)\n *\n * // v2.0.0 onward:\n * var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n * var maxDate = max(dates)\n * ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * var result = max([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nexport default function max(dirtyDatesArray) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var datesArray\n // `dirtyDatesArray` is undefined or null\n if (dirtyDatesArray == null) {\n datesArray = []\n\n // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n } else if (typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray\n\n // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n } else {\n datesArray = Array.prototype.slice.call(dirtyDatesArray)\n }\n\n var result\n datesArray.forEach(function(dirtyDate) {\n var currentDate = toDate(dirtyDate)\n\n if (result === undefined || result < currentDate || isNaN(currentDate)) {\n result = currentDate\n }\n })\n\n return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name min\n * @category Common Helpers\n * @summary Return the earliest of the given dates.\n *\n * @description\n * Return the earliest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `min` function now accepts an array of dates rather than spread arguments.\n *\n * ```javascript\n * // Before v2.0.0\n * var date1 = new Date(1989, 6, 10)\n * var date2 = new Date(1987, 1, 11)\n * var minDate = min(date1, date2)\n *\n * // v2.0.0 onward:\n * var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n * var minDate = min(dates)\n * ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the earliest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the earliest?\n * var result = min([\n * new Date(1989, 6, 10),\n * new Date(1987, 1, 11),\n * new Date(1995, 6, 2),\n * new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\nexport default function min(dirtyDatesArray) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var datesArray\n // `dirtyDatesArray` is undefined or null\n if (dirtyDatesArray == null) {\n datesArray = []\n\n // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n } else if (typeof dirtyDatesArray.forEach === 'function') {\n datesArray = dirtyDatesArray\n\n // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n } else {\n datesArray = Array.prototype.slice.call(dirtyDatesArray)\n }\n\n var result\n datesArray.forEach(function(dirtyDate) {\n var currentDate = toDate(dirtyDate)\n\n if (result === undefined || result > currentDate || isNaN(currentDate)) {\n result = currentDate\n }\n })\n\n return result\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var date = toDate(dirtyDate)\n var day = toInteger(dirtyDay)\n\n var currentDay = date.getUTCDay()\n\n var remainder = day % 7\n var dayIndex = (remainder + 7) % 7\n\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n","import getUTCWeekYear from '../../../_lib/getUTCWeekYear/index.js'\nimport setUTCDay from '../../../_lib/setUTCDay/index.js'\nimport setUTCWeek from '../../../_lib/setUTCWeek/index.js'\nimport startOfUTCWeek from '../../../_lib/startOfUTCWeek/index.js'\nimport setUTCISODay from '../../../_lib/setUTCISODay/index.js'\nimport setUTCISOWeek from '../../../_lib/setUTCISOWeek/index.js'\nimport startOfUTCISOWeek from '../../../_lib/startOfUTCISOWeek/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar MILLISECONDS_IN_SECOND = 1000\n\nvar numericPatterns = {\n month: /^(1[0-2]|0?\\d)/, // 0 to 12\n date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n minute: /^[0-5]?\\d/, // 0 to 59\n second: /^[0-5]?\\d/, // 0 to 59\n\n singleDigit: /^\\d/, // 0 to 9\n twoDigits: /^\\d{1,2}/, // 0 to 99\n threeDigits: /^\\d{1,3}/, // 0 to 999\n fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n anyDigitsSigned: /^-?\\d+/,\n singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n}\n\nvar timezonePatterns = {\n basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n}\n\nfunction parseNumericPattern(pattern, string, valueCallback) {\n var matchResult = string.match(pattern)\n\n if (!matchResult) {\n return null\n }\n\n var value = parseInt(matchResult[0], 10)\n\n return {\n value: valueCallback ? valueCallback(value) : value,\n rest: string.slice(matchResult[0].length)\n }\n}\n\nfunction parseTimezonePattern(pattern, string) {\n var matchResult = string.match(pattern)\n\n if (!matchResult) {\n return null\n }\n\n // Input is 'Z'\n if (matchResult[0] === 'Z') {\n return {\n value: 0,\n rest: string.slice(1)\n }\n }\n\n var sign = matchResult[1] === '+' ? 1 : -1\n var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0\n var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0\n var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0\n\n return {\n value:\n sign *\n (hours * MILLISECONDS_IN_HOUR +\n minutes * MILLISECONDS_IN_MINUTE +\n seconds * MILLISECONDS_IN_SECOND),\n rest: string.slice(matchResult[0].length)\n }\n}\n\nfunction parseAnyDigitsSigned(string, valueCallback) {\n return parseNumericPattern(\n numericPatterns.anyDigitsSigned,\n string,\n valueCallback\n )\n}\n\nfunction parseNDigits(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(\n numericPatterns.singleDigit,\n string,\n valueCallback\n )\n case 2:\n return parseNumericPattern(\n numericPatterns.twoDigits,\n string,\n valueCallback\n )\n case 3:\n return parseNumericPattern(\n numericPatterns.threeDigits,\n string,\n valueCallback\n )\n case 4:\n return parseNumericPattern(\n numericPatterns.fourDigits,\n string,\n valueCallback\n )\n default:\n return parseNumericPattern(\n new RegExp('^\\\\d{1,' + n + '}'),\n string,\n valueCallback\n )\n }\n}\n\nfunction parseNDigitsSigned(n, string, valueCallback) {\n switch (n) {\n case 1:\n return parseNumericPattern(\n numericPatterns.singleDigitSigned,\n string,\n valueCallback\n )\n case 2:\n return parseNumericPattern(\n numericPatterns.twoDigitsSigned,\n string,\n valueCallback\n )\n case 3:\n return parseNumericPattern(\n numericPatterns.threeDigitsSigned,\n string,\n valueCallback\n )\n case 4:\n return parseNumericPattern(\n numericPatterns.fourDigitsSigned,\n string,\n valueCallback\n )\n default:\n return parseNumericPattern(\n new RegExp('^-?\\\\d{1,' + n + '}'),\n string,\n valueCallback\n )\n }\n}\n\nfunction dayPeriodEnumToHours(enumValue) {\n switch (enumValue) {\n case 'morning':\n return 4\n case 'evening':\n return 17\n case 'pm':\n case 'noon':\n case 'afternoon':\n return 12\n case 'am':\n case 'midnight':\n case 'night':\n default:\n return 0\n }\n}\n\nfunction normalizeTwoDigitYear(twoDigitYear, currentYear) {\n var isCommonEra = currentYear > 0\n // Absolute number of the current year:\n // 1 -> 1 AC\n // 0 -> 1 BC\n // -1 -> 2 BC\n var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear\n\n var result\n if (absCurrentYear <= 50) {\n result = twoDigitYear || 100\n } else {\n var rangeEnd = absCurrentYear + 50\n var rangeEndCentury = Math.floor(rangeEnd / 100) * 100\n var isPreviousCentury = twoDigitYear >= rangeEnd % 100\n result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0)\n }\n\n return isCommonEra ? result : 1 - result\n}\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\n// User for validation\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O* | Timezone (GMT) |\n * | p | | P | |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z* | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n */\nvar parsers = {\n // Era\n G: {\n priority: 140,\n parse: function(string, token, match, options) {\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return (\n match.era(string, { width: 'abbreviated' }) ||\n match.era(string, { width: 'narrow' })\n )\n // A, B\n case 'GGGGG':\n return match.era(string, { width: 'narrow' })\n // Anno Domini, Before Christ\n case 'GGGG':\n default:\n return (\n match.era(string, { width: 'wide' }) ||\n match.era(string, { width: 'abbreviated' }) ||\n match.era(string, { width: 'narrow' })\n )\n }\n },\n set: function(date, flags, value, options) {\n // Sets year 10 BC if BC, or 10 AC if AC\n date.setUTCFullYear(value === 1 ? 10 : -9, 0, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Year\n y: {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n priority: 130,\n parse: function(string, token, match, options) {\n var valueCallback = function(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'yy'\n }\n }\n\n switch (token) {\n case 'y':\n return parseNDigits(4, string, valueCallback)\n case 'yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n })\n default:\n return parseNDigits(token.length, string, valueCallback)\n }\n },\n validate: function(date, value, options) {\n return value.isTwoDigitYear || value.year > 0\n },\n set: function(date, flags, value, options) {\n var currentYear = getUTCWeekYear(date, options)\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear\n )\n date.setUTCFullYear(normalizedTwoDigitYear, 0, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n\n var year = currentYear > 0 ? value.year : 1 - value.year\n date.setUTCFullYear(year, 0, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Local week-numbering year\n Y: {\n priority: 130,\n parse: function(string, token, match, options) {\n var valueCallback = function(year) {\n return {\n year: year,\n isTwoDigitYear: token === 'YY'\n }\n }\n\n switch (token) {\n case 'Y':\n return parseNDigits(4, string, valueCallback)\n case 'Yo':\n return match.ordinalNumber(string, {\n unit: 'year',\n valueCallback: valueCallback\n })\n default:\n return parseNDigits(token.length, string, valueCallback)\n }\n },\n validate: function(date, value, options) {\n return value.isTwoDigitYear || value.year > 0\n },\n set: function(date, flags, value, options) {\n var currentYear = date.getUTCFullYear()\n\n if (value.isTwoDigitYear) {\n var normalizedTwoDigitYear = normalizeTwoDigitYear(\n value.year,\n currentYear\n )\n date.setUTCFullYear(\n normalizedTwoDigitYear,\n 0,\n options.firstWeekContainsDate\n )\n date.setUTCHours(0, 0, 0, 0)\n return startOfUTCWeek(date, options)\n }\n\n var year = currentYear > 0 ? value.year : 1 - value.year\n date.setUTCFullYear(year, 0, options.firstWeekContainsDate)\n date.setUTCHours(0, 0, 0, 0)\n return startOfUTCWeek(date, options)\n }\n },\n\n // ISO week-numbering year\n R: {\n priority: 130,\n parse: function(string, token, match, options) {\n if (token === 'R') {\n return parseNDigitsSigned(4, string)\n }\n\n return parseNDigitsSigned(token.length, string)\n },\n set: function(date, flags, value, options) {\n var firstWeekOfYear = new Date(0)\n firstWeekOfYear.setUTCFullYear(value, 0, 4)\n firstWeekOfYear.setUTCHours(0, 0, 0, 0)\n return startOfUTCISOWeek(firstWeekOfYear)\n }\n },\n\n // Extended year\n u: {\n priority: 130,\n parse: function(string, token, match, options) {\n if (token === 'u') {\n return parseNDigitsSigned(4, string)\n }\n\n return parseNDigitsSigned(token.length, string)\n },\n set: function(date, flags, value, options) {\n date.setUTCFullYear(value, 0, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Quarter\n Q: {\n priority: 120,\n parse: function(string, token, match, options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n case 'QQ': // 01, 02, 03, 04\n return parseNDigits(token.length, string)\n // 1st, 2nd, 3rd, 4th\n case 'Qo':\n return match.ordinalNumber(string, { unit: 'quarter' })\n // Q1, Q2, Q3, Q4\n case 'QQQ':\n return (\n match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.quarter(string, { width: 'narrow', context: 'formatting' })\n )\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'QQQQQ':\n return match.quarter(string, {\n width: 'narrow',\n context: 'formatting'\n })\n // 1st quarter, 2nd quarter, ...\n case 'QQQQ':\n default:\n return (\n match.quarter(string, { width: 'wide', context: 'formatting' }) ||\n match.quarter(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.quarter(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 4\n },\n set: function(date, flags, value, options) {\n date.setUTCMonth((value - 1) * 3, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Stand-alone quarter\n q: {\n priority: 120,\n parse: function(string, token, match, options) {\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n case 'qq': // 01, 02, 03, 04\n return parseNDigits(token.length, string)\n // 1st, 2nd, 3rd, 4th\n case 'qo':\n return match.ordinalNumber(string, { unit: 'quarter' })\n // Q1, Q2, Q3, Q4\n case 'qqq':\n return (\n match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.quarter(string, { width: 'narrow', context: 'standalone' })\n )\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case 'qqqqq':\n return match.quarter(string, {\n width: 'narrow',\n context: 'standalone'\n })\n // 1st quarter, 2nd quarter, ...\n case 'qqqq':\n default:\n return (\n match.quarter(string, { width: 'wide', context: 'standalone' }) ||\n match.quarter(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.quarter(string, { width: 'narrow', context: 'standalone' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 4\n },\n set: function(date, flags, value, options) {\n date.setUTCMonth((value - 1) * 3, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Month\n M: {\n priority: 110,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n return value - 1\n }\n\n switch (token) {\n // 1, 2, ..., 12\n case 'M':\n return parseNumericPattern(\n numericPatterns.month,\n string,\n valueCallback\n )\n // 01, 02, ..., 12\n case 'MM':\n return parseNDigits(2, string, valueCallback)\n // 1st, 2nd, ..., 12th\n case 'Mo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n })\n // Jan, Feb, ..., Dec\n case 'MMM':\n return (\n match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.month(string, { width: 'narrow', context: 'formatting' })\n )\n // J, F, ..., D\n case 'MMMMM':\n return match.month(string, { width: 'narrow', context: 'formatting' })\n // January, February, ..., December\n case 'MMMM':\n default:\n return (\n match.month(string, { width: 'wide', context: 'formatting' }) ||\n match.month(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.month(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 11\n },\n set: function(date, flags, value, options) {\n date.setUTCMonth(value, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Stand-alone month\n L: {\n priority: 110,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n return value - 1\n }\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return parseNumericPattern(\n numericPatterns.month,\n string,\n valueCallback\n )\n // 01, 02, ..., 12\n case 'LL':\n return parseNDigits(2, string, valueCallback)\n // 1st, 2nd, ..., 12th\n case 'Lo':\n return match.ordinalNumber(string, {\n unit: 'month',\n valueCallback: valueCallback\n })\n // Jan, Feb, ..., Dec\n case 'LLL':\n return (\n match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.month(string, { width: 'narrow', context: 'standalone' })\n )\n // J, F, ..., D\n case 'LLLLL':\n return match.month(string, { width: 'narrow', context: 'standalone' })\n // January, February, ..., December\n case 'LLLL':\n default:\n return (\n match.month(string, { width: 'wide', context: 'standalone' }) ||\n match.month(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.month(string, { width: 'narrow', context: 'standalone' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 11\n },\n set: function(date, flags, value, options) {\n date.setUTCMonth(value, 1)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Local week of year\n w: {\n priority: 100,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'w':\n return parseNumericPattern(numericPatterns.week, string)\n case 'wo':\n return match.ordinalNumber(string, { unit: 'week' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 53\n },\n set: function(date, flags, value, options) {\n return startOfUTCWeek(setUTCWeek(date, value, options), options)\n }\n },\n\n // ISO week of year\n I: {\n priority: 100,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'I':\n return parseNumericPattern(numericPatterns.week, string)\n case 'Io':\n return match.ordinalNumber(string, { unit: 'week' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 53\n },\n set: function(date, flags, value, options) {\n return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options)\n }\n },\n\n // Day of the month\n d: {\n priority: 90,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'd':\n return parseNumericPattern(numericPatterns.date, string)\n case 'do':\n return match.ordinalNumber(string, { unit: 'date' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n var year = date.getUTCFullYear()\n var isLeapYear = isLeapYearIndex(year)\n var month = date.getUTCMonth()\n if (isLeapYear) {\n return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month]\n } else {\n return value >= 1 && value <= DAYS_IN_MONTH[month]\n }\n },\n set: function(date, flags, value, options) {\n date.setUTCDate(value)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Day of year\n D: {\n priority: 90,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'D':\n case 'DD':\n return parseNumericPattern(numericPatterns.dayOfYear, string)\n case 'Do':\n return match.ordinalNumber(string, { unit: 'date' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n var year = date.getUTCFullYear()\n var isLeapYear = isLeapYearIndex(year)\n if (isLeapYear) {\n return value >= 1 && value <= 366\n } else {\n return value >= 1 && value <= 365\n }\n },\n set: function(date, flags, value, options) {\n date.setUTCMonth(0, value)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Day of week\n E: {\n priority: 90,\n parse: function(string, token, match, options) {\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return (\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n // T\n case 'EEEEE':\n return match.day(string, { width: 'narrow', context: 'formatting' })\n // Tu\n case 'EEEEEE':\n return (\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n // Tuesday\n case 'EEEE':\n default:\n return (\n match.day(string, { width: 'wide', context: 'formatting' }) ||\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 6\n },\n set: function(date, flags, value, options) {\n date = setUTCDay(date, value, options)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Local day of week\n e: {\n priority: 90,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays\n }\n\n switch (token) {\n // 3\n case 'e':\n case 'ee': // 03\n return parseNDigits(token.length, string, valueCallback)\n // 3rd\n case 'eo':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n })\n // Tue\n case 'eee':\n return (\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n // T\n case 'eeeee':\n return match.day(string, { width: 'narrow', context: 'formatting' })\n // Tu\n case 'eeeeee':\n return (\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n // Tuesday\n case 'eeee':\n default:\n return (\n match.day(string, { width: 'wide', context: 'formatting' }) ||\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.day(string, { width: 'short', context: 'formatting' }) ||\n match.day(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 6\n },\n set: function(date, flags, value, options) {\n date = setUTCDay(date, value, options)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // Stand-alone local day of week\n c: {\n priority: 90,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n var wholeWeekDays = Math.floor((value - 1) / 7) * 7\n return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays\n }\n\n switch (token) {\n // 3\n case 'c':\n case 'cc': // 03\n return parseNDigits(token.length, string, valueCallback)\n // 3rd\n case 'co':\n return match.ordinalNumber(string, {\n unit: 'day',\n valueCallback: valueCallback\n })\n // Tue\n case 'ccc':\n return (\n match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.day(string, { width: 'short', context: 'standalone' }) ||\n match.day(string, { width: 'narrow', context: 'standalone' })\n )\n // T\n case 'ccccc':\n return match.day(string, { width: 'narrow', context: 'standalone' })\n // Tu\n case 'cccccc':\n return (\n match.day(string, { width: 'short', context: 'standalone' }) ||\n match.day(string, { width: 'narrow', context: 'standalone' })\n )\n // Tuesday\n case 'cccc':\n default:\n return (\n match.day(string, { width: 'wide', context: 'standalone' }) ||\n match.day(string, {\n width: 'abbreviated',\n context: 'standalone'\n }) ||\n match.day(string, { width: 'short', context: 'standalone' }) ||\n match.day(string, { width: 'narrow', context: 'standalone' })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 6\n },\n set: function(date, flags, value, options) {\n date = setUTCDay(date, value, options)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // ISO day of week\n i: {\n priority: 90,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n if (value === 0) {\n return 7\n }\n return value\n }\n\n switch (token) {\n // 2\n case 'i':\n case 'ii': // 02\n return parseNDigits(token.length, string)\n // 2nd\n case 'io':\n return match.ordinalNumber(string, { unit: 'day' })\n // Tue\n case 'iii':\n return (\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n })\n )\n // T\n case 'iiiii':\n return match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n })\n // Tu\n case 'iiiiii':\n return (\n match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n })\n )\n // Tuesday\n case 'iiii':\n default:\n return (\n match.day(string, {\n width: 'wide',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'abbreviated',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'short',\n context: 'formatting',\n valueCallback: valueCallback\n }) ||\n match.day(string, {\n width: 'narrow',\n context: 'formatting',\n valueCallback: valueCallback\n })\n )\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 7\n },\n set: function(date, flags, value, options) {\n date = setUTCISODay(date, value, options)\n date.setUTCHours(0, 0, 0, 0)\n return date\n }\n },\n\n // AM or PM\n a: {\n priority: 80,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'a':\n case 'aa':\n case 'aaa':\n return (\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n case 'aaaaa':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'aaaa':\n default:\n return (\n match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n set: function(date, flags, value, options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n return date\n }\n },\n\n // AM, PM, midnight\n b: {\n priority: 80,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'b':\n case 'bb':\n case 'bbb':\n return (\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n case 'bbbbb':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'bbbb':\n default:\n return (\n match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n set: function(date, flags, value, options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n return date\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: {\n priority: 80,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return (\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n case 'BBBBB':\n return match.dayPeriod(string, {\n width: 'narrow',\n context: 'formatting'\n })\n case 'BBBB':\n default:\n return (\n match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n match.dayPeriod(string, {\n width: 'abbreviated',\n context: 'formatting'\n }) ||\n match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n )\n }\n },\n set: function(date, flags, value, options) {\n date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n return date\n }\n },\n\n // Hour [1-12]\n h: {\n priority: 70,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'h':\n return parseNumericPattern(numericPatterns.hour12h, string)\n case 'ho':\n return match.ordinalNumber(string, { unit: 'hour' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 12\n },\n set: function(date, flags, value, options) {\n var isPM = date.getUTCHours() >= 12\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0)\n } else if (!isPM && value === 12) {\n date.setUTCHours(0, 0, 0, 0)\n } else {\n date.setUTCHours(value, 0, 0, 0)\n }\n return date\n }\n },\n\n // Hour [0-23]\n H: {\n priority: 70,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'H':\n return parseNumericPattern(numericPatterns.hour23h, string)\n case 'Ho':\n return match.ordinalNumber(string, { unit: 'hour' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 23\n },\n set: function(date, flags, value, options) {\n date.setUTCHours(value, 0, 0, 0)\n return date\n }\n },\n\n // Hour [0-11]\n K: {\n priority: 70,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'K':\n return parseNumericPattern(numericPatterns.hour11h, string)\n case 'Ko':\n return match.ordinalNumber(string, { unit: 'hour' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 11\n },\n set: function(date, flags, value, options) {\n var isPM = date.getUTCHours() >= 12\n if (isPM && value < 12) {\n date.setUTCHours(value + 12, 0, 0, 0)\n } else {\n date.setUTCHours(value, 0, 0, 0)\n }\n return date\n }\n },\n\n // Hour [1-24]\n k: {\n priority: 70,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'k':\n return parseNumericPattern(numericPatterns.hour24h, string)\n case 'ko':\n return match.ordinalNumber(string, { unit: 'hour' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 1 && value <= 24\n },\n set: function(date, flags, value, options) {\n var hours = value <= 24 ? value % 24 : value\n date.setUTCHours(hours, 0, 0, 0)\n return date\n }\n },\n\n // Minute\n m: {\n priority: 60,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'm':\n return parseNumericPattern(numericPatterns.minute, string)\n case 'mo':\n return match.ordinalNumber(string, { unit: 'minute' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 59\n },\n set: function(date, flags, value, options) {\n date.setUTCMinutes(value, 0, 0)\n return date\n }\n },\n\n // Second\n s: {\n priority: 50,\n parse: function(string, token, match, options) {\n switch (token) {\n case 's':\n return parseNumericPattern(numericPatterns.second, string)\n case 'so':\n return match.ordinalNumber(string, { unit: 'second' })\n default:\n return parseNDigits(token.length, string)\n }\n },\n validate: function(date, value, options) {\n return value >= 0 && value <= 59\n },\n set: function(date, flags, value, options) {\n date.setUTCSeconds(value, 0)\n return date\n }\n },\n\n // Fraction of second\n S: {\n priority: 30,\n parse: function(string, token, match, options) {\n var valueCallback = function(value) {\n return Math.floor(value * Math.pow(10, -token.length + 3))\n }\n return parseNDigits(token.length, string, valueCallback)\n },\n set: function(date, flags, value, options) {\n date.setUTCMilliseconds(value)\n return date\n }\n },\n\n // Timezone (ISO-8601. +00:00 is `'Z'`)\n X: {\n priority: 10,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'X':\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n string\n )\n case 'XX':\n return parseTimezonePattern(timezonePatterns.basic, string)\n case 'XXXX':\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n string\n )\n case 'XXXXX':\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n string\n )\n case 'XXX':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string)\n }\n },\n set: function(date, flags, value, options) {\n if (flags.timestampIsSet) {\n return date\n }\n return new Date(date.getTime() - value)\n }\n },\n\n // Timezone (ISO-8601)\n x: {\n priority: 10,\n parse: function(string, token, match, options) {\n switch (token) {\n case 'x':\n return parseTimezonePattern(\n timezonePatterns.basicOptionalMinutes,\n string\n )\n case 'xx':\n return parseTimezonePattern(timezonePatterns.basic, string)\n case 'xxxx':\n return parseTimezonePattern(\n timezonePatterns.basicOptionalSeconds,\n string\n )\n case 'xxxxx':\n return parseTimezonePattern(\n timezonePatterns.extendedOptionalSeconds,\n string\n )\n case 'xxx':\n default:\n return parseTimezonePattern(timezonePatterns.extended, string)\n }\n },\n set: function(date, flags, value, options) {\n if (flags.timestampIsSet) {\n return date\n }\n return new Date(date.getTime() - value)\n }\n },\n\n // Seconds timestamp\n t: {\n priority: 40,\n parse: function(string, token, match, options) {\n return parseAnyDigitsSigned(string)\n },\n set: function(date, flags, value, options) {\n return [new Date(value * 1000), { timestampIsSet: true }]\n }\n },\n\n // Milliseconds timestamp\n T: {\n priority: 20,\n parse: function(string, token, match, options) {\n return parseAnyDigitsSigned(string)\n },\n set: function(date, flags, value, options) {\n return [new Date(value), { timestampIsSet: true }]\n }\n }\n}\n\nexport default parsers\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport getUTCWeek from '../getUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var week = toInteger(dirtyWeek)\n var diff = getUTCWeek(date, options) - week\n date.setUTCDate(date.getUTCDate() - diff * 7)\n return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport getUTCISOWeek from '../getUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var isoWeek = toInteger(dirtyISOWeek)\n var diff = getUTCISOWeek(date) - isoWeek\n date.setUTCDate(date.getUTCDate() - diff * 7)\n return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var day = toInteger(dirtyDay)\n\n if (day % 7 === 0) {\n day = day - 7\n }\n\n var weekStartsOn = 1\n var date = toDate(dirtyDate)\n var currentDay = date.getUTCDay()\n\n var remainder = day % 7\n var dayIndex = (remainder + 7) % 7\n\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport assign from '../_lib/assign/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport parsers from './_lib/parsers/index.js'\nimport {\n isProtectedToken,\n throwProtectedError\n} from '../_lib/protectedTokens/index.js'\n\nvar TIMEZONE_UNIT_PRIORITY = 10\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\nvar notWhitespaceRegExp = /\\S/\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Accepted format string patterns:\n * | Unit |Prior| Pattern | Result examples | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era | 140 | G..GGG | AD, BC | |\n * | | | GGGG | Anno Domini, Before Christ | 2 |\n * | | | GGGGG | A, B | |\n * | Calendar year | 130 | y | 44, 1, 1900, 2017, 9999 | 4 |\n * | | | yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | yy | 44, 01, 00, 17 | 4 |\n * | | | yyy | 044, 001, 123, 999 | 4 |\n * | | | yyyy | 0044, 0001, 1900, 2017 | 4 |\n * | | | yyyyy | ... | 2,4 |\n * | Local week-numbering year | 130 | Y | 44, 1, 1900, 2017, 9000 | 4 |\n * | | | Yo | 44th, 1st, 1900th, 9999999th | 4,5 |\n * | | | YY | 44, 01, 00, 17 | 4,6 |\n * | | | YYY | 044, 001, 123, 999 | 4 |\n * | | | YYYY | 0044, 0001, 1900, 2017 | 4,6 |\n * | | | YYYYY | ... | 2,4 |\n * | ISO week-numbering year | 130 | R | -43, 1, 1900, 2017, 9999, -9999 | 4,5 |\n * | | | RR | -43, 01, 00, 17 | 4,5 |\n * | | | RRR | -043, 001, 123, 999, -999 | 4,5 |\n * | | | RRRR | -0043, 0001, 2017, 9999, -9999 | 4,5 |\n * | | | RRRRR | ... | 2,4,5 |\n * | Extended year | 130 | u | -43, 1, 1900, 2017, 9999, -999 | 4 |\n * | | | uu | -43, 01, 99, -99 | 4 |\n * | | | uuu | -043, 001, 123, 999, -999 | 4 |\n * | | | uuuu | -0043, 0001, 2017, 9999, -9999 | 4 |\n * | | | uuuuu | ... | 2,4 |\n * | Quarter (formatting) | 120 | Q | 1, 2, 3, 4 | |\n * | | | Qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | QQ | 01, 02, 03, 04 | |\n * | | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | 120 | q | 1, 2, 3, 4 | |\n * | | | qo | 1st, 2nd, 3rd, 4th | 5 |\n * | | | qq | 01, 02, 03, 04 | |\n * | | | qqq | Q1, Q2, Q3, Q4 | |\n * | | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | | qqqqq | 1, 2, 3, 4 | 3 |\n * | Month (formatting) | 110 | M | 1, 2, ..., 12 | |\n * | | | Mo | 1st, 2nd, ..., 12th | 5 |\n * | | | MM | 01, 02, ..., 12 | |\n * | | | MMM | Jan, Feb, ..., Dec | |\n * | | | MMMM | January, February, ..., December | 2 |\n * | | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | 110 | L | 1, 2, ..., 12 | |\n * | | | Lo | 1st, 2nd, ..., 12th | 5 |\n * | | | LL | 01, 02, ..., 12 | |\n * | | | LLL | Jan, Feb, ..., Dec | |\n * | | | LLLL | January, February, ..., December | 2 |\n * | | | LLLLL | J, F, ..., D | |\n * | Local week of year | 100 | w | 1, 2, ..., 53 | |\n * | | | wo | 1st, 2nd, ..., 53th | 5 |\n * | | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | 100 | I | 1, 2, ..., 53 | 5 |\n * | | | Io | 1st, 2nd, ..., 53th | 5 |\n * | | | II | 01, 02, ..., 53 | 5 |\n * | Day of month | 90 | d | 1, 2, ..., 31 | |\n * | | | do | 1st, 2nd, ..., 31st | 5 |\n * | | | dd | 01, 02, ..., 31 | |\n * | Day of year | 90 | D | 1, 2, ..., 365, 366 | 6 |\n * | | | Do | 1st, 2nd, ..., 365th, 366th | 5 |\n * | | | DD | 01, 02, ..., 365, 366 | 6 |\n * | | | DDD | 001, 002, ..., 365, 366 | |\n * | | | DDDD | ... | 2 |\n * | Day of week (formatting) | 90 | E..EEE | Mon, Tue, Wed, ..., Su | |\n * | | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | | EEEEE | M, T, W, T, F, S, S | |\n * | | | EEEEEE | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | ISO day of week (formatting) | 90 | i | 1, 2, 3, ..., 7 | 5 |\n * | | | io | 1st, 2nd, ..., 7th | 5 |\n * | | | ii | 01, 02, ..., 07 | 5 |\n * | | | iii | Mon, Tue, Wed, ..., Su | 5 |\n * | | | iiii | Monday, Tuesday, ..., Sunday | 2,5 |\n * | | | iiiii | M, T, W, T, F, S, S | 5 |\n * | | | iiiiii | Mo, Tu, We, Th, Fr, Su, Sa | 5 |\n * | Local day of week (formatting) | 90 | e | 2, 3, 4, ..., 1 | |\n * | | | eo | 2nd, 3rd, ..., 1st | 5 |\n * | | | ee | 02, 03, ..., 01 | |\n * | | | eee | Mon, Tue, Wed, ..., Su | |\n * | | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | | eeeee | M, T, W, T, F, S, S | |\n * | | | eeeeee | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | Local day of week (stand-alone) | 90 | c | 2, 3, 4, ..., 1 | |\n * | | | co | 2nd, 3rd, ..., 1st | 5 |\n * | | | cc | 02, 03, ..., 01 | |\n * | | | ccc | Mon, Tue, Wed, ..., Su | |\n * | | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | | ccccc | M, T, W, T, F, S, S | |\n * | | | cccccc | Mo, Tu, We, Th, Fr, Su, Sa | |\n * | AM, PM | 80 | a..aaa | AM, PM | |\n * | | | aaaa | a.m., p.m. | 2 |\n * | | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | 80 | b..bbb | AM, PM, noon, midnight | |\n * | | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | | bbbbb | a, p, n, mi | |\n * | Flexible day period | 80 | B..BBB | at night, in the morning, ... | |\n * | | | BBBB | at night, in the morning, ... | 2 |\n * | | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | 70 | h | 1, 2, ..., 11, 12 | |\n * | | | ho | 1st, 2nd, ..., 11th, 12th | 5 |\n * | | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | 70 | H | 0, 1, 2, ..., 23 | |\n * | | | Ho | 0th, 1st, 2nd, ..., 23rd | 5 |\n * | | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | 70 | K | 1, 2, ..., 11, 0 | |\n * | | | Ko | 1st, 2nd, ..., 11th, 0th | 5 |\n * | | | KK | 1, 2, ..., 11, 0 | |\n * | Hour [1-24] | 70 | k | 24, 1, 2, ..., 23 | |\n * | | | ko | 24th, 1st, 2nd, ..., 23rd | 5 |\n * | | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | 60 | m | 0, 1, ..., 59 | |\n * | | | mo | 0th, 1st, ..., 59th | 5 |\n * | | | mm | 00, 01, ..., 59 | |\n * | Second | 50 | s | 0, 1, ..., 59 | |\n * | | | so | 0th, 1st, ..., 59th | 5 |\n * | | | ss | 00, 01, ..., 59 | |\n * | Seconds timestamp | 40 | t | 512969520 | |\n * | | | tt | ... | 2 |\n * | Fraction of second | 30 | S | 0, 1, ..., 9 | |\n * | | | SS | 00, 01, ..., 99 | |\n * | | | SSS | 000, 0001, ..., 999 | |\n * | | | SSSS | ... | 2 |\n * | Milliseconds timestamp | 20 | T | 512969520900 | |\n * | | | TT | ... | 2 |\n * | Timezone (ISO-8601 w/ Z) | 10 | X | -08, +0530, Z | |\n * | | | XX | -0800, +0530, Z | |\n * | | | XXX | -08:00, +05:30, Z | |\n * | | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | 10 | x | -08, +0530, +00 | |\n * | | | xx | -0800, +0530, +0000 | |\n * | | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular.\n * In `format` function, they will produce different result:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table:\n * - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n * as wide as the sequence\n * - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n * These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` will try to guess the century of two digit year by proximity with `baseDate`:\n *\n * `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n * `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n * while `uu` will just assign the year as is:\n *\n * `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n * `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n * and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `o`: ordinal number modifier\n *\n * 6. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `baseDate` which works as a context of parsing.\n *\n * `baseDate` must be passed for correct work of the function.\n * If you're not sure which `baseDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `baseDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `baseDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Old `parse` was renamed to `toDate`.\n * Now `parse` is a new function which parses a string using a provided format.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward\n * toDate('2016-01-01')\n * parse('2016-01-01', 'yyyy-MM-dd', new Date())\n * ```\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} baseDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n * - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n * - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens (`yy`, `yyyy`).\n * See: https://git.io/fxCyr\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see: https://git.io/fxCyr\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n * locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport default function parse(\n dirtyDateString,\n dirtyFormatString,\n dirtyBaseDate,\n dirtyOptions\n) {\n if (arguments.length < 3) {\n throw new TypeError(\n '3 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateString = String(dirtyDateString)\n var formatString = String(dirtyFormatString)\n var options = dirtyOptions || {}\n\n var locale = options.locale || defaultLocale\n\n if (!locale.match) {\n throw new RangeError('locale must contain match property')\n }\n\n var localeFirstWeekContainsDate =\n locale.options && locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError(\n 'firstWeekContainsDate must be between 1 and 7 inclusively'\n )\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n if (formatString === '') {\n if (dateString === '') {\n return toDate(dirtyBaseDate)\n } else {\n return new Date(NaN)\n }\n }\n\n var subFnOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale\n }\n\n // If timezone isn't specified, it will be set to the system timezone\n var setters = [\n {\n priority: TIMEZONE_UNIT_PRIORITY,\n set: dateToSystemTimezone,\n index: 0\n }\n ]\n\n var i\n\n var tokens = formatString.match(formattingTokensRegExp)\n\n for (i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (!options.awareOfUnicodeTokens && isProtectedToken(token)) {\n throwProtectedError(token)\n }\n\n var firstCharacter = token[0]\n var parser = parsers[firstCharacter]\n if (parser) {\n var parseResult = parser.parse(\n dateString,\n token,\n locale.match,\n subFnOptions\n )\n\n if (!parseResult) {\n return new Date(NaN)\n }\n\n setters.push({\n priority: parser.priority,\n set: parser.set,\n validate: parser.validate,\n value: parseResult.value,\n index: setters.length\n })\n\n dateString = parseResult.rest\n } else {\n // Replace two single quote characters with one single quote character\n if (token === \"''\") {\n token = \"'\"\n } else if (firstCharacter === \"'\") {\n token = cleanEscapedString(token)\n }\n\n // Cut token from string, or, if string doesn't match the token, return Invalid Date\n if (dateString.indexOf(token) === 0) {\n dateString = dateString.slice(token.length)\n } else {\n return new Date(NaN)\n }\n }\n }\n\n // Check if the remaining input contains something other than whitespace\n if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n return new Date(NaN)\n }\n\n var uniquePrioritySetters = setters\n .map(function(setter) {\n return setter.priority\n })\n .sort(function(a, b) {\n return b - a\n })\n .filter(function(priority, index, array) {\n return array.indexOf(priority) === index\n })\n .map(function(priority) {\n return setters\n .filter(function(setter) {\n return setter.priority === priority\n })\n .reverse()\n })\n .map(function(setterArray) {\n return setterArray[0]\n })\n\n var date = toDate(dirtyBaseDate)\n\n if (isNaN(date)) {\n return new Date(NaN)\n }\n\n // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37\n var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date))\n\n var flags = {}\n for (i = 0; i < uniquePrioritySetters.length; i++) {\n var setter = uniquePrioritySetters[i]\n\n if (\n setter.validate &&\n !setter.validate(utcDate, setter.value, subFnOptions)\n ) {\n return new Date(NaN)\n }\n\n var result = setter.set(utcDate, flags, setter.value, subFnOptions)\n // Result is tuple (date, flags)\n if (result[0]) {\n utcDate = result[0]\n assign(flags, result[1])\n // Result is date\n } else {\n utcDate = result\n }\n }\n\n return utcDate\n}\n\nfunction dateToSystemTimezone(date, flags) {\n if (flags.timestampIsSet) {\n return date\n }\n\n var convertedDate = new Date(0)\n convertedDate.setFullYear(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate()\n )\n convertedDate.setHours(\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds(),\n date.getUTCMilliseconds()\n )\n return convertedDate\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","import toDate from '../toDate/index.js'\nimport toInteger from '../_lib/toInteger/index.js'\n\n/**\n * @name roundToNearestMinutes\n * @category Minute Helpers\n * @summary Rounds the given date to the nearest minute\n *\n * @description\n * Rounds the given date to the nearest minute\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to round\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.nearestTo=1] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date rounded to the closest minute\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.nearestTo` must be between 1 and 30\n *\n * @example\n * // Round 10 July 2014 12:12:34 to nearest minute:\n * var result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34))\n * //=> Thu Jul 10 2014 12:13:00\n */\nexport default function roundToNearestMinutes(dirtyDate, options) {\n if (arguments.length < 1) {\n throw new TypeError('1 argument required, but only none provided present')\n }\n\n var nearestTo =\n options && 'nearestTo' in options ? toInteger(options.nearestTo) : 1\n\n if (nearestTo < 1 || nearestTo > 30) {\n throw new RangeError('`options.nearestTo` must be between 1 and 30')\n }\n\n var date = toDate(dirtyDate)\n var seconds = date.getSeconds() // relevant if nearestTo is 1, which is the default case\n var minutes = date.getMinutes() + seconds / 60\n var roundedMinutes = Math.floor(minutes / nearestTo) * nearestTo\n var remainderMinutes = minutes % nearestTo\n var addedMinutes = Math.round(remainderMinutes / nearestTo) * nearestTo\n\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n date.getHours(),\n roundedMinutes + addedMinutes\n )\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setDate\n * @category Day Helpers\n * @summary Set the day of the month to the given date.\n *\n * @description\n * Set the day of the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfMonth - the day of the month of the new date\n * @returns {Date} the new date with the day of the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 30th day of the month to 1 September 2014:\n * var result = setDate(new Date(2014, 8, 1), 30)\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function setDate(dirtyDate, dirtyDayOfMonth) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var dayOfMonth = toInteger(dirtyDayOfMonth)\n date.setDate(dayOfMonth)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the new date with the day of the week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * var result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If week starts with Monday, set Sunday to 1 September 2014:\n * var result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setDay(dirtyDate, dirtyDay, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeWeekStartsOn =\n locale && locale.options && locale.options.weekStartsOn\n var defaultWeekStartsOn =\n localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n var weekStartsOn =\n options.weekStartsOn == null\n ? defaultWeekStartsOn\n : toInteger(options.weekStartsOn)\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n }\n\n var date = toDate(dirtyDate, options)\n var day = toInteger(dirtyDay)\n var currentDay = date.getDay()\n\n var remainder = day % 7\n var dayIndex = (remainder + 7) % 7\n\n var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n return addDays(date, diff, options)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setDayOfYear\n * @category Day Helpers\n * @summary Set the day of the year to the given date.\n *\n * @description\n * Set the day of the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfYear - the day of the year of the new date\n * @returns {Date} the new date with the day of the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd day of the year to 2 July 2014:\n * var result = setDayOfYear(new Date(2014, 6, 2), 2)\n * //=> Thu Jan 02 2014 00:00:00\n */\nexport default function setDayOfYear(dirtyDate, dirtyDayOfYear) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var dayOfYear = toInteger(dirtyDayOfYear)\n date.setMonth(0)\n date.setDate(dayOfYear)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * var result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\nexport default function setHours(dirtyDate, dirtyHours) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var hours = toInteger(dirtyHours)\n date.setHours(hours)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport addDays from '../addDays/index.js'\nimport getISODay from '../getISODay/index.js'\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the ISO week of the new date\n * @returns {Date} the new date with the day of the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * var result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setISODay(dirtyDate, dirtyDay) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var day = toInteger(dirtyDay)\n var currentDay = getISODay(date)\n var diff = day - currentDay\n return addDays(date, diff)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getISOWeek from '../getISOWeek/index.js'\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeek - the ISO week of the new date\n * @returns {Date} the new date with the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * var result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setISOWeek(dirtyDate, dirtyISOWeek) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var isoWeek = toInteger(dirtyISOWeek)\n var diff = getISOWeek(date) - isoWeek\n date.setDate(date.getDate() - diff * 7)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setMilliseconds\n * @category Millisecond Helpers\n * @summary Set the milliseconds to the given date.\n *\n * @description\n * Set the milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} milliseconds - the milliseconds of the new date\n * @returns {Date} the new date with the milliseconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 300 milliseconds to 1 September 2014 11:30:40.500:\n * var result = setMilliseconds(new Date(2014, 8, 1, 11, 30, 40, 500), 300)\n * //=> Mon Sep 01 2014 11:30:40.300\n */\nexport default function setMilliseconds(dirtyDate, dirtyMilliseconds) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var milliseconds = toInteger(dirtyMilliseconds)\n date.setMilliseconds(milliseconds)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * var result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\nexport default function setMinutes(dirtyDate, dirtyMinutes) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var minutes = toInteger(dirtyMinutes)\n date.setMinutes(minutes)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getDaysInMonth from '../getDaysInMonth/index.js'\n\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * var result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport default function setMonth(dirtyDate, dirtyMonth) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var month = toInteger(dirtyMonth)\n var year = date.getFullYear()\n var day = date.getDate()\n\n var dateWithDesiredMonth = new Date(0)\n dateWithDesiredMonth.setFullYear(year, month, 15)\n dateWithDesiredMonth.setHours(0, 0, 0, 0)\n var daysInMonth = getDaysInMonth(dateWithDesiredMonth)\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n date.setMonth(month, Math.min(day, daysInMonth))\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport setMonth from '../setMonth/index.js'\n\n/**\n * @name setQuarter\n * @category Quarter Helpers\n * @summary Set the year quarter to the given date.\n *\n * @description\n * Set the year quarter to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} quarter - the quarter of the new date\n * @returns {Date} the new date with the quarter set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd quarter to 2 July 2014:\n * var result = setQuarter(new Date(2014, 6, 2), 2)\n * //=> Wed Apr 02 2014 00:00:00\n */\nexport default function setQuarter(dirtyDate, dirtyQuarter) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var quarter = toInteger(dirtyQuarter)\n var oldQuarter = Math.floor(date.getMonth() / 3) + 1\n var diff = quarter - oldQuarter\n return setMonth(date, date.getMonth() + diff * 3)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * var result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\nexport default function setSeconds(dirtyDate, dirtySeconds) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var seconds = toInteger(dirtySeconds)\n date.setSeconds(seconds)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getWeek from '../getWeek/index.js'\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} week - the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * var result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * var result = setWeek(new Date(2005, 0, 2), 1, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport default function setWeek(dirtyDate, dirtyWeek, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var week = toInteger(dirtyWeek)\n var diff = getWeek(date, dirtyOptions) - week\n date.setDate(date.getDate() - diff * 7)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfWeekYear from '../startOfWeekYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name setWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Set the local week-numbering year to the given date.\n *\n * @description\n * Set the local week-numbering year to the given date,\n * saving the week number and the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} weekYear - the local week-numbering year of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week-numbering year set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010 with default options:\n * var result = setWeekYear(new Date(2010, 0, 2), 2004)\n * //=> Sat Jan 03 2004 00:00:00\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010,\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * var result = setWeekYear(new Date(2010, 0, 2), 2004, {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setWeekYear(dirtyDate, dirtyWeekYear, dirtyOptions) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeFirstWeekContainsDate =\n locale && locale.options && locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n var date = toDate(dirtyDate)\n var weekYear = toInteger(dirtyWeekYear)\n var diff = differenceInCalendarDays(date, startOfWeekYear(date, dirtyOptions))\n var firstWeek = new Date(0)\n firstWeek.setFullYear(weekYear, 0, firstWeekContainsDate)\n firstWeek.setHours(0, 0, 0, 0)\n date = startOfWeekYear(firstWeek, dirtyOptions)\n date.setDate(date.getDate() + diff)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * var result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport default function setYear(dirtyDate, dirtyYear) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = toInteger(dirtyYear)\n\n // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n if (isNaN(date)) {\n return new Date(NaN)\n }\n\n date.setFullYear(year)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfDecade\n * @category Decade Helpers\n * @summary Return the start of a decade for the given date.\n *\n * @description\n * Return the start of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a decade for 21 October 2015 00:00:00:\n * var result = startOfDecade(new Date(2015, 9, 21, 00, 00, 00))\n * //=> Jan 01 2010 00:00:00\n */\nexport default function startOfDecade(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n var decade = Math.floor(year / 10) * 10\n date.setFullYear(decade, 0, 1)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addHours from '../addHours/index.js'\n\n/**\n * @name subHours\n * @category Hour Helpers\n * @summary Subtract the specified number of hours from the given date.\n *\n * @description\n * Subtract the specified number of hours from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be subtracted\n * @returns {Date} the new date with the hours subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 2 hours from 11 July 2014 01:00:00:\n * var result = subHours(new Date(2014, 6, 11, 1, 0), 2)\n * //=> Thu Jul 10 2014 23:00:00\n */\nexport default function subHours(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addHours(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMinutes from '../addMinutes/index.js'\n\n/**\n * @name subMinutes\n * @category Minute Helpers\n * @summary Subtract the specified number of minutes from the given date.\n *\n * @description\n * Subtract the specified number of minutes from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be subtracted\n * @returns {Date} the new date with the minutes subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 minutes from 10 July 2014 12:00:00:\n * var result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 11:30:00\n */\nexport default function subMinutes(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMinutes(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addQuarters from '../addQuarters/index.js'\n\n/**\n * @name subQuarters\n * @category Quarter Helpers\n * @summary Subtract the specified number of year quarters from the given date.\n *\n * @description\n * Subtract the specified number of year quarters from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be subtracted\n * @returns {Date} the new date with the quarters subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 3 quarters from 1 September 2014:\n * var result = subQuarters(new Date(2014, 8, 1), 3)\n * //=> Sun Dec 01 2013 00:00:00\n */\nexport default function subQuarters(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addQuarters(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addSeconds from '../addSeconds/index.js'\n\n/**\n * @name subSeconds\n * @category Second Helpers\n * @summary Subtract the specified number of seconds from the given date.\n *\n * @description\n * Subtract the specified number of seconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be subtracted\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 seconds from 10 July 2014 12:45:00:\n * var result = subSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:44:30\n */\nexport default function subSeconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addSeconds(dirtyDate, -amount)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * var result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setDate(1)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `true` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * var result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * var result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */\nexport default function isValid(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n return !isNaN(date)\n}\n","import { toDateRepr, fromDateRepr } from '../models';\nimport { dayFromDate } from '../../shared/months';\n\nfunction isRequired(name, fieldDesc) {\n return fieldDesc.required || name === 'id';\n}\n\n// TODO: All of the data type needs to check the input value. This\n// doesn't just convert, it casts. See integer handling.\nexport function convertInputType(value, type) {\n if (value === undefined) {\n throw new Error('Query value cannot be undefined');\n } else if (value === null) {\n if (type === 'boolean') {\n return 0;\n }\n\n return null;\n }\n\n switch (type) {\n case 'date':\n if (value instanceof Date) {\n return toDateRepr(dayFromDate(value));\n } else if (\n value.match(/^\\d{4}-\\d{2}-\\d{2}$/) == null ||\n value.date < '2000-01-01'\n ) {\n throw new Error('Invalid date: ' + value);\n }\n\n return toDateRepr(value);\n case 'date-month':\n return toDateRepr(value.slice(0, 7));\n case 'date-year':\n return toDateRepr(value.slice(0, 4));\n case 'boolean':\n return value ? 1 : 0;\n case 'id':\n if (typeof value !== 'string' && value !== null) {\n throw new Error('Invalid id, must be string: ' + value);\n }\n return value;\n case 'integer':\n if (typeof value === 'number' && (value | 0) === value) {\n return value;\n } else {\n throw new Error(\"Can't convert to integer: \" + JSON.stringify(value));\n }\n case 'json':\n return JSON.stringify(value);\n default:\n }\n return value;\n}\n\nexport function convertOutputType(value, type) {\n if (value === null) {\n if (type === 'boolean') {\n return false;\n }\n return null;\n }\n\n switch (type) {\n case 'date':\n return fromDateRepr(value);\n case 'date-month':\n return fromDateRepr(value).slice(0, 7);\n case 'date-year':\n return fromDateRepr(value).slice(0, 4);\n case 'boolean':\n return value === 1;\n case 'json':\n case 'json/fallback':\n try {\n return JSON.parse(value);\n } catch (e) {\n return type === 'json/fallback' ? value : null;\n }\n default:\n }\n\n return value;\n}\n\nexport function conform(schema, schemaConfig, table, obj, { skipNull } = {}) {\n let tableSchema = schema[table];\n if (tableSchema == null) {\n throw new Error(`Table \"${table}\" does not exist`);\n }\n\n let views = schemaConfig.views || {};\n\n // Rename fields if necessary\n let fieldRef = field => {\n if (views[table] && views[table].fields) {\n return views[table].fields[field] || field;\n }\n return field;\n };\n\n return Object.fromEntries(\n Object.keys(obj)\n .map(field => {\n // Fields that start with an underscore are ignored\n if (field[0] === '_') {\n return null;\n }\n\n let fieldDesc = tableSchema[field];\n if (fieldDesc == null) {\n throw new Error(\n `Field \"${field}\" does not exist on table ${table}: ${JSON.stringify(\n obj\n )}`\n );\n }\n\n if (isRequired(field, fieldDesc) && obj[field] == null) {\n throw new Error(\n `\"${field}\" is required for table \"${table}\": ${JSON.stringify(\n obj\n )}`\n );\n }\n\n // This option removes null values (see `convertForInsert`)\n if (skipNull && obj[field] == null) {\n return null;\n }\n\n return [fieldRef(field), convertInputType(obj[field], fieldDesc.type)];\n })\n .filter(Boolean)\n );\n}\n\nexport function convertForInsert(schema, schemaConfig, table, rawObj) {\n let obj = { ...rawObj };\n\n let tableSchema = schema[table];\n if (tableSchema == null) {\n throw new Error(`Error inserting: table \"${table}\" does not exist`);\n }\n\n // Inserting checks all the fields in the table and adds any default\n // values necessary\n Object.keys(tableSchema).forEach(field => {\n let fieldDesc = tableSchema[field];\n\n if (obj[field] == null) {\n if (fieldDesc.default !== undefined) {\n obj[field] =\n typeof fieldDesc.default === 'function'\n ? fieldDesc.default()\n : fieldDesc.default;\n } else if (isRequired(field, fieldDesc)) {\n // Although this check is also done in `conform`, it only\n // checks the fields in `obj`. For insert, we need to do it\n // here to check that all required fields in the table exist\n throw new Error(\n `\"${field}\" is required for table \"${table}\": ${JSON.stringify(obj)}`\n );\n }\n }\n });\n\n // We use `skipNull` to remove any null values. There's no need to\n // set those when inserting, that will be the default and it reduces\n // the amount of messages generated to sync\n return conform(schema, schemaConfig, table, obj, { skipNull: true });\n}\n\nexport function convertForUpdate(schema, schemaConfig, table, rawObj) {\n let obj = { ...rawObj };\n\n let tableSchema = schema[table];\n if (tableSchema == null) {\n throw new Error(`Error updating: table \"${table}\" does not exist`);\n }\n\n return conform(schema, schemaConfig, table, obj);\n}\n\nexport function convertFromSelect(schema, schemaConfig, table, obj) {\n let tableSchema = schema[table];\n if (tableSchema == null) {\n throw new Error(`Table \"${table}\" does not exist`);\n }\n\n let fields = Object.keys(tableSchema);\n let result = {};\n for (let i = 0; i < fields.length; i++) {\n let fieldName = fields[i];\n let fieldDesc = tableSchema[fieldName];\n\n result[fieldName] = convertOutputType(obj[fieldName], fieldDesc.type);\n }\n return result;\n}\n","import * as sheet from '../sheet';\nimport { batchMessages } from '../sync';\nimport * as db from '../db';\nimport { incrFetch, whereIn } from '../db/util';\nimport * as transfer from './transfer';\nimport * as rules from './transaction-rules';\nconst connection = require('../../platform/server/connection');\n\nasync function idsWithChildren(ids) {\n let whereIds = whereIn(ids, 'parent_id');\n let rows = await db.all(\n `SELECT id FROM v_transactions_internal WHERE ${whereIds}`\n );\n let set = new Set(ids);\n for (let row of rows) {\n set.add(row.id);\n }\n return [...set];\n}\n\nasync function getTransactionsByIds(ids) {\n // TODO: convert to whereIn\n //\n // or better yet, use ActualQL\n return incrFetch(\n (query, params) => db.selectWithSchema('transactions', query, params),\n ids,\n id => `id = '${id}'`,\n where => `SELECT * FROM v_transactions_internal WHERE ${where}`\n );\n}\n\nexport async function batchUpdateTransactions({\n added,\n deleted,\n updated,\n learnCategories = false,\n detectOrphanPayees = true\n}) {\n // Track the ids of each type of transaction change (see below for why)\n let addedIds = [];\n let updatedIds = updated ? updated.map(u => u.id) : [];\n let deletedIds = deleted ? await idsWithChildren(deleted.map(d => d.id)) : [];\n\n let oldPayees = new Set();\n let accounts = await db.all('SELECT * FROM accounts WHERE tombstone = 0');\n\n // We need to get all the payees of updated transactions _before_\n // making changes\n if (updated) {\n let descUpdatedIds = updated\n .filter(update => update.payee)\n .map(update => update.id);\n\n let transactions = await getTransactionsByIds(descUpdatedIds);\n\n for (let i = 0; i < transactions.length; i++) {\n oldPayees.add(transactions[i].payee);\n }\n }\n\n // Apply all the updates. We can batch this now! This is important\n // and makes bulk updates much faster\n await batchMessages(async () => {\n if (added) {\n addedIds = await Promise.all(\n added.map(async t => db.insertTransaction(t))\n );\n }\n\n if (deleted) {\n await Promise.all(\n // It's important to use `deletedIds` and not `deleted` here\n // because we've expanded it to include children above. The\n // inconsistency of the delete APIs is annoying and should\n // be fixed (it should only take an id)\n deletedIds.map(async id => {\n await db.deleteTransaction({ id });\n })\n );\n }\n\n if (updated) {\n await Promise.all(\n updated.map(async t => {\n if (t.account) {\n // Moving transactions off budget should always clear the\n // category\n let account = accounts.find(acct => acct.id === t.account);\n if (account.offbudget === 1) {\n t.category = null;\n }\n }\n\n await db.updateTransaction(t);\n })\n );\n }\n });\n\n // Get all of the full transactions that were changed. This is\n // needed to run any cascading logic that depends on the full\n // transaction. Things like transfers, analyzing rule updates, and\n // more\n let allAdded = await getTransactionsByIds(addedIds);\n let allUpdated = await getTransactionsByIds(updatedIds);\n let allDeleted = await getTransactionsByIds(deletedIds);\n\n // Post-processing phase: first do any updates to transfers.\n // Transfers update the transactions and we need to return updates\n // to the client so that can apply them. Note that added\n // transactions just return the full transaction.\n let resultAdded = allAdded;\n let resultUpdated;\n\n await batchMessages(async () => {\n await Promise.all(allAdded.map(t => transfer.onInsert(t)));\n\n // Return any updates from here\n resultUpdated = (await Promise.all(\n allUpdated.map(t => transfer.onUpdate(t))\n )).filter(Boolean);\n\n await Promise.all(allDeleted.map(t => transfer.onDelete(t)));\n });\n\n if (learnCategories) {\n // Analyze any updated categories and update rules to learn from\n // the user's activity\n let ids = new Set([\n ...(added ? added.filter(add => add.category).map(add => add.id) : []),\n ...(updated\n ? updated.filter(update => update.category).map(update => update.id)\n : [])\n ]);\n await rules.updateCategoryRules(\n allAdded.concat(allUpdated).filter(trans => ids.has(trans.id))\n );\n }\n\n if (detectOrphanPayees) {\n // Look for any orphaned payees and notify the user about merging\n // them\n\n if (updated) {\n let newPayeeIds = updated.map(u => u.payee).filter(Boolean);\n if (newPayeeIds.length > 0) {\n let allOrphaned = new Set(await db.getOrphanedPayees());\n\n let orphanedIds = [...oldPayees].filter(id => allOrphaned.has(id));\n\n if (orphanedIds.length > 0) {\n connection.send('orphaned-payees', {\n orphanedIds,\n updatedPayeeIds: newPayeeIds\n });\n }\n }\n }\n }\n\n return {\n added: resultAdded,\n updated: resultUpdated\n };\n}\n","export default {\n info: (...args) => {\n console.log(...args);\n },\n warn: (...args) => {\n console.warn(...args);\n }\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","import toInteger from '../_lib/toInteger/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added\n * @returns {Date} the new date with the weeks added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * var result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport default function addWeeks(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n var days = amount * 7\n return addDays(dirtyDate, days)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * var result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport default function startOfDay(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n date.setHours(0, 0, 0, 0)\n return date\n}\n","// TODO: Ok, several problems:\n//\n// * If nothing matches between two merkle trees, we should fallback\n// * to the last window instead the front one (use 0 instead of the\n// * key)\n//\n// * Need to check to make sure if account exists when handling\n// * transaction changes in syncing\n\nexport function getKeys(trie) {\n return Object.keys(trie).filter(x => x !== 'hash');\n}\n\nexport function keyToTimestamp(key) {\n // 16 is the length of the base 3 value of the current time in\n // minutes. Ensure it's padded to create the full value\n let fullkey = key + '0'.repeat(16 - key.length);\n\n // Parse the base 3 representation\n return parseInt(fullkey, 3) * 1000 * 60;\n}\n\nexport function insert(trie, timestamp) {\n let hash = timestamp.hash();\n let key = Number((timestamp.millis() / 1000 / 60) | 0).toString(3);\n\n trie = Object.assign({}, trie, { hash: trie.hash ^ hash });\n return insertKey(trie, key, hash);\n}\n\nfunction insertKey(trie, key, hash) {\n if (key.length === 0) {\n return trie;\n }\n const c = key[0];\n const n = trie[c] || {};\n return Object.assign({}, trie, {\n [c]: Object.assign({}, n, insertKey(n, key.slice(1), hash), {\n hash: n.hash ^ hash\n })\n });\n}\n\nexport function build(timestamps) {\n let trie = {};\n for (let timestamp of timestamps) {\n insert(trie, timestamp);\n }\n return trie;\n}\n\nexport function diff(trie1, trie2) {\n if (trie1.hash === trie2.hash) {\n return null;\n }\n\n let node1 = trie1;\n let node2 = trie2;\n let k = '';\n\n // This loop will eventually stop when it traverses down to find\n // where the hashes differ, or otherwise when there are no leaves\n // left (this shouldn't happen, if that's the case the hash check at\n // the top of this function should pass)\n while (1) {\n let keyset = new Set([...getKeys(node1), ...getKeys(node2)]);\n let keys = [...keyset.values()];\n keys.sort();\n\n let diffkey = null;\n\n // Traverse down the trie through keys that aren't the same. We\n // traverse down the keys in order. Stop in two cases: either one\n // of the nodes doesn't have the key, or a different key isn't\n // found. For the former case, we have to that because pruning is\n // lossy. We don't know if we've pruned off a changed key so we\n // can't traverse down anymore. For the latter case, it means two\n // things: either we've hit the bottom of the tree, or the changed\n // key has been pruned off. In the latter case we have a \"partial\"\n // key and will fill the rest with 0s. Note that if multiple older\n // messages were added into one trie, it's possible we will\n // generate a time that only encompasses *some* of the those\n // messages. Pruning is lossy, and we traverse down the left-most\n // changed time that we know of, because of pruning it might take\n // multiple passes to sync up a trie.\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n\n if (!node1[key] || !node2[key]) {\n break;\n }\n\n let next1 = node1[key];\n let next2 = node2[key];\n if (next1.hash !== next2.hash) {\n diffkey = key;\n break;\n }\n }\n\n if (!diffkey) {\n return keyToTimestamp(k);\n }\n\n k += diffkey;\n node1 = node1[diffkey] || {};\n node2 = node2[diffkey] || {};\n }\n}\n\nexport function prune(trie, n = 2) {\n // Do nothing if empty\n if (!trie.hash) {\n return trie;\n }\n\n let keys = getKeys(trie);\n keys.sort();\n\n let next = { hash: trie.hash };\n keys = keys.slice(-n).map(k => (next[k] = prune(trie[k], n)));\n\n return next;\n}\n\nexport function debug(trie, k = '', indent = 0) {\n const str =\n ' '.repeat(indent) +\n (k !== '' ? `k: ${k} ` : '') +\n `hash: ${trie.hash || '(empty)'}\\n`;\n return (\n str +\n getKeys(trie)\n .map(key => {\n return debug(trie[key], key, indent + 2);\n })\n .join('')\n );\n}\n","let ENCRYPTION_ALGORITHM = 'aes-256-gcm';\n\nfunction browserAlgorithmName(name) {\n switch (name) {\n case 'aes-256-gcm':\n return 'AES-GCM';\n default:\n throw new Error('unsupported crypto algorithm: ' + name);\n }\n}\n\nexport async function sha256String(str) {\n let inputBuffer = new TextEncoder('utf-8').encode(str).buffer;\n let buffer = await crypto.subtle.digest('sha-256', inputBuffer);\n let outputStr = Array.from(new Uint8Array(buffer))\n .map(n => String.fromCharCode(n))\n .join('');\n return btoa(outputStr);\n}\n\nexport function randomBytes(n) {\n return Buffer.from(crypto.getRandomValues(new Uint8Array(n)));\n}\n\nexport async function encrypt(masterKey, value) {\n let iv = crypto.getRandomValues(new Uint8Array(12));\n\n let encrypted = await crypto.subtle.encrypt(\n {\n name: browserAlgorithmName(ENCRYPTION_ALGORITHM),\n iv,\n tagLength: 128\n },\n masterKey.getValue().raw,\n value\n );\n\n encrypted = Buffer.from(encrypted);\n\n // Strip the auth tag off the end\n let authTag = encrypted.slice(-16);\n encrypted = encrypted.slice(0, -16);\n\n return {\n value: encrypted,\n meta: {\n keyId: masterKey.getId(),\n algorithm: ENCRYPTION_ALGORITHM,\n iv: Buffer.from(iv).toString('base64'),\n authTag: authTag.toString('base64')\n }\n };\n}\n\nexport async function decrypt(masterKey, encrypted, meta) {\n let { algorithm, iv, authTag } = meta;\n\n let decrypted = await crypto.subtle.decrypt(\n {\n name: browserAlgorithmName(algorithm),\n iv: Buffer.from(iv, 'base64'),\n tagLength: 128\n },\n masterKey.getValue().raw,\n Buffer.concat([encrypted, Buffer.from(authTag, 'base64')])\n );\n\n return Buffer.from(decrypted);\n}\n\nexport async function createKey({ secret, salt }) {\n let passwordBuffer = Buffer.from(secret);\n let saltBuffer = Buffer.from(salt);\n\n let passwordKey = await crypto.subtle.importKey(\n 'raw',\n passwordBuffer,\n { name: 'PBKDF2' },\n false,\n ['deriveBits', 'deriveKey']\n );\n\n let derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n hash: 'SHA-512',\n salt: saltBuffer,\n iterations: 10000\n },\n passwordKey,\n { name: 'AES-GCM', length: 256 },\n true,\n ['encrypt', 'decrypt']\n );\n\n let exported = await crypto.subtle.exportKey('raw', derivedKey);\n\n return {\n raw: derivedKey,\n base64: Buffer.from(exported).toString('base64')\n };\n}\n\nexport async function importKey(str) {\n let key = await crypto.subtle.importKey(\n 'raw',\n Buffer.from(str, 'base64'),\n { name: 'AES-GCM' },\n false,\n ['encrypt', 'decrypt']\n );\n\n return {\n raw: key,\n base64: str\n };\n}\n","import { last, diffItems, getChangedValues, applyChanges } from './util';\nconst uuid = require('../platform/uuid');\n\n// The amount might be null when adding a new transaction\nfunction num(n) {\n return typeof n === 'number' ? n : 0;\n}\n\nfunction SplitTransactionError(total, parent) {\n let difference = num(parent.amount) - total;\n\n return {\n type: 'SplitTransactionError',\n version: 1,\n difference\n };\n}\n\nexport function makeChild(parent, data) {\n let prefix = parent.id === 'temp' ? 'temp' : '';\n\n return {\n amount: 0,\n ...data,\n payee: data.payee || parent.payee,\n id: data.id ? data.id : prefix + uuid.v4Sync(),\n account: parent.account,\n date: parent.date,\n cleared: parent.cleared != null ? parent.cleared : null,\n starting_balance_flag:\n parent.starting_balance_flag != null\n ? parent.starting_balance_flag\n : null,\n is_child: true,\n parent_id: parent.id,\n error: null\n };\n}\n\nexport function recalculateSplit(trans) {\n // Calculate the new total of split transactions and make sure\n // that it equals the parent amount\n const total = trans.subtransactions.reduce(\n (acc, t) => acc + num(t.amount),\n 0\n );\n return {\n ...trans,\n error:\n total === num(trans.amount) ? null : SplitTransactionError(total, trans)\n };\n}\n\nexport function findParentIndex(transactions, idx) {\n // This relies on transactions being sorted in a way where parents\n // are always before children, which is enforced in the db layer.\n // Walk backwards and find the last parent;\n while (idx >= 0) {\n let trans = transactions[idx];\n if (trans.is_parent) {\n return idx;\n }\n idx--;\n }\n return null;\n}\n\nexport function getSplit(transactions, parentIndex) {\n let split = [transactions[parentIndex]];\n let curr = parentIndex + 1;\n while (curr < transactions.length && transactions[curr].is_child) {\n split.push(transactions[curr]);\n curr++;\n }\n return split;\n}\n\nexport function ungroupTransactions(transactions) {\n let x = transactions.reduce((list, parent) => {\n let { subtransactions, ...trans } = parent;\n subtransactions = subtransactions || [];\n\n list.push(trans);\n\n for (let i = 0; i < subtransactions.length; i++) {\n list.push(subtransactions[i]);\n }\n return list;\n }, []);\n return x;\n}\n\nexport function groupTransaction(split) {\n return { ...split[0], subtransactions: split.slice(1) };\n}\n\nexport function ungroupTransaction(split) {\n if (split == null) {\n return null;\n }\n return ungroupTransactions([split]);\n}\n\nexport function applyTransactionDiff(groupedTrans, diff) {\n return groupTransaction(applyChanges(diff, ungroupTransaction(groupedTrans)));\n}\n\nexport function replaceTransactions(transactions, id, func) {\n let idx = transactions.findIndex(t => t.id === id);\n let trans = transactions[idx];\n let transactionsCopy = [...transactions];\n\n if (idx === -1) {\n throw new Error('Tried to edit unknown transaction id: ' + id);\n }\n\n if (trans.is_parent || trans.is_child) {\n let parentIndex = findParentIndex(transactions, idx);\n if (parentIndex == null) {\n console.log('Cannot find parent index');\n return { diff: { deleted: [], updated: [] } };\n }\n\n let split = getSplit(transactions, parentIndex);\n let grouped = func(groupTransaction(split));\n let newSplit = ungroupTransaction(grouped);\n\n let diff;\n if (newSplit == null) {\n // If everything was deleted, just delete the parent which will\n // delete everything\n diff = { deleted: [{ id: split[0].id }], updated: [] };\n grouped = { id: split[0].id, _deleted: true };\n transactionsCopy.splice(parentIndex, split.length);\n } else {\n diff = diffItems(split, newSplit);\n transactionsCopy.splice(parentIndex, split.length, ...newSplit);\n }\n\n return { data: transactionsCopy, newTransaction: grouped, diff };\n } else {\n let grouped = func(trans);\n let newTrans = ungroupTransaction(grouped) || [];\n if (grouped) {\n grouped.subtransactions = grouped.subtransactions || [];\n }\n transactionsCopy.splice(idx, 1, ...newTrans);\n\n return {\n data: transactionsCopy,\n newTransaction: grouped || { id: trans.id, _deleted: true },\n diff: diffItems([trans], newTrans)\n };\n }\n}\n\nexport function addSplitTransaction(transactions, id) {\n return replaceTransactions(transactions, id, trans => {\n if (!trans.is_parent) {\n return trans;\n }\n let prevSub = last(trans.subtransactions);\n trans.subtransactions.push(\n makeChild(trans, {\n amount: 0,\n sort_order: num(prevSub && prevSub.sort_order) - 1\n })\n );\n return trans;\n });\n}\n\nexport function updateTransaction(transactions, transaction) {\n return replaceTransactions(transactions, transaction.id, trans => {\n if (trans.is_parent) {\n let parent = trans.id === transaction.id ? transaction : trans;\n let sub = trans.subtransactions.map(t => {\n // Make sure to update the children to reflect the updated\n // properties (if the parent updated)\n\n let child = t;\n if (trans.id === transaction.id) {\n child = {\n ...t,\n payee: t.payee === trans.payee ? transaction.payee : t.payee\n };\n } else if (t.id === transaction.id) {\n child = transaction;\n }\n\n return makeChild(parent, child);\n });\n\n return recalculateSplit({ ...parent, subtransactions: sub });\n } else {\n return transaction;\n }\n });\n}\n\nexport function deleteTransaction(transactions, id) {\n return replaceTransactions(transactions, id, trans => {\n if (trans.is_parent) {\n if (trans.id === id) {\n return null;\n } else if (trans.subtransactions.length === 1) {\n return {\n ...trans,\n subtransactions: null,\n is_parent: false,\n error: null\n };\n } else {\n let sub = trans.subtransactions.filter(t => t.id !== id);\n return recalculateSplit({ ...trans, subtransactions: sub });\n }\n } else {\n return null;\n }\n });\n}\n\nexport function splitTransaction(transactions, id) {\n return replaceTransactions(transactions, id, trans => {\n if (trans.is_parent || trans.is_child) {\n return trans;\n }\n\n return {\n ...trans,\n is_parent: true,\n error: num(trans.amount) === 0 ? null : SplitTransactionError(0, trans),\n subtransactions: [makeChild(trans, { amount: 0, sort_order: -1 })]\n };\n });\n}\n\nexport function realizeTempTransactions(transactions) {\n let parent = transactions.find(t => !t.is_child);\n parent = { ...parent, id: uuid.v4Sync() };\n\n let children = transactions.filter(t => t.is_child);\n return [\n parent,\n ...children.map(child => ({\n ...child,\n id: uuid.v4Sync(),\n parent_id: parent.id\n }))\n ];\n}\n","var simpleIsEqual = function simpleIsEqual(a, b) {\n return a === b;\n};\n\nfunction index (resultFn, isEqual) {\n if (isEqual === void 0) {\n isEqual = simpleIsEqual;\n }\n\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n\n var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {\n return isEqual(newArg, lastArgs[index], index);\n };\n\n var result = function result() {\n for (var _len = arguments.length, newArgs = new Array(_len), _key = 0; _key < _len; _key++) {\n newArgs[_key] = arguments[_key];\n }\n\n if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {\n return lastResult;\n }\n\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n };\n\n return result;\n}\n\nexport default index;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * var result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var month = date.getMonth()\n date.setFullYear(date.getFullYear(), month + 1, 0)\n date.setHours(23, 59, 59, 999)\n return date\n}\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Stats_1 = require(\"./Stats\");\nvar Dirent_1 = require(\"./Dirent\");\nvar volume_1 = require(\"./volume\");\nvar _a = require('fs-monkey/lib/util/lists'), fsSyncMethods = _a.fsSyncMethods, fsAsyncMethods = _a.fsAsyncMethods;\nvar constants_1 = require(\"./constants\");\nvar F_OK = constants_1.constants.F_OK, R_OK = constants_1.constants.R_OK, W_OK = constants_1.constants.W_OK, X_OK = constants_1.constants.X_OK;\nexports.Volume = volume_1.Volume;\n// Default volume.\nexports.vol = new volume_1.Volume();\nfunction createFsFromVolume(vol) {\n var fs = { F_OK: F_OK, R_OK: R_OK, W_OK: W_OK, X_OK: X_OK, constants: constants_1.constants, Stats: Stats_1.default, Dirent: Dirent_1.default };\n // Bind FS methods.\n for (var _i = 0, fsSyncMethods_1 = fsSyncMethods; _i < fsSyncMethods_1.length; _i++) {\n var method = fsSyncMethods_1[_i];\n if (typeof vol[method] === 'function')\n fs[method] = vol[method].bind(vol);\n }\n for (var _a = 0, fsAsyncMethods_1 = fsAsyncMethods; _a < fsAsyncMethods_1.length; _a++) {\n var method = fsAsyncMethods_1[_a];\n if (typeof vol[method] === 'function')\n fs[method] = vol[method].bind(vol);\n }\n fs.StatWatcher = vol.StatWatcher;\n fs.FSWatcher = vol.FSWatcher;\n fs.WriteStream = vol.WriteStream;\n fs.ReadStream = vol.ReadStream;\n fs.promises = vol.promises;\n fs._toUnixTimestamp = volume_1.toUnixTimestamp;\n return fs;\n}\nexports.createFsFromVolume = createFsFromVolume;\nexports.fs = createFsFromVolume(exports.vol);\nmodule.exports = __assign(__assign({}, module.exports), exports.fs);\nmodule.exports.semantic = true;\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","import toDate from '../toDate/index.js'\n\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * var result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport default function getDaysInMonth(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getFullYear()\n var monthIndex = date.getMonth()\n var lastDayOfMonth = new Date(0)\n lastDayOfMonth.setFullYear(year, monthIndex + 1, 0)\n lastDayOfMonth.setHours(0, 0, 0, 0)\n return lastDayOfMonth.getDate()\n}\n","export function sequential(fn) {\n let sequenceState = {\n running: null,\n queue: []\n };\n\n function pump() {\n if (sequenceState.queue.length > 0) {\n const next = sequenceState.queue.shift();\n run(next.args, next.resolve, next.reject);\n } else {\n sequenceState.running = null;\n }\n }\n\n function run(args, resolve, reject) {\n sequenceState.running = fn(...args);\n\n sequenceState.running.then(\n val => {\n pump();\n resolve(val);\n },\n err => {\n pump();\n reject(err);\n }\n );\n }\n\n return (...args) => {\n if (!sequenceState.running) {\n return new Promise((resolve, reject) => {\n return run(args, resolve, reject);\n });\n } else {\n return new Promise((resolve, reject) => {\n sequenceState.queue.push({ resolve, reject, args });\n });\n }\n };\n}\n\nexport function once(fn) {\n let promise = null;\n let onceFn = (...args) => {\n if (!promise) {\n promise = fn(...args).finally(() => {\n promise = null;\n });\n return promise;\n }\n\n return promise;\n };\n\n return onceFn;\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCWeekYear (dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n }\n\n var date = toDate(dirtyDate, dirtyOptions)\n var year = date.getUTCFullYear()\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeFirstWeekContainsDate = locale &&\n locale.options &&\n locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively')\n }\n\n var firstWeekOfNextYear = new Date(0)\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate)\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0)\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions)\n\n var firstWeekOfThisYear = new Date(0)\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate)\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0)\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions)\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year\n } else {\n return year - 1\n }\n}\n","class InvalidDateAdapterError extends Error {}\nlet dateAdapterConfig;\nclass DateAdapterBase {\n constructor(_date, options) {\n this.duration = (options && options.duration) || 0;\n this.generators = (options && options.generators && options.generators.slice()) || [];\n if (!Number.isInteger(this.duration) || this.duration < 0) {\n throw new InvalidDateAdapterError('duration must be a non-negative integer');\n }\n }\n static set adapter(value) {\n if (dateAdapterConfig) {\n throw new Error(`\"${dateAdapterConfig.name}\" has already been configured.`);\n }\n dateAdapterConfig = value;\n }\n static get adapter() {\n if (!dateAdapterConfig) {\n throw new Error('No date adapter has been configured. See rSchedule docs.');\n }\n return dateAdapterConfig;\n }\n static isDate(_object) {\n throw unimplementedError('isDate()');\n }\n static fromDate(_date, _options) {\n throw unimplementedError('fromDate()');\n }\n static fromJSON(_json) {\n throw unimplementedError('fromJSON()');\n }\n static fromDateTime(_datetime) {\n throw unimplementedError('fromDateTime()');\n }\n /**\n * Returns a string in simplified extended ISO format (ISO 8601).\n *\n * _Note: this method is intended for testing and its\n * implementation isn't particularly performant._\n */\n toISOString() {\n return this.set('timezone', 'UTC')\n .toDateTime()\n .toISOString();\n }\n toDateTime() {\n const date = DateTime.fromJSON(\n Object.assign(Object.assign({}, this.toJSON()), { generators: this.generators }),\n );\n return date;\n }\n}\nDateAdapterBase.hasTimezoneSupport = false;\nfunction unimplementedError(name) {\n return new Error(`You must implement the \"${name}\" method for this DateAdapter class`);\n}\nvar DateAdapter;\n(function(DateAdapter) {\n DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n DateAdapter.MILLISECONDS_IN_SECOND = 1000;\n DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;\n DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;\n DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;\n DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;\n})(DateAdapter || (DateAdapter = {}));\nclass InvalidDateTimeError extends Error {}\nclass DateTime {\n constructor(date, timezone, duration, generators) {\n this.date = new Date(date);\n this.timezone = timezone || null;\n this.duration = duration || 0;\n this.generators = (generators && generators.slice()) || [];\n if (!Number.isInteger(this.duration) || this.duration < 0) {\n throw new InvalidDateTimeError('duration must be a non-negative integer');\n }\n this.assertIsValid();\n }\n // /**\n // * Similar to `Array.isArray()`, `isInstance()` provides a surefire method\n // * of determining if an object is a `DateTime` by checking against the\n // * global symbol registry.\n // */\n // static isInstance(object: any): object is DateTime {\n // return !!(object && object[DATETIME_ID]);\n // }\n static fromJSON(json) {\n const date = new Date(\n Date.UTC(\n json.year,\n json.month - 1,\n json.day,\n json.hour,\n json.minute,\n json.second,\n json.millisecond,\n ),\n );\n return new DateTime(date, json.timezone, json.duration, json.generators);\n }\n static fromDateAdapter(adapter) {\n return DateTime.fromJSON(\n Object.assign(Object.assign({}, adapter.toJSON()), { generators: adapter.generators }),\n );\n }\n /**\n * Returns `undefined` if `duration` is `0`. Else returns\n * the `end` date.\n */\n get end() {\n if (!this.duration) return;\n if (this._end) return this._end;\n this._end = this.add(this.duration, 'millisecond');\n return this._end;\n }\n // While we constrain the argument to be another DateAdapter in typescript\n // we handle the case of someone passing in another type of object in javascript\n isEqual(object) {\n if (!object) {\n return false;\n }\n assertSameTimeZone(this, object);\n return this.valueOf() === object.valueOf();\n }\n isBefore(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() < object.valueOf();\n }\n isBeforeOrEqual(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() <= object.valueOf();\n }\n isAfter(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() > object.valueOf();\n }\n isAfterOrEqual(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() >= object.valueOf();\n }\n isOccurring(object) {\n if (!this.duration) {\n throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');\n }\n assertSameTimeZone(this, object);\n return (\n object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'))\n );\n }\n add(amount, unit) {\n switch (unit) {\n case 'generator': {\n const generators = this.generators.slice();\n generators.unshift(amount);\n return new DateTime(this.date, this.timezone, this.duration, generators);\n }\n case 'year':\n return this.forkDateTime(addUTCYears(this.date, amount));\n case 'month':\n return this.forkDateTime(addUTCMonths(this.date, amount));\n case 'week':\n return this.forkDateTime(addUTCWeeks(this.date, amount));\n case 'day':\n return this.forkDateTime(addUTCDays(this.date, amount));\n case 'hour':\n return this.forkDateTime(addUTCHours(this.date, amount));\n case 'minute':\n return this.forkDateTime(addUTCMinutes(this.date, amount));\n case 'second':\n return this.forkDateTime(addUTCSeconds(this.date, amount));\n case 'millisecond':\n return this.forkDateTime(addUTCMilliseconds(this.date, amount));\n default:\n throw new Error('Invalid unit provided to `DateTime#add`');\n }\n }\n subtract(amount, unit) {\n switch (unit) {\n case 'year':\n return this.forkDateTime(subUTCYears(this.date, amount));\n case 'month':\n return this.forkDateTime(subUTCMonths(this.date, amount));\n case 'week':\n return this.forkDateTime(subUTCWeeks(this.date, amount));\n case 'day':\n return this.forkDateTime(subUTCDays(this.date, amount));\n case 'hour':\n return this.forkDateTime(subUTCHours(this.date, amount));\n case 'minute':\n return this.forkDateTime(subUTCMinutes(this.date, amount));\n case 'second':\n return this.forkDateTime(subUTCSeconds(this.date, amount));\n case 'millisecond':\n return this.forkDateTime(subUTCMilliseconds(this.date, amount));\n default:\n throw new Error('Invalid unit provided to `DateTime#subtract`');\n }\n }\n get(unit) {\n switch (unit) {\n case 'year':\n return this.date.getUTCFullYear();\n case 'month':\n return this.date.getUTCMonth() + 1;\n case 'yearday':\n return getUTCYearDay(this.date);\n case 'weekday':\n return DateAdapter.WEEKDAYS[this.date.getUTCDay()];\n case 'day':\n return this.date.getUTCDate();\n case 'hour':\n return this.date.getUTCHours();\n case 'minute':\n return this.date.getUTCMinutes();\n case 'second':\n return this.date.getUTCSeconds();\n case 'millisecond':\n return this.date.getUTCMilliseconds();\n default:\n throw new Error('Invalid unit provided to `DateTime#set`');\n }\n }\n set(unit, value) {\n if (unit === 'duration') {\n return new DateTime(this.date, this.timezone, value, this.generators);\n }\n if (unit === 'generators') {\n return new DateTime(this.date, this.timezone, this.duration, value);\n }\n let date = new Date(this.date);\n switch (unit) {\n case 'year':\n date.setUTCFullYear(value);\n break;\n case 'month': {\n // If the current day of the month\n // is greater than days in the month we are moving to, we need to also\n // set the day to the end of that month.\n const length = monthLength(value, date.getUTCFullYear());\n const day = date.getUTCDate();\n if (day > length) {\n date.setUTCDate(1);\n date.setUTCMonth(value);\n date = subUTCDays(date, 1);\n } else {\n date.setUTCMonth(value - 1);\n }\n break;\n }\n case 'day':\n date.setUTCDate(value);\n break;\n case 'hour':\n date.setUTCHours(value);\n break;\n case 'minute':\n date.setUTCMinutes(value);\n break;\n case 'second':\n date.setUTCSeconds(value);\n break;\n case 'millisecond':\n date.setUTCMilliseconds(value);\n break;\n default:\n throw new Error('Invalid unit provided to `DateTime#set`');\n }\n return this.forkDateTime(date);\n }\n granularity(granularity, opt = {}) {\n let date = this.forkDateTime(this.date);\n switch (granularity) {\n case 'year':\n date = date.set('month', 1);\n case 'month':\n date = date.set('day', 1);\n break;\n case 'week':\n date = setDateToStartOfWeek(date, opt.weekStart);\n }\n switch (granularity) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n date = date.set('hour', 0);\n case 'hour':\n date = date.set('minute', 0);\n case 'minute':\n date = date.set('second', 0);\n case 'second':\n date = date.set('millisecond', 0);\n case 'millisecond':\n return date;\n default:\n throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n }\n }\n endGranularity(granularity, opt = {}) {\n let date = this.forkDateTime(this.date);\n switch (granularity) {\n case 'year':\n date = date.set('month', 12);\n case 'month':\n date = date.set('day', monthLength(date.get('month'), date.get('year')));\n break;\n case 'week':\n date = setDateToEndOfWeek(date, opt.weekStart);\n }\n switch (granularity) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n date = date.set('hour', 23);\n case 'hour':\n date = date.set('minute', 59);\n case 'minute':\n date = date.set('second', 59);\n case 'second':\n date = date.set('millisecond', 999);\n case 'millisecond':\n return date;\n default:\n throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n }\n }\n toISOString() {\n return this.date.toISOString();\n }\n toDateTime() {\n return this;\n }\n toJSON() {\n const json = {\n timezone: this.timezone,\n year: this.get('year'),\n month: this.get('month'),\n day: this.get('day'),\n hour: this.get('hour'),\n minute: this.get('minute'),\n second: this.get('second'),\n millisecond: this.get('millisecond'),\n };\n if (this.duration) {\n json.duration = this.duration;\n }\n return json;\n }\n valueOf() {\n return this.date.valueOf();\n }\n assertIsValid() {\n if (isNaN(this.valueOf())) {\n throw new InvalidDateTimeError('DateTime has invalid date.');\n }\n return true;\n }\n forkDateTime(date) {\n return new DateTime(date, this.timezone, this.duration, this.generators);\n }\n}\nfunction assertSameTimeZone(x, y) {\n if (x.timezone !== y.timezone) {\n throw new InvalidDateTimeError(\n 'Attempted to compare a datetime to another date in a different timezone: ' +\n JSON.stringify(x) +\n ' and ' +\n JSON.stringify(y),\n );\n }\n return true;\n}\nfunction setDateToStartOfWeek(date, wkst) {\n const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n return date.subtract(index, 'day');\n}\nfunction setDateToEndOfWeek(date, wkst) {\n const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n return date.add(6 - index, 'day');\n}\nfunction dateTimeSortComparer(a, b) {\n if (a.isAfter(b)) return 1;\n if (a.isBefore(b)) return -1;\n if (a.duration && b.duration) {\n if (a.duration > b.duration) return 1;\n if (a.duration < b.duration) return -1;\n }\n return 0;\n}\nfunction uniqDateTimes(dates) {\n return Array.from(new Map(dates.map(date => [date.toISOString(), date])).values());\n}\nfunction orderedWeekdays(wkst = 'SU') {\n const wkdays = DateAdapter.WEEKDAYS.slice();\n let index = wkdays.indexOf(wkst);\n while (index !== 0) {\n shiftArray(wkdays);\n index--;\n }\n return wkdays;\n}\nfunction shiftArray(array, from = 'first') {\n if (array.length === 0) {\n return array;\n } else if (from === 'first') {\n array.push(array.shift());\n } else {\n array.unshift(array.pop());\n }\n return array;\n}\nfunction getDifferenceBetweenWeekdays(x, y) {\n if (x === y) return 0;\n const result = DateAdapter.WEEKDAYS.indexOf(x) - DateAdapter.WEEKDAYS.indexOf(y);\n return result > 0 ? 7 - result : Math.abs(result);\n}\n/**\n * Returns the days in the given month.\n *\n * @param month base-1\n * @param year\n */\nfunction monthLength(month, year) {\n const block = {\n 1: 31,\n 2: getDaysInFebruary(year),\n 3: 31,\n 4: 30,\n 5: 31,\n 6: 30,\n 7: 31,\n 8: 31,\n 9: 30,\n 10: 31,\n 11: 30,\n 12: 31,\n };\n return block[month];\n}\nfunction getDaysInFebruary(year) {\n return isLeapYear(year) ? 29 : 28;\n}\n// taken from date-fn\nfunction isLeapYear(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\nfunction getDaysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\nfunction getUTCYearDay(now) {\n const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));\n const diff = now.valueOf() - start.valueOf();\n return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);\n}\n/**\n * These functions are basically lifted from `date-fns`, but changed\n * to use the UTC date methods, which `date-fns` doesn't support.\n */\nfunction toInteger(input) {\n if (input === null || input === true || input === false) {\n return NaN;\n }\n const int = Number(input);\n if (isNaN(int)) {\n return int;\n }\n return int < 0 ? Math.ceil(int) : Math.floor(int);\n}\nfunction addMilliseconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');\n }\n const timestamp = dirtyDate.valueOf();\n const amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}\nfunction addUTCYears(date, input) {\n const amount = toInteger(input);\n return addUTCMonths(date, amount * 12);\n}\nfunction addUTCMonths(date, input) {\n const amount = toInteger(input);\n date = new Date(date);\n const desiredMonth = date.getUTCMonth() + amount;\n const dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);\n dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);\n const daysInMonth = monthLength(\n dateWithDesiredMonth.getUTCMonth() + 1,\n dateWithDesiredMonth.getUTCFullYear(),\n );\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));\n return date;\n}\nfunction addUTCWeeks(date, input) {\n const amount = toInteger(input);\n const days = amount * 7;\n return addUTCDays(date, days);\n}\nfunction addUTCDays(date, input) {\n // by adding milliseconds rather than days, we supress the native Date object's automatic\n // daylight savings time conversions which we don't want in UTC mode\n return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);\n}\nfunction addUTCHours(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);\n}\nfunction addUTCMinutes(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);\n}\nfunction addUTCSeconds(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);\n}\nfunction addUTCMilliseconds(date, input) {\n const amount = toInteger(input);\n const timestamp = date.getTime();\n return new Date(timestamp + amount);\n}\nfunction subUTCYears(date, amount) {\n return addUTCYears(date, -amount);\n}\nfunction subUTCMonths(date, amount) {\n return addUTCMonths(date, -amount);\n}\nfunction subUTCWeeks(date, amount) {\n return addUTCWeeks(date, -amount);\n}\nfunction subUTCDays(date, amount) {\n return addUTCDays(date, -amount);\n}\nfunction subUTCHours(date, amount) {\n return addUTCHours(date, -amount);\n}\nfunction subUTCMinutes(date, amount) {\n return addUTCMinutes(date, -amount);\n}\nfunction subUTCSeconds(date, amount) {\n return addUTCSeconds(date, -amount);\n}\nfunction subUTCMilliseconds(date, amount) {\n return addUTCMilliseconds(date, -amount);\n}\n\nclass ArgumentError extends Error {}\nclass InfiniteLoopError extends Error {}\nfunction numberSortComparer(a, b) {\n if (a > b) {\n return 1;\n } else if (b > a) {\n return -1;\n } else {\n return 0;\n }\n}\nfunction freqToGranularity(freq) {\n switch (freq) {\n case 'YEARLY':\n return 'year';\n case 'MONTHLY':\n return 'month';\n case 'WEEKLY':\n return 'week';\n case 'DAILY':\n return 'day';\n case 'HOURLY':\n return 'hour';\n case 'MINUTELY':\n return 'minute';\n case 'SECONDLY':\n return 'second';\n case 'MILLISECONDLY':\n return 'millisecond';\n default:\n throw new Error('unknown freq passed to freqToGranularity()');\n }\n}\nfunction cloneJSON(json) {\n return JSON.parse(JSON.stringify(json));\n}\nfunction dateInputToDateAdapter(date) {\n // prettier-ignore\n return date instanceof DateTime ? DateAdapterBase.adapter.fromDateTime(date) :\n date instanceof DateAdapterBase ? date :\n DateAdapterBase.adapter.fromDate(date);\n}\nfunction dateInputToDateTime(date, timezone) {\n if (date instanceof DateTime) {\n if (date.timezone !== timezone) {\n return DateAdapterBase.adapter\n .fromDateTime(date)\n .set('timezone', timezone)\n .toDateTime();\n }\n return date;\n }\n return date instanceof DateAdapterBase\n ? date.set('timezone', timezone).toDateTime()\n : DateAdapterBase.adapter\n .fromDate(date)\n .set('timezone', timezone)\n .toDateTime();\n}\n// export function normalizeDateInput(\n// dateAdapter: DateAdapterConstructor,\n// input: DateInput,\n// timezone: string | null,\n// ): DateTime {\n// if (input instanceof DateTime) {\n// if (input.timezone !== timezone) {\n// return dateAdapter\n// .fromDateTime(input)\n// .set('timezone', timezone)\n// .toDateTime();\n// }\n// return input;\n// }\n// return input instanceof DateAdapter\n// ? input.set('timezone', timezone).toDateTime()\n// : new dateAdapter(input).toDateTime();\n// }\nfunction normalizeDateTimeTimezone(date, timezone) {\n if (date.timezone !== timezone) {\n return DateAdapterBase.adapter\n .fromDateTime(date)\n .set('timezone', timezone)\n .toDateTime();\n }\n return date;\n}\n\nclass RuleOptionError extends Error {}\nfunction normalizeDefaultOptions(options) {\n let start;\n if (options.start instanceof DateTime) {\n start = options.start;\n } else if (options.start instanceof DateAdapterBase) {\n start = options.start.toDateTime();\n } else if (DateAdapterBase.adapter.isDate(options.start)) {\n start = DateAdapterBase.adapter.fromDate(options.start).toDateTime();\n } else {\n throw new RuleOptionError(\n '\"start\" must be either a `DateAdapter` instance or an instance of the ' +\n 'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)',\n );\n }\n let end;\n if (options.end) {\n if (options.end instanceof DateTime) {\n end = options.end;\n } else if (options.end instanceof DateAdapterBase) {\n end = options.end.toDateTime();\n } else if (DateAdapterBase.adapter.isDate(options.end)) {\n end = DateAdapterBase.adapter.fromDate(options.end).toDateTime();\n } else {\n throw new RuleOptionError(\n '\"end\" must be either be `undefined`, a `DateAdapter` instance, or an instance of the ' +\n 'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)',\n );\n }\n }\n if (options.duration !== undefined) {\n if (!Number.isInteger(options.duration)) {\n throw new RuleOptionError('\"duration\" expects a whole number');\n }\n if (options.duration <= 0) {\n throw new RuleOptionError('\"duration\" must be greater than 0');\n }\n }\n if (options.count !== undefined) {\n if (!Number.isInteger(options.count)) {\n throw new RuleOptionError('\"count\" must be a whole number');\n }\n if (options.count < 0) {\n throw new RuleOptionError('\"count\" must be greater than 0');\n }\n }\n if (options.end !== undefined && options.count !== undefined) {\n throw new RuleOptionError('\"end\" and \"count\" cannot both be present');\n }\n return {\n start,\n end,\n count: options.count,\n duration: options.duration,\n };\n}\nfunction normalizeRuleOptions(recurrenceModules, options) {\n const normOptions = normalizeDefaultOptions(options);\n const startOptions = cloneJSON(options);\n recurrenceModules.forEach(mod => {\n mod.normalizeOptions(startOptions, normOptions);\n });\n Object.keys(normOptions).forEach(key => {\n if (normOptions[key] === undefined) {\n delete normOptions[key];\n }\n });\n return normOptions;\n}\nfunction cloneRuleOptions(options) {\n const obj = cloneJSON(options);\n obj.start = options.start;\n if (options.end) obj.end = options.end;\n return obj;\n}\n\nclass RecurrenceRuleError extends Error {}\nclass ValidDateTime {\n constructor(date) {\n this.date = date;\n }\n}\nclass InvalidDateTime {\n constructor(date) {\n this.date = date;\n }\n}\nfunction recurrenceRulesReducer(rules) {\n return iterator =>\n rules.reduce((prev, curr) => {\n const rule = curr.get(iterator);\n if (rule) prev.push(rule);\n return prev;\n }, []);\n}\n\nclass RecurrenceRulesIterator {\n constructor(recurrenceRules, options, args) {\n this.options = options;\n this.args = args;\n this.rules = [];\n this.iterator =\n // prettier-ignore\n this.options.count === undefined ? this.iterate() :\n this.args.reverse ? this.iterateWithReverseCount() :\n this.iterateWithCount();\n this.options = Object.assign(Object.assign({}, cloneJSON(options)), {\n start: options.start,\n end: options.end,\n });\n this.reverse = (this.options.count === undefined && args.reverse) || false;\n const { start, end } = this.normalizeDateTimeArgs(args);\n if (options.count !== undefined) {\n this.start = options.start;\n } else if (start && options.start) {\n this.start = start.isAfterOrEqual(options.start) ? start : options.start;\n } else {\n this.start = start || options.start;\n }\n if (end && options.end) {\n this.end = end.isBeforeOrEqual(options.end) ? end : options.end;\n } else {\n this.end = end || options.end;\n }\n if (this.args.reverse && !(options.count !== undefined || this.end)) {\n throw new Error(\n 'When iterating in reverse, the rule must have an `end` or `count` ' +\n 'property or you must provide an `end` argument.',\n );\n }\n this.isInfinite = !this.end && this.options.count === undefined;\n this.hasDuration = !!this.options.duration;\n this.rules = Array.isArray(recurrenceRules) ? recurrenceRules : recurrenceRules(this);\n }\n [Symbol.iterator]() {\n return this.iterator;\n }\n next(args) {\n return this.iterator.next(args);\n }\n /**\n * In the pipe controller, we have an extra level of indirection with\n * the `run()` and `iterate()` methods. The `iterate()` method is the\n * method which actually runs the logic in the pipes. If we didn't\n * need to account for the `count` property of a rule, we would *only*\n * need the iterate method... so much simpler. But we do need to account\n * for rules with a `count` property.\n *\n * Rules with a `count` property need to begin iteration at the beginning\n * because the `count` is always from the rule's start time. So if someone\n * passes in a new start time as an argument to a rule with `count`, we\n * need to secretly iterate from the beginning, tracking the number of\n * iterations, and then only start yielding dates when we reach the section\n * the user cares about (or, if we hit our `count` quota, cancel iterating).\n *\n * Additionally, we need to handle iterating in reverse. In this case, we build\n * up a cache of dates between the rule's start time and the reverse iteration\n * start date. Once we hit the reverse iteration start date, we start\n * yielding dates in the cache, in reverse order.\n *\n * In general, I imagine the count number, if used, will be small. But a large\n * count will definitely have a negative performance affect. I don't think\n * there's anything to be done about this.\n */\n *iterateWithReverseCount() {\n const dates = Array.from(this.iterateWithCount()).reverse();\n let yieldArgs;\n const dateCache = dates.slice();\n let date = dateCache.shift();\n while (date) {\n if (yieldArgs && yieldArgs.skipToDate && date.isAfter(yieldArgs.skipToDate)) {\n date = dateCache.shift();\n continue;\n }\n yieldArgs = yield date;\n if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isAfterOrEqual(date)) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n date = dateCache.shift();\n }\n return undefined;\n }\n *iterateWithCount() {\n if (this.options.count === 0) return;\n const iterable = this.iterate();\n const start = this.args.start || this.start;\n let date = iterable.next().value;\n let index = 1;\n let yieldArgs;\n while (date && index <= this.options.count) {\n index++;\n if (date.isBefore(start)) {\n date = iterable.next().value;\n continue;\n }\n if (yieldArgs && yieldArgs.skipToDate && date.isBefore(yieldArgs.skipToDate)) {\n date = iterable.next().value;\n continue;\n }\n yieldArgs = yield date;\n if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isBeforeOrEqual(date)) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n date = iterable.next().value;\n }\n return undefined;\n }\n *iterate() {\n let startingDate = this.start;\n if (this.reverse) startingDate = this.end;\n let date = this.nextDate(startingDate);\n while (date) {\n const args = yield this.normalizeRunOutput(date);\n if (args && args.skipToDate) {\n if (\n this.reverse\n ? args.skipToDate.isAfterOrEqual(date)\n : args.skipToDate.isBeforeOrEqual(date)\n ) {\n // We cannot consistently skip backwards because after an iterator is \"done\"\n // it always returns undefined and you cannot reset it. Theoretically, it would be\n // fine to skip backwards if the iterator wasn't already \"done\", but this\n // would be prone to user error so we simply disallow skipping backwards altogether.\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n date = this.nextDate(args.skipToDate);\n } else {\n date = this.nextDate(\n this.reverse ? date.subtract(1, 'millisecond') : date.add(1, 'millisecond'),\n );\n }\n }\n return undefined;\n }\n /**\n * Loops through the recurrence rules until a valid date is found.\n */\n nextDate(start) {\n let result = this.runRules(start.set('generators', []));\n if (this.isDatePastEnd(result.date)) return null;\n let index = 0;\n while (result instanceof InvalidDateTime && index < 50) {\n result = this.runRules(result.date);\n if (this.isDatePastEnd(result.date)) return null;\n index++;\n }\n if (result instanceof InvalidDateTime) {\n throw new RecurrenceRuleError(\n `Failed to find a matching occurrence in ${index} iterations. ` +\n `Last iterated date: \"${result.date.toISOString()}\"`,\n );\n }\n if (this.reverse ? start.isBefore(result.date) : start.isAfter(result.date)) {\n throw new RecurrenceRuleError(\n 'An error occurred in a recurrence rule. If this happened using ' +\n 'the rSchedule provided recurrence rules, you should ' +\n 'open an issue in the rSchedule repo. The maintainer is going to ' +\n 'want to know how to recreate the error.',\n );\n }\n return result.date;\n }\n /**\n * Performs one run of the recurrence rules and returns the result.\n * It's a slightly optimized reducer function.\n */\n runRules(start) {\n let result = new ValidDateTime(start);\n for (const rule of this.rules) {\n if (result instanceof InvalidDateTime) {\n return result;\n }\n result = rule.run(result.date);\n }\n return result;\n }\n isDatePastEnd(date) {\n return this.reverse ? date.isBefore(this.start) : this.end && date.isAfter(this.end);\n }\n normalizeRunOutput(date) {\n return this.hasDuration ? date.set('duration', this.options.duration) : date;\n }\n normalizeDateTimeArgs(args) {\n return {\n start: args.start && normalizeDateTimeTimezone(args.start, this.options.start.timezone),\n end: args.end && normalizeDateTimeTimezone(args.end, this.options.start.timezone),\n };\n }\n}\n\nexport {\n ArgumentError,\n DateAdapter,\n DateAdapterBase,\n DateTime,\n InfiniteLoopError,\n InvalidDateAdapterError,\n InvalidDateTime,\n InvalidDateTimeError,\n RecurrenceRuleError,\n RecurrenceRulesIterator,\n RuleOptionError,\n ValidDateTime,\n cloneJSON,\n cloneRuleOptions,\n dateInputToDateAdapter,\n dateInputToDateTime,\n dateTimeSortComparer,\n freqToGranularity,\n getDaysInYear,\n getDifferenceBetweenWeekdays,\n isLeapYear,\n normalizeDateTimeTimezone,\n normalizeRuleOptions,\n numberSortComparer,\n orderedWeekdays,\n recurrenceRulesReducer,\n uniqDateTimes,\n};\n","import {\n ArgumentError,\n getDifferenceBetweenWeekdays,\n DateAdapterBase as DateAdapterBase$1,\n dateInputToDateTime,\n dateInputToDateAdapter,\n normalizeDateTimeTimezone as normalizeDateTimeTimezone$1,\n InfiniteLoopError,\n dateTimeSortComparer,\n cloneRuleOptions,\n normalizeRuleOptions,\n RecurrenceRulesIterator,\n recurrenceRulesReducer,\n DateTime as DateTime$1,\n} from '@rschedule/core';\n\nclass OccurrenceGenerator {\n constructor(args = {}) {\n this.timezone = args.timezone !== undefined ? args.timezone : null;\n this.maxDuration = args.maxDuration || 0;\n }\n /** Returns the first occurrence or, if there are no occurrences, null. */\n get firstDate() {\n if (this._firstDate !== undefined) return this._firstDate;\n const start = this._run().next().value;\n this._firstDate = start ? this.dateAdapter.fromDateTime(start) : null;\n return this._firstDate;\n }\n /** If generator is infinite, returns `null`. Otherwise returns the end date */\n get lastDate() {\n if (this._lastDate !== undefined) return this._lastDate;\n if (this.isInfinite) {\n this._lastDate = null;\n return null;\n }\n const end = this._run({ reverse: true }).next().value;\n this._lastDate = end ? this.dateAdapter.fromDateTime(end) : null;\n return this._lastDate;\n }\n pipe(...operators) {\n return operators.reduce((prev, curr) => curr({ base: prev, timezone: this.timezone }), this);\n }\n /**\n * Processes the object's rules/dates and returns an iterable for the occurrences.\n *\n * Options object:\n * - `start` the date to begin iteration on\n * - `end` the date to end iteration on\n * - `take` the max number of dates to take before ending iteration\n * - `reverse` whether to iterate in reverse or not\n *\n * Examples:\n *\n * ```\n * const iterator = schedule.occurrences({ start: new Date(), take: 5 });\n \n * for (const date of iterator) {\n * // do stuff\n * }\n \n * iterator.toArray() // returns Date array\n * iterator.next().value // returns next Date\n * ```\n *\n */\n occurrences(args = {}) {\n return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n }\n /**\n * Iterates over the object's occurrences and bundles them into collections\n * with a specified granularity (default is `\"YEARLY\"`). Make sure to\n * read about each option & combination of options below.\n *\n * Options object:\n * - start?: DateAdapter\n * - end?: DateAdapter\n * - take?: number\n * - reverse?: NOT SUPPORTED\n * - granularity?: CollectionsGranularity\n * - weekStart?: DateAdapter.Weekday\n * - skipEmptyPeriods?: boolean\n *\n * Returned `Collection` object:\n *\n * - `dates` property containing an array of DateAdapter objects.\n * - `granularity` property containing the granularity.\n * - `CollectionsGranularity` === `RuleOptions.Frequency`.\n * - default is `\"YEARLY\"`\n * - `periodStart` property containing a DateAdapter equal to the period's\n * start time.\n * - `periodEnd` property containing a DateAdapter equal to the period's\n * end time.\n *\n * #### Details:\n *\n * `collections()` always returns full periods. This means that the `start` argument is\n * transformed to be the start of whatever period the `start` argument is in, and the\n * `end` argument is transformed to be the end of whatever period the `end` argument is\n * in.\n *\n * - Example: with granularity `\"YEARLY\"`, the `start` argument will be transformed to be the\n * start of the year passed in the `start` argument, and the `end` argument will be transformed\n * to be the end of the year passed in the `end` argument.\n *\n * By default, the `periodStart` value of `Collection` objects produced by this method increments linearly.\n * This means the returned `Collection#dates` property may have length 0. This can be changed by\n * passing the `skipEmptyPeriods: true` option, in which case the `periodStart` from one collection to the\n * next can \"jump\".\n *\n * - Example 1: if your object's first occurrence is 2019/2/1 (February 1st) and you call\n * `collection({skipEmptyPeriods: true, granularity: 'DAILY', start: new Date(2019,0,1)})`\n * (so starting on January 1st), the first Collection produced will have a `periodStart` in February.\n *\n * - Example 2: if your object's first occurrence is 2019/2/1 (February 1st) and you call\n * `collection({granularity: 'DAILY', start: new Date(2019,0,1)})`\n * (so starting on January 1st), the first collection produced will have a `Collection#periodStart`\n * of January 1st and have `Collection#dates === []`. Similarly, the next 30 collections produced\n * (Jan 2nd - 31st) will all contain an empty array for the `dates` property. Then the February 1st\n * `Collection` will contain dates.\n *\n * When giving a `take` argument to `collections()`, you are specifying\n * the number of `Collection` objects to return (rather than occurrences).\n *\n * When choosing a granularity of `\"WEEKLY\"`, the `weekStart` option is required.\n *\n * When choosing a granularity of `\"MONTHLY\"`:\n *\n * - If the `weekStart` option *is not* present, will generate collections with\n * the `periodStart` and `periodEnd` at the beginning and end of each month.\n *\n * - If the `weekStart` option *is* present, will generate collections with the\n * `periodStart` equal to the start of the first week of the month, and the\n * `periodEnd` equal to the end of the last week of the month. This behavior could be\n * desired when rendering opportunities in a calendar view, where the calendar renders\n * full weeks (which may result in the calendar displaying dates in the\n * previous or next months).\n *\n */\n collections(args = {}) {\n return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n }\n /**\n * Returns true if an occurrence starts on or between the provided start/end\n * datetimes. If the `excludeEnds` option is provided, then occurrences\n * equal to the start/end times are ignored.\n *\n * If the occurrence generator has a duration, and `excludeEnds !== true`,\n * and a `maxDuration` argument is supplied (either in the constructor or\n * here), then any occurrence that's time overlaps with the start/end times\n * return true.\n */\n occursBetween(startInput, endInput, options = {}) {\n const start = this.normalizeDateInput(startInput);\n const end = this.normalizeDateInput(endInput);\n if (this.hasDuration && !options.excludeEnds) {\n const maxDuration = this.getMaxDuration('occursBetween', options);\n const iterator = this._run({\n start: start.subtract(maxDuration, 'millisecond'),\n end,\n reverse: true,\n });\n for (const day of iterator) {\n if (day.end.isBefore(start)) continue;\n return true;\n }\n return false;\n }\n for (const day of this._run({ start, end })) {\n if (options.excludeEnds) {\n if (day.isEqual(start)) {\n continue;\n }\n if (day.isEqual(end)) {\n break;\n }\n }\n return true;\n }\n return false;\n }\n occursOn(rawArgs) {\n const args = this.normalizeOccursOnArgs(rawArgs);\n if (args.weekday) {\n if (this.isInfinite && !args.before) {\n throw new ArgumentError(\n 'When calling `occursOn()` with a `weekday` argument ' +\n 'and an occurrence object that has infinite occurrences, ' +\n 'you must include a `before` argument as well.',\n );\n }\n const start = args.after && (args.excludeEnds ? args.after.add(1, 'day') : args.after);\n const end = args.before && (args.excludeEnds ? args.before.subtract(1, 'day') : args.before);\n const iterator = this._run({ start, end });\n let date = iterator.next().value;\n if (!date) return false;\n while (date) {\n if (date.get('weekday') === args.weekday) {\n return true;\n }\n date = iterator.next({\n skipToDate: date\n .add(getDifferenceBetweenWeekdays(date.get('weekday'), args.weekday), 'day')\n .granularity('day'),\n }).value;\n }\n return false;\n }\n if (!args.date) {\n throw new ArgumentError(\n `\"occursOn()\" must be called with either a \"date\" or \"weekday\" argument`,\n );\n }\n if (this.hasDuration) {\n const maxDuration = this.getMaxDuration('occursOn', args);\n const iterator = this._run({\n start: args.date.subtract(maxDuration, 'millisecond'),\n end: args.date,\n });\n for (const date of iterator) {\n if (date.end.isBefore(args.date)) continue;\n if (date.isAfter(args.date)) return false;\n return true;\n }\n return false;\n }\n for (const day of this._run({ start: args.date, end: args.date })) {\n return !!day;\n }\n return false;\n }\n /**\n * Returns true if an occurrence starts after the provided datetime.\n * If the `excludeStart` option is provided, then occurrences\n * equal to the provided datetime are ignored.\n *\n * If the occurrence generator has a duration, and `excludeStart !== true`,\n * and a `maxDuration` argument is supplied (either in the constructor or\n * here), then any occurrence that's end time is after/equal to the provided\n * datetime return true.\n */\n occursAfter(date, options = {}) {\n const adapter = this.normalizeDateInput(date);\n if (this.hasDuration && !options.excludeStart) {\n const maxDuration = this.getMaxDuration('occursAfter', options);\n const iterator = this._run({\n start: adapter.subtract(maxDuration, 'millisecond'),\n });\n for (const date of iterator) {\n if (date.end.isBefore(adapter)) continue;\n return true;\n }\n return false;\n }\n for (const day of this._run({ start: adapter })) {\n if (options.excludeStart && day.isEqual(adapter)) {\n continue;\n }\n return true;\n }\n return false;\n }\n /**\n * Returns true if an occurrence starts before the provided datetime.\n * If the `excludeStart` option is provided, then occurrences\n * equal to the provided datetime are ignored.\n *\n * If the occurrence generator has a duration, and `excludeStart` is\n * also provided, then this will only return true if an occurrence\n * both starts and ends before the provided datetime.\n */\n occursBefore(date, options = {}) {\n const adapter = this.normalizeDateInput(date);\n if (this.hasDuration && options.excludeStart) {\n for (const day of this._run({ end: adapter, reverse: true })) {\n if (day.end.isAfterOrEqual(adapter)) continue;\n return true;\n }\n return false;\n }\n for (const day of this._run({ end: adapter, reverse: true })) {\n if (options.excludeStart && day.isEqual(adapter)) {\n continue;\n }\n return true;\n }\n return false;\n }\n get dateAdapter() {\n return DateAdapterBase$1.adapter;\n }\n normalizeOccurrencesArgs(rawArgs) {\n return Object.assign(Object.assign({}, rawArgs), {\n start: this.normalizeDateInput(rawArgs.start),\n end: this.normalizeDateInput(rawArgs.end),\n });\n }\n normalizeCollectionsArgs(rawArgs) {\n if (rawArgs.reverse !== undefined) {\n throw new ArgumentError(\n '`collections()` does not support the `reverse` option at this time.',\n );\n }\n return Object.assign(Object.assign({}, rawArgs), {\n start: this.normalizeDateInput(rawArgs.start),\n end: this.normalizeDateInput(rawArgs.end),\n });\n }\n normalizeOccursOnArgs(rawArgs = {}) {\n return Object.assign(Object.assign({}, rawArgs), {\n date: this.normalizeDateInput(rawArgs.date),\n after: this.normalizeDateInput(rawArgs.after),\n before: this.normalizeDateInput(rawArgs.before),\n excludeDates:\n rawArgs.excludeDates && rawArgs.excludeDates.map(date => this.normalizeDateInput(date)),\n });\n }\n normalizeRunArgs(args) {\n return Object.assign(Object.assign({}, args), {\n start: this.normalizeDateInput(args.start),\n end: this.normalizeDateInput(args.end),\n });\n }\n normalizeDateInput(date) {\n return date ? dateInputToDateTime(date, this.timezone) : undefined;\n }\n normalizeDateInputToAdapter(date) {\n if (!date) return;\n return dateInputToDateAdapter(date);\n }\n normalizeRunOutput(date) {\n return normalizeDateTimeTimezone$1(date, this.timezone);\n }\n getMaxDuration(method, options) {\n const maxDuration = options.maxDuration || this.maxDuration;\n if (!Number.isInteger(maxDuration)) {\n throw new ArgumentError(\n `When an occurrence generator ` +\n `has a duration, a 'maxDuration' argument must be supplied ` +\n `to ${method}().`,\n );\n }\n return maxDuration;\n }\n}\nclass OccurrenceIterator {\n constructor(iterable, args) {\n this.iterable = iterable;\n this.args = args;\n // Need to assert the return type of these methods to prevent typescript from\n // incorrectly reducing them to `DateAdapterBase & { generators: G }`.\n this[Symbol.iterator] = () => this.occurrenceIterator();\n this.iterator = iterable._run(args);\n this.isInfinite = iterable.isInfinite;\n }\n next(args) {\n return this.occurrenceIterator(args).next();\n }\n toArray() {\n if (this.args.end || this.args.take || !this.isInfinite) {\n return Array.from(this.occurrenceIterator());\n }\n throw new InfiniteLoopError(\n 'OccurrenceIterator#toArray() can only be called if the iterator ' +\n 'is not infinite, or you provide and `end` argument, or you provide ' +\n 'a `take` argument.',\n );\n }\n *occurrenceIterator(rawArgs) {\n let args = this.normalizeRunArgs(rawArgs);\n let date = this.iterator.next(args).value;\n while (date) {\n const yieldArgs = yield this.normalizeDateOutput(date);\n args = this.normalizeRunArgs(yieldArgs);\n date = this.iterator.next(args).value;\n }\n return undefined;\n }\n normalizeRunArgs(args) {\n return {\n skipToDate: this.normalizeDateInput(args && args.skipToDate),\n };\n }\n normalizeDateInput(date) {\n return date ? dateInputToDateTime(date, this.iterable.timezone) : undefined;\n }\n normalizeDateOutput(date) {\n if (!date) return;\n return date ? DateAdapterBase$1.adapter.fromDateTime(date) : undefined;\n }\n}\nclass Collection {\n constructor(dates = [], granularity, periodStart, periodEnd) {\n this.dates = dates;\n this.granularity = granularity;\n this.periodStart = periodStart;\n this.periodEnd = periodEnd;\n }\n}\nclass CollectionIterator {\n constructor(iterable, args) {\n this.iterable = iterable;\n this.args = args;\n this.granularity = 'year';\n this[Symbol.iterator] = () => this.iterator;\n if (args.granularity) {\n this.granularity = args.granularity;\n if (this.granularity === 'week' && !args.weekStart) {\n throw new Error('\"week\" granularity requires `weekStart` arg');\n }\n }\n if (args.weekStart) {\n this.weekStart = args.weekStart;\n }\n if (args.reverse) {\n throw new Error(\n '`OccurrenceGenerator#collections()` does not support iterating in reverse. ' +\n 'Though `OccurrenceGenerator#occurrences()` does support iterating in reverse.',\n );\n }\n // Set the end arg, if present, to the end of the period.\n this.args = Object.assign(Object.assign({}, args), {\n start: args.start || iterable._run().next().value,\n end: args.end && this.getPeriod(args.end).end,\n });\n this.startDate =\n (this.args.start && this.normalizeDateOutput(this.getPeriod(this.args.start).start)) || null;\n this.iterator = this.collectionIterator();\n }\n next() {\n return this.iterator.next();\n }\n /**\n * While `next()` and `[Symbol.iterator]` both share state,\n * `toArray()` does not share state and always returns the whole\n * collections array.\n */\n toArray() {\n if (this.args.end || this.args.take || !this.iterable.isInfinite) {\n const collections = [];\n for (const collection of this.collectionIterator()) {\n collections.push(collection);\n }\n return collections;\n }\n throw new InfiniteLoopError(\n 'CollectionIterator#toArray() can only be called if the iterator ' +\n 'is not infinite, or you provide and `end` argument, or you provide ' +\n 'a `take` argument.',\n );\n }\n normalizeDateOutput(date) {\n if (!date) return;\n return DateAdapterBase$1.adapter.fromDateTime(date);\n }\n *collectionIterator() {\n if (!this.startDate) return;\n let iterator = this.occurrenceIterator();\n let date = iterator.next().value;\n if (!date) return;\n // `period` === `periodStart` unless the granularity\n // is `MONTHLY` and a `weekStart` param was provided. In this case,\n // period holds a date === the first of the current month while\n // periodStart holds a date === the beginning of the first week of the month\n // (which might be in the the previous month). Read the\n // `OccurrenceGenerator#collections()` description for more info.\n let period = this.getPeriod(this.args.start);\n let dates = [];\n let index = 0;\n while (date && (this.args.take === undefined || this.args.take > index)) {\n while (date && date.isBeforeOrEqual(period.end)) {\n dates.push(date);\n date = iterator.next().value;\n }\n yield new Collection(\n dates.map(date => this.normalizeDateOutput(date)),\n this.granularity,\n this.normalizeDateOutput(period.start),\n this.normalizeDateOutput(period.end),\n );\n if (!date) return;\n dates = [];\n period = !this.args.skipEmptyPeriods\n ? this.getPeriod(this.incrementPeriod(period.period))\n : this.getPeriod(date);\n // With these args, periods may overlap and the same date may show up\n // in two periods. Because of this, we need to reset the iterator\n // (otherwise it won't return a date it has already returned).\n if (this.granularity === 'month' && this.weekStart) {\n iterator = this.iterable._run({\n start: period.start,\n end: this.args.end,\n });\n date = iterator.next().value;\n }\n index++;\n }\n }\n getPeriod(date) {\n let start;\n let end;\n let period;\n if (this.granularity === 'month' && this.weekStart) {\n start = date.granularity('month').granularity('week', { weekStart: this.weekStart });\n end = date.endGranularity('month').endGranularity('week', { weekStart: this.weekStart });\n period = date.granularity('month');\n } else {\n start = date.granularity(this.granularity, { weekStart: this.weekStart });\n end = date.endGranularity(this.granularity, { weekStart: this.weekStart });\n period = start;\n }\n return { start, end, period };\n }\n incrementPeriod(date) {\n return date.add(1, this.granularity);\n }\n occurrenceIterator() {\n let start = this.args.start || this.iterable._run().next().value;\n if (!start) return this.iterable._run(this.args);\n start = this.getPeriod(start).start;\n return this.iterable._run({\n start,\n end: this.args.end,\n });\n }\n}\nclass Operator extends OccurrenceGenerator {\n constructor(streams, config) {\n super(config);\n this.streams = streams;\n this.config = config;\n this.timezone = config.timezone;\n this.streams = streams.map(stream =>\n stream instanceof Operator ? stream : stream.set('timezone', this.timezone),\n );\n this.isInfinite = this.calculateIsInfinite();\n this.hasDuration = this.calculateHasDuration();\n }\n normalizeDateInput(date) {\n if (!date) return;\n return dateInputToDateTime(date, this.timezone);\n }\n normalizeRunOutput(date) {\n return normalizeDateTimeTimezone$1(date, this.timezone);\n }\n}\n\n/**\n * Simple class that lets us access the `value`, `runArgs`, and `done`\n * status of an OccurrenceGenerator iterator\n */\nclass IterableWrapper {\n constructor(generator, runArgs) {\n this.runArgs = runArgs;\n this.stream = generator._run(this.runArgs);\n this.next();\n }\n next(args) {\n const { done, value } = this.stream.next(args);\n this.done = typeof done === 'boolean' ? done : true;\n this.value = value;\n return { done, value };\n }\n}\nfunction processYieldArgs(streams, options = {}, yieldArgs = {}) {\n if (!yieldArgs.skipToDate || streams.length === 0) return;\n // check for invalid `skipToDate` option\n if (\n options.reverse\n ? streams.every(s => s.value.isBeforeOrEqual(yieldArgs.skipToDate))\n : streams.every(s => s.value.isAfterOrEqual(yieldArgs.skipToDate))\n ) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n for (const stream of streams) {\n if (stream.done) continue; // no point in calling `next()`\n if (\n options.reverse\n ? stream.value.isBeforeOrEqual(yieldArgs.skipToDate)\n : stream.value.isAfterOrEqual(yieldArgs.skipToDate)\n ) {\n // This can happen there are two streams and one stream starts after the other finishes.\n // Or, when iterating in reverse, when one stream ends before the other starts.\n // In this case we don't want to call `next()` because it will throw an error.\n // In both of these cases, calling `next()` won't do anything anyway.\n continue;\n }\n stream.next(yieldArgs);\n }\n}\n/** sorts ascending with completed iterables at the end */\nfunction streamsComparer(a, b) {\n if (a.done && b.done) return 0;\n if (a.done) return 1;\n if (b.done) return -1;\n if (a.value.isAfter(b.value)) return 1;\n return -1;\n}\n/** sorts descending with completed iterables at the start */\nfunction streamsReverseComparer(a, b) {\n if (a.done && b.done) return 0;\n if (a.done) return -1;\n if (b.done) return 1;\n if (a.value.isAfter(b.value)) return -1;\n return 1;\n}\nfunction selectNextIterable(streams, options = {}, yieldArgs = {}) {\n processYieldArgs(streams, options, yieldArgs);\n return streams\n .sort(options.reverse ? streamsReverseComparer : streamsComparer)\n .filter(s => !s.done)\n .shift();\n}\nfunction selectLastIterable(streams, options = {}, yieldArgs = {}) {\n processYieldArgs(streams, options, yieldArgs);\n return streams\n .sort(options.reverse ? streamsReverseComparer : streamsComparer)\n .filter(s => !s.done)\n .pop();\n}\n\n/**\n * An operator function which accepts a spread of occurrence generators\n * and adds their occurrences to the output.\n *\n * @param streams a spread of occurrence generators\n */\nfunction add(...streams) {\n return options => new AddOperator(streams, options);\n}\nclass AddOperator extends Operator {\n set(_, value) {\n return new AddOperator(\n this.streams.map(stream => stream.set('timezone', value)),\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n *_run(args = {}) {\n const wrappedStreams = this.streams.map(input => new IterableWrapper(input, args));\n if (this.config.base) {\n wrappedStreams.push(new IterableWrapper(this.config.base, args));\n }\n if (wrappedStreams.length === 0) return;\n let stream = selectNextIterable(wrappedStreams, args);\n while (stream && !stream.done) {\n // yield the current stream's value\n const yieldArgs = yield this.normalizeRunOutput(stream.value);\n if (!(yieldArgs && yieldArgs.skipToDate)) {\n // iterate the current stream\n stream.next();\n }\n // select the next stream\n stream = selectNextIterable(wrappedStreams, args, yieldArgs);\n }\n }\n calculateIsInfinite() {\n return (\n (this.config.base && this.config.base.isInfinite) ||\n this.streams.some(stream => stream.isInfinite)\n );\n }\n calculateHasDuration() {\n const streamsDuration = this.streams.every(stream => stream.hasDuration);\n if (!this.config.base) return streamsDuration;\n return this.config.base.hasDuration && streamsDuration;\n }\n}\n\nclass Calendar extends OccurrenceGenerator {\n /**\n *\n * Create a new Calendar object with the specified options.\n *\n * ### Options\n *\n * - **timezone**: The timezone that yielded occurrences should be *displayed* in.\n * Note, this one affects the *displayed* timezone of yielded occurrences.\n * For rules, occurrences are first found using the unmodified rule\n * config (including whatever timezone the `start` datetime is defined\n * in), and then converted to the timezone specified here before being\n * yielded. By default, the timezone is *local* time (`null`). So if you don't\n * want your rules to be displayed in local time, you must supply a\n * timezone argument.\n * - **data**: arbitrary data you can associate with this Calendar. This\n * is the only mutable property of `Calendar` objects.\n * - **maxDuration**: currently unused.\n * - **schedules**: either an occurrence generator, or an array of occurrence generators, which should\n * be used to build up this Calendar's occurrences. The Calendar will display the union of occurrences\n * its schedules produce.\n *\n */\n constructor(args = {}) {\n super(args);\n this.schedules = [];\n this.data = args.data;\n if (args.schedules) {\n this.schedules = Array.isArray(args.schedules) ? args.schedules : [args.schedules];\n this.schedules = this.schedules.map(schedule => schedule.set('timezone', this.timezone));\n }\n this.isInfinite = this.schedules.some(schedule => schedule.isInfinite);\n this.hasDuration = this.schedules.every(schedule => schedule.hasDuration);\n }\n occurrences(args = {}) {\n return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n }\n collections(args = {}) {\n return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n }\n set(prop, value, options) {\n if (prop === 'timezone') {\n return new Calendar({\n schedules: this.schedules.map(schedule => schedule.set(prop, value, options)),\n data: this.data,\n timezone: value,\n maxDuration: this.maxDuration,\n });\n } else if (prop === 'schedules') {\n return new Calendar({\n schedules: Array.isArray(value) ? value : [value],\n data: this.data,\n timezone: this.timezone,\n maxDuration: this.maxDuration,\n });\n }\n throw new ArgumentError('Unknown value for `prop`: ' + `\"${prop}\"`);\n }\n *_run(args = {}) {\n if (this.schedules.length === 0) return;\n const count = args.take;\n delete args.take;\n let iterator;\n if (this.schedules.length === 1) {\n iterator = this.schedules[0]._run(args);\n } else {\n iterator = new AddOperator(this.schedules, {\n timezone: this.timezone,\n })._run(args);\n }\n let date = iterator.next().value;\n let index = 0;\n while (date && (count === undefined || count > index)) {\n date = date.add(this, 'generator');\n const yieldArgs = yield this.normalizeRunOutput(date);\n date = iterator.next(yieldArgs).value;\n index++;\n }\n return undefined;\n }\n}\n\nclass Dates extends OccurrenceGenerator {\n constructor(args = {}) {\n super(args);\n this.adapters = [];\n this.isInfinite = false;\n this.maxDuration = 0;\n this.datetimes = [];\n this.data = args.data;\n if (args.dates) {\n this.adapters = args.dates.map(date => {\n let adapter = this.normalizeDateInputToAdapter(date);\n if (args.duration && !adapter.duration) {\n adapter = adapter.set('duration', args.duration);\n }\n return adapter.set('timezone', this.timezone);\n });\n this.datetimes = this.adapters.map(adapter => adapter.toDateTime());\n }\n this.hasDuration = this.datetimes.every(date => !!date.duration);\n if (this.hasDuration) {\n this.maxDuration = this.adapters.reduce(\n (prev, curr) => (curr.duration > prev ? curr.duration : prev),\n 0,\n );\n }\n }\n get length() {\n return this.adapters.length;\n }\n /** Returns the first occurrence or, if there are no occurrences, null. */\n get firstDate() {\n return this.adapters[0] || null;\n }\n /** Returns the last occurrence or, if there are no occurrences, null. */\n get lastDate() {\n return this.adapters[this.length - 1] || null;\n }\n occurrences(args = {}) {\n return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n }\n collections(args = {}) {\n return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n }\n add(value) {\n return new Dates({\n dates: [...this.adapters, value],\n timezone: this.timezone,\n data: this.data,\n });\n }\n remove(value) {\n const dates = this.adapters.slice();\n const input = this.normalizeDateInputToAdapter(value);\n const index = dates.findIndex(date => date.valueOf() === input.valueOf());\n if (index >= 0) {\n dates.splice(index, 1);\n }\n return new Dates({\n dates,\n timezone: this.timezone,\n data: this.data,\n });\n }\n set(prop, value, options = {}) {\n let timezone = this.timezone;\n let dates = this.adapters.slice();\n if (prop === 'timezone') {\n if (value === this.timezone) return this;\n else if (options.keepLocalTime) {\n dates = this.adapters.map(adapter => {\n const json = adapter.toJSON();\n json.timezone = value;\n return this.dateAdapter.fromJSON(json);\n });\n }\n timezone = value;\n } else if (prop === 'dates') {\n dates = value;\n } else if (prop === 'duration') {\n dates = dates.map(date => date.set('duration', value || 0));\n } else {\n throw new ArgumentError(\n `Unexpected prop argument \"${prop}\". Accepted values are \"timezone\" or \"dates\"`,\n );\n }\n return new Dates({\n dates,\n data: this.data,\n timezone,\n });\n }\n filter(fn) {\n return new Dates({\n dates: this.adapters.filter(fn),\n data: this.data,\n timezone: this.timezone,\n });\n }\n *_run(args = {}) {\n let dates = this.datetimes.sort(dateTimeSortComparer);\n if (args.start) {\n dates = dates.filter(date => date.isAfterOrEqual(args.start));\n }\n if (args.end) {\n dates = dates.filter(date => date.isBeforeOrEqual(args.end));\n }\n if (args.reverse) {\n dates = dates.slice().reverse();\n }\n if (args.take) {\n dates = dates.slice(0, args.take);\n }\n const dateCache = dates.slice();\n let date = dateCache.shift();\n let yieldArgs;\n while (date) {\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n (args.reverse ? yieldArgs.skipToDate.isBefore(date) : yieldArgs.skipToDate.isAfter(date))\n ) {\n date = dateCache.shift();\n continue;\n }\n date = date.add(this, 'generator');\n yieldArgs = yield this.normalizeRunOutput(date);\n // Here, we are matching the behavior of the RecurrenceRulesIterator\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n (args.reverse\n ? yieldArgs.skipToDate.isAfterOrEqual(date)\n : yieldArgs.skipToDate.isBeforeOrEqual(date))\n ) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n date = dateCache.shift();\n }\n return undefined;\n }\n}\n\nclass InvalidDateAdapterError extends Error {}\nlet dateAdapterConfig;\nclass DateAdapterBase {\n constructor(_date, options) {\n this.duration = (options && options.duration) || 0;\n this.generators = (options && options.generators && options.generators.slice()) || [];\n if (!Number.isInteger(this.duration) || this.duration < 0) {\n throw new InvalidDateAdapterError('duration must be a non-negative integer');\n }\n }\n static set adapter(value) {\n if (dateAdapterConfig) {\n throw new Error(`\"${dateAdapterConfig.name}\" has already been configured.`);\n }\n dateAdapterConfig = value;\n }\n static get adapter() {\n if (!dateAdapterConfig) {\n throw new Error('No date adapter has been configured. See rSchedule docs.');\n }\n return dateAdapterConfig;\n }\n static isDate(_object) {\n throw unimplementedError('isDate()');\n }\n static fromDate(_date, _options) {\n throw unimplementedError('fromDate()');\n }\n static fromJSON(_json) {\n throw unimplementedError('fromJSON()');\n }\n static fromDateTime(_datetime) {\n throw unimplementedError('fromDateTime()');\n }\n /**\n * Returns a string in simplified extended ISO format (ISO 8601).\n *\n * _Note: this method is intended for testing and its\n * implementation isn't particularly performant._\n */\n toISOString() {\n return this.set('timezone', 'UTC')\n .toDateTime()\n .toISOString();\n }\n toDateTime() {\n const date = DateTime.fromJSON(\n Object.assign(Object.assign({}, this.toJSON()), { generators: this.generators }),\n );\n return date;\n }\n}\nDateAdapterBase.hasTimezoneSupport = false;\nfunction unimplementedError(name) {\n return new Error(`You must implement the \"${name}\" method for this DateAdapter class`);\n}\nvar DateAdapter;\n(function(DateAdapter) {\n DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n DateAdapter.MILLISECONDS_IN_SECOND = 1000;\n DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;\n DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;\n DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;\n DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;\n})(DateAdapter || (DateAdapter = {}));\nclass InvalidDateTimeError extends Error {}\nclass DateTime {\n constructor(date, timezone, duration, generators) {\n this.date = new Date(date);\n this.timezone = timezone || null;\n this.duration = duration || 0;\n this.generators = (generators && generators.slice()) || [];\n if (!Number.isInteger(this.duration) || this.duration < 0) {\n throw new InvalidDateTimeError('duration must be a non-negative integer');\n }\n this.assertIsValid();\n }\n // /**\n // * Similar to `Array.isArray()`, `isInstance()` provides a surefire method\n // * of determining if an object is a `DateTime` by checking against the\n // * global symbol registry.\n // */\n // static isInstance(object: any): object is DateTime {\n // return !!(object && object[DATETIME_ID]);\n // }\n static fromJSON(json) {\n const date = new Date(\n Date.UTC(\n json.year,\n json.month - 1,\n json.day,\n json.hour,\n json.minute,\n json.second,\n json.millisecond,\n ),\n );\n return new DateTime(date, json.timezone, json.duration, json.generators);\n }\n static fromDateAdapter(adapter) {\n return DateTime.fromJSON(\n Object.assign(Object.assign({}, adapter.toJSON()), { generators: adapter.generators }),\n );\n }\n /**\n * Returns `undefined` if `duration` is `0`. Else returns\n * the `end` date.\n */\n get end() {\n if (!this.duration) return;\n if (this._end) return this._end;\n this._end = this.add(this.duration, 'millisecond');\n return this._end;\n }\n // While we constrain the argument to be another DateAdapter in typescript\n // we handle the case of someone passing in another type of object in javascript\n isEqual(object) {\n if (!object) {\n return false;\n }\n assertSameTimeZone(this, object);\n return this.valueOf() === object.valueOf();\n }\n isBefore(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() < object.valueOf();\n }\n isBeforeOrEqual(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() <= object.valueOf();\n }\n isAfter(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() > object.valueOf();\n }\n isAfterOrEqual(object) {\n assertSameTimeZone(this, object);\n return this.valueOf() >= object.valueOf();\n }\n isOccurring(object) {\n if (!this.duration) {\n throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');\n }\n assertSameTimeZone(this, object);\n return (\n object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'))\n );\n }\n add(amount, unit) {\n switch (unit) {\n case 'generator': {\n const generators = this.generators.slice();\n generators.unshift(amount);\n return new DateTime(this.date, this.timezone, this.duration, generators);\n }\n case 'year':\n return this.forkDateTime(addUTCYears(this.date, amount));\n case 'month':\n return this.forkDateTime(addUTCMonths(this.date, amount));\n case 'week':\n return this.forkDateTime(addUTCWeeks(this.date, amount));\n case 'day':\n return this.forkDateTime(addUTCDays(this.date, amount));\n case 'hour':\n return this.forkDateTime(addUTCHours(this.date, amount));\n case 'minute':\n return this.forkDateTime(addUTCMinutes(this.date, amount));\n case 'second':\n return this.forkDateTime(addUTCSeconds(this.date, amount));\n case 'millisecond':\n return this.forkDateTime(addUTCMilliseconds(this.date, amount));\n default:\n throw new Error('Invalid unit provided to `DateTime#add`');\n }\n }\n subtract(amount, unit) {\n switch (unit) {\n case 'year':\n return this.forkDateTime(subUTCYears(this.date, amount));\n case 'month':\n return this.forkDateTime(subUTCMonths(this.date, amount));\n case 'week':\n return this.forkDateTime(subUTCWeeks(this.date, amount));\n case 'day':\n return this.forkDateTime(subUTCDays(this.date, amount));\n case 'hour':\n return this.forkDateTime(subUTCHours(this.date, amount));\n case 'minute':\n return this.forkDateTime(subUTCMinutes(this.date, amount));\n case 'second':\n return this.forkDateTime(subUTCSeconds(this.date, amount));\n case 'millisecond':\n return this.forkDateTime(subUTCMilliseconds(this.date, amount));\n default:\n throw new Error('Invalid unit provided to `DateTime#subtract`');\n }\n }\n get(unit) {\n switch (unit) {\n case 'year':\n return this.date.getUTCFullYear();\n case 'month':\n return this.date.getUTCMonth() + 1;\n case 'yearday':\n return getUTCYearDay(this.date);\n case 'weekday':\n return DateAdapter.WEEKDAYS[this.date.getUTCDay()];\n case 'day':\n return this.date.getUTCDate();\n case 'hour':\n return this.date.getUTCHours();\n case 'minute':\n return this.date.getUTCMinutes();\n case 'second':\n return this.date.getUTCSeconds();\n case 'millisecond':\n return this.date.getUTCMilliseconds();\n default:\n throw new Error('Invalid unit provided to `DateTime#set`');\n }\n }\n set(unit, value) {\n if (unit === 'duration') {\n return new DateTime(this.date, this.timezone, value, this.generators);\n }\n if (unit === 'generators') {\n return new DateTime(this.date, this.timezone, this.duration, value);\n }\n let date = new Date(this.date);\n switch (unit) {\n case 'year':\n date.setUTCFullYear(value);\n break;\n case 'month': {\n // If the current day of the month\n // is greater than days in the month we are moving to, we need to also\n // set the day to the end of that month.\n const length = monthLength(value, date.getUTCFullYear());\n const day = date.getUTCDate();\n if (day > length) {\n date.setUTCDate(1);\n date.setUTCMonth(value);\n date = subUTCDays(date, 1);\n } else {\n date.setUTCMonth(value - 1);\n }\n break;\n }\n case 'day':\n date.setUTCDate(value);\n break;\n case 'hour':\n date.setUTCHours(value);\n break;\n case 'minute':\n date.setUTCMinutes(value);\n break;\n case 'second':\n date.setUTCSeconds(value);\n break;\n case 'millisecond':\n date.setUTCMilliseconds(value);\n break;\n default:\n throw new Error('Invalid unit provided to `DateTime#set`');\n }\n return this.forkDateTime(date);\n }\n granularity(granularity, opt = {}) {\n let date = this.forkDateTime(this.date);\n switch (granularity) {\n case 'year':\n date = date.set('month', 1);\n case 'month':\n date = date.set('day', 1);\n break;\n case 'week':\n date = setDateToStartOfWeek(date, opt.weekStart);\n }\n switch (granularity) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n date = date.set('hour', 0);\n case 'hour':\n date = date.set('minute', 0);\n case 'minute':\n date = date.set('second', 0);\n case 'second':\n date = date.set('millisecond', 0);\n case 'millisecond':\n return date;\n default:\n throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n }\n }\n endGranularity(granularity, opt = {}) {\n let date = this.forkDateTime(this.date);\n switch (granularity) {\n case 'year':\n date = date.set('month', 12);\n case 'month':\n date = date.set('day', monthLength(date.get('month'), date.get('year')));\n break;\n case 'week':\n date = setDateToEndOfWeek(date, opt.weekStart);\n }\n switch (granularity) {\n case 'year':\n case 'month':\n case 'week':\n case 'day':\n date = date.set('hour', 23);\n case 'hour':\n date = date.set('minute', 59);\n case 'minute':\n date = date.set('second', 59);\n case 'second':\n date = date.set('millisecond', 999);\n case 'millisecond':\n return date;\n default:\n throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n }\n }\n toISOString() {\n return this.date.toISOString();\n }\n toDateTime() {\n return this;\n }\n toJSON() {\n const json = {\n timezone: this.timezone,\n year: this.get('year'),\n month: this.get('month'),\n day: this.get('day'),\n hour: this.get('hour'),\n minute: this.get('minute'),\n second: this.get('second'),\n millisecond: this.get('millisecond'),\n };\n if (this.duration) {\n json.duration = this.duration;\n }\n return json;\n }\n valueOf() {\n return this.date.valueOf();\n }\n assertIsValid() {\n if (isNaN(this.valueOf())) {\n throw new InvalidDateTimeError('DateTime has invalid date.');\n }\n return true;\n }\n forkDateTime(date) {\n return new DateTime(date, this.timezone, this.duration, this.generators);\n }\n}\nfunction assertSameTimeZone(x, y) {\n if (x.timezone !== y.timezone) {\n throw new InvalidDateTimeError(\n 'Attempted to compare a datetime to another date in a different timezone: ' +\n JSON.stringify(x) +\n ' and ' +\n JSON.stringify(y),\n );\n }\n return true;\n}\nfunction setDateToStartOfWeek(date, wkst) {\n const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n return date.subtract(index, 'day');\n}\nfunction setDateToEndOfWeek(date, wkst) {\n const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n return date.add(6 - index, 'day');\n}\nfunction orderedWeekdays(wkst = 'SU') {\n const wkdays = DateAdapter.WEEKDAYS.slice();\n let index = wkdays.indexOf(wkst);\n while (index !== 0) {\n shiftArray(wkdays);\n index--;\n }\n return wkdays;\n}\nfunction shiftArray(array, from = 'first') {\n if (array.length === 0) {\n return array;\n } else if (from === 'first') {\n array.push(array.shift());\n } else {\n array.unshift(array.pop());\n }\n return array;\n}\n/**\n * Returns the days in the given month.\n *\n * @param month base-1\n * @param year\n */\nfunction monthLength(month, year) {\n const block = {\n 1: 31,\n 2: getDaysInFebruary(year),\n 3: 31,\n 4: 30,\n 5: 31,\n 6: 30,\n 7: 31,\n 8: 31,\n 9: 30,\n 10: 31,\n 11: 30,\n 12: 31,\n };\n return block[month];\n}\nfunction getDaysInFebruary(year) {\n return isLeapYear(year) ? 29 : 28;\n}\n// taken from date-fn\nfunction isLeapYear(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\nfunction getUTCYearDay(now) {\n const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));\n const diff = now.valueOf() - start.valueOf();\n return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);\n}\n/**\n * These functions are basically lifted from `date-fns`, but changed\n * to use the UTC date methods, which `date-fns` doesn't support.\n */\nfunction toInteger(input) {\n if (input === null || input === true || input === false) {\n return NaN;\n }\n const int = Number(input);\n if (isNaN(int)) {\n return int;\n }\n return int < 0 ? Math.ceil(int) : Math.floor(int);\n}\nfunction addMilliseconds(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');\n }\n const timestamp = dirtyDate.valueOf();\n const amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}\nfunction addUTCYears(date, input) {\n const amount = toInteger(input);\n return addUTCMonths(date, amount * 12);\n}\nfunction addUTCMonths(date, input) {\n const amount = toInteger(input);\n date = new Date(date);\n const desiredMonth = date.getUTCMonth() + amount;\n const dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);\n dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);\n const daysInMonth = monthLength(\n dateWithDesiredMonth.getUTCMonth() + 1,\n dateWithDesiredMonth.getUTCFullYear(),\n );\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));\n return date;\n}\nfunction addUTCWeeks(date, input) {\n const amount = toInteger(input);\n const days = amount * 7;\n return addUTCDays(date, days);\n}\nfunction addUTCDays(date, input) {\n // by adding milliseconds rather than days, we supress the native Date object's automatic\n // daylight savings time conversions which we don't want in UTC mode\n return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);\n}\nfunction addUTCHours(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);\n}\nfunction addUTCMinutes(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);\n}\nfunction addUTCSeconds(date, input) {\n const amount = toInteger(input);\n return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);\n}\nfunction addUTCMilliseconds(date, input) {\n const amount = toInteger(input);\n const timestamp = date.getTime();\n return new Date(timestamp + amount);\n}\nfunction subUTCYears(date, amount) {\n return addUTCYears(date, -amount);\n}\nfunction subUTCMonths(date, amount) {\n return addUTCMonths(date, -amount);\n}\nfunction subUTCWeeks(date, amount) {\n return addUTCWeeks(date, -amount);\n}\nfunction subUTCDays(date, amount) {\n return addUTCDays(date, -amount);\n}\nfunction subUTCHours(date, amount) {\n return addUTCHours(date, -amount);\n}\nfunction subUTCMinutes(date, amount) {\n return addUTCMinutes(date, -amount);\n}\nfunction subUTCSeconds(date, amount) {\n return addUTCSeconds(date, -amount);\n}\nfunction subUTCMilliseconds(date, amount) {\n return addUTCMilliseconds(date, -amount);\n}\n\n// export function normalizeDateInput(\n// dateAdapter: DateAdapterConstructor,\n// input: DateInput,\n// timezone: string | null,\n// ): DateTime {\n// if (input instanceof DateTime) {\n// if (input.timezone !== timezone) {\n// return dateAdapter\n// .fromDateTime(input)\n// .set('timezone', timezone)\n// .toDateTime();\n// }\n// return input;\n// }\n// return input instanceof DateAdapter\n// ? input.set('timezone', timezone).toDateTime()\n// : new dateAdapter(input).toDateTime();\n// }\nfunction normalizeDateTimeTimezone(date, timezone) {\n if (date.timezone !== timezone) {\n return DateAdapterBase.adapter\n .fromDateTime(date)\n .set('timezone', timezone)\n .toDateTime();\n }\n return date;\n}\n\nclass RuleBase extends OccurrenceGenerator {\n constructor(recurrenceRules, config, options = {}) {\n super(options);\n this.recurrenceRules = recurrenceRules;\n this.options = cloneRuleOptions(config);\n this.normOptions = normalizeRuleOptions(this.recurrenceRules, this.options);\n this.timezone =\n options.timezone !== undefined ? options.timezone : this.normOptions.start.timezone;\n this.data = options.data;\n this.hasDuration = !!config.duration;\n if (this.hasDuration) this.duration = config.duration;\n this.isInfinite = this.normOptions.end === undefined && this.normOptions.count === undefined;\n }\n occurrences(args = {}) {\n return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n }\n collections(args = {}) {\n return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n }\n *_run(rawArgs = {}) {\n const args = this.normalizeRunArgs(rawArgs);\n const iterator = new RecurrenceRulesIterator(\n recurrenceRulesReducer(this.recurrenceRules),\n this.normOptions,\n args,\n );\n let date = iterator.next().value;\n let index = 0;\n while (date && (args.take === undefined || index < args.take)) {\n index++;\n date = date.add(this, 'generator');\n const yieldArgs = yield this.normalizeRunOutput(date);\n if (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) {\n // The RecurrenceRuleIterator might have a different timezone from the rule.\n // Because of this, the yieldArgs will not properly be normalized by the\n // OccurrenceIterator, so we need to do it here\n date = iterator.next(\n Object.assign(Object.assign({}, yieldArgs), {\n skipToDate: normalizeDateTimeTimezone(yieldArgs.skipToDate, iterator.start.timezone),\n }),\n ).value;\n } else {\n // theoretically, the yieldArgs are undefined here\n // maybe in the future there will be other yieldArg options though\n date = iterator.next(yieldArgs).value;\n }\n }\n return undefined;\n }\n}\n\nclass Rule extends RuleBase {\n /**\n * Create a new Rule object with the specified rule config and options.\n *\n * ### Options\n *\n * - **timezone**: the timezone that yielded occurrences should be in. Note,\n * this does not change the rule config. Occurrences are first found using\n * the unmodified rule config, and then converted to the timezone specified\n * here before being yielded.\n * - **data**: arbitrary data you can associate with this rule. This\n * is the only mutable property of `Rule` objects.\n *\n * ### Rule Config\n *\n * - #### frequency\n *\n * The frequency rule part identifies the type of recurrence rule. Valid values\n * include `\"SECONDLY\"`, `\"MINUTELY\"`, `\"HOURLY\"`, `\"DAILY\"`, `\"WEEKLY\"`,\n * `\"MONTHLY\"`, or `\"YEARLY\"`.\n *\n * - #### start\n *\n * The start of the rule (not necessarily the first occurrence).\n * Either a `DateAdapter` instance, date object, or `DateTime` object.\n * The type of date object depends on the `DateAdapter` class used for this\n * `Rule`.\n *\n * - #### end?\n *\n * The end of the rule (not necessarily the last occurrence).\n * Either a `DateAdapter` instance, date object, or `DateTime` object.\n * The type of date object depends on the `DateAdapter` class used for this\n * `Rule`.\n *\n * - #### duration?\n *\n * A length of time expressed in milliseconds.\n *\n * - #### interval?\n *\n * The interval rule part contains a positive integer representing at\n * which intervals the recurrence rule repeats. The default value is\n * `1`, meaning every second for a SECONDLY rule, every minute for a\n * MINUTELY rule, every hour for an HOURLY rule, every day for a\n * DAILY rule, every week for a WEEKLY rule, every month for a\n * MONTHLY rule, and every year for a YEARLY rule. For example,\n * within a DAILY rule, a value of `8` means every eight days.\n *\n * - #### count?\n *\n * The count rule part defines the number of occurrences at which to\n * range-bound the recurrence. `count` and `end` are both two different\n * ways of specifying how a recurrence completes.\n *\n * - #### weekStart?\n *\n * The weekStart rule part specifies the day on which the workweek starts.\n * Valid values are `\"MO\"`, `\"TU\"`, `\"WE\"`, `\"TH\"`, `\"FR\"`, `\"SA\"`, and `\"SU\"`.\n * This is significant when a WEEKLY rule has an interval greater than 1,\n * and a `byDayOfWeek` rule part is specified. The\n * default value is `\"MO\"`.\n *\n * - #### bySecondOfMinute?\n *\n * The bySecondOfMinute rule part expects an array of seconds\n * within a minute. Valid values are 0 to 60.\n *\n * - #### byMinuteOfHour?\n *\n * The byMinuteOfHour rule part expects an array of minutes within an hour.\n * Valid values are 0 to 59.\n *\n * - #### byHourOfDay?\n *\n * The byHourOfDay rule part expects an array of hours of the day.\n * Valid values are 0 to 23.\n *\n * - #### byDayOfWeek?\n *\n * *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*\n *\n * The byDayOfWeek rule part expects an array. Each array entry can\n * be a day of the week (`\"SU\"`, `\"MO\"` , `\"TU\"`, `\"WE\"`, `\"TH\"`,\n * `\"FR\"`, `\"SA\"`). If the rule's `frequency` is either MONTHLY or YEARLY,\n * Any entry can also be a tuple where the first value of the tuple is a\n * day of the week and the second value is an positive/negative integer\n * (e.g. `[\"SU\", 1]`). In this case, the number indicates the nth occurrence of\n * the specified day within the MONTHLY or YEARLY rule.\n *\n * The behavior of byDayOfWeek changes depending on the `frequency`\n * of the rule.\n *\n * Within a MONTHLY rule, `[\"MO\", 1]` represents the first Monday\n * within the month, whereas `[\"MO\", -1]` represents the last Monday\n * of the month.\n *\n * Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry\n * corresponds to an offset within the month when the byMonthOfYear rule part is\n * present, and corresponds to an offset within the year otherwise.\n *\n * Regardless of rule `frequency`, if a byDayOfWeek entry is a string\n * (rather than a tuple), it means \"all of these days\" within the specified\n * frequency (e.g. within a MONTHLY rule, `\"MO\"` represents all Mondays within\n * the month).\n *\n * - #### byDayOfMonth?\n *\n * The byDayOfMonth rule part expects an array of days\n * of the month. Valid values are 1 to 31 or -31 to -1.\n *\n * For example, -10 represents the tenth to the last day of the month.\n * The byDayOfMonth rule part *must not* be specified when the rule's\n * `frequency` is set to WEEKLY.\n *\n * - #### byMonthOfYear?\n *\n * The byMonthOfYear rule part expects an array of months\n * of the year. Valid values are 1 to 12.\n *\n */\n constructor(config, options = {}) {\n super(Rule.recurrenceRules, config, options);\n }\n set(prop, value, tzoptions = {}) {\n let options = cloneRuleOptions(this.options);\n let timezone = this.timezone;\n if (prop === 'timezone') {\n if (value === this.timezone && !tzoptions.keepLocalTime) return this;\n else if (tzoptions.keepLocalTime) {\n const json = this.normalizeDateInput(options.start).toJSON();\n json.timezone = value;\n const adapter = this.dateAdapter.fromJSON(json);\n // prettier-ignore\n options.start =\n options.start instanceof this.dateAdapter ? adapter :\n options.start instanceof DateTime$1 ? adapter.toDateTime() :\n adapter.date;\n }\n timezone = value;\n } else if (prop === 'options') {\n options = value;\n } else {\n options[prop] = value;\n }\n return new Rule(options, {\n data: this.data,\n maxDuration: this.maxDuration,\n timezone,\n });\n }\n}\nRule.recurrenceRules = [];\n\nclass ScheduleBase extends OccurrenceGenerator {\n /**\n * Create a new Schedule object with the specified options.\n *\n * The order of precidence for rrules, rdates, exrules, and exdates is:\n *\n * 1. rrules are included\n * 2. exrules are excluded\n * 3. rdates are included\n * 4. exdates are excluded\n *\n */\n constructor(options) {\n super(options);\n this.data = options.data;\n }\n occurrences(args = {}) {\n return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n }\n collections(args = {}) {\n return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n }\n *_run(args = {}) {\n const count = args.take;\n delete args.take;\n const iterator = this.occurrenceStream._run(args);\n let date = iterator.next().value;\n let index = 0;\n while (date && (count === undefined || count > index)) {\n date = date.add(this, 'generator');\n const yieldArgs = yield this.normalizeRunOutput(date);\n date = iterator.next(yieldArgs).value;\n index++;\n }\n return undefined;\n }\n}\n\n/**\n * An operator function which accepts a spread of occurrence generators\n * and removes their occurrences from the output.\n *\n * @param streams a spread of occurrence generators\n */\nfunction subtract(...streams) {\n return options => new SubtractOperator(streams, options);\n}\nclass SubtractOperator extends Operator {\n /** Not actually used but necessary for IRunnable interface */\n set(_, value) {\n return new SubtractOperator(\n this.streams.map(stream => stream.set('timezone', value)),\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n *_run(args = {}) {\n if (!this.config.base) return;\n const inclusion = new IterableWrapper(this.config.base, args);\n const exclusion = new IterableWrapper(\n new AddOperator(this.streams, {\n timezone: this.config.timezone,\n }),\n args,\n );\n cycleStreams(inclusion, exclusion, args);\n while (!inclusion.done) {\n const yieldArgs = yield this.normalizeRunOutput(inclusion.value);\n if (!(yieldArgs && yieldArgs.skipToDate)) {\n inclusion.next();\n }\n cycleStreams(inclusion, exclusion, args, yieldArgs);\n }\n }\n calculateIsInfinite() {\n return !!(this.config.base && this.config.base.isInfinite);\n }\n calculateHasDuration() {\n return !!(this.config.base && this.config.base.hasDuration);\n }\n}\nfunction cycleStreams(inclusion, exclusion, options = {}, yieldArgs = {}) {\n processYieldArgs([inclusion, exclusion], options, yieldArgs);\n iterateExclusion(inclusion, exclusion, options);\n while (!inclusion.done && !exclusion.done && inclusion.value.isEqual(exclusion.value)) {\n inclusion.next();\n iterateExclusion(inclusion, exclusion, options);\n }\n}\nfunction iterateExclusion(inclusion, exclusion, options = {}) {\n if (options.reverse) {\n while (!exclusion.done && !inclusion.done && exclusion.value.isAfter(inclusion.value)) {\n exclusion.next();\n }\n return;\n }\n while (!exclusion.done && !inclusion.done && exclusion.value.isBefore(inclusion.value)) {\n exclusion.next();\n }\n}\n\n/**\n * An operator function which deduplicates an occurrence stream. Occurrence\n * `duration` is currently ignored.\n */\nfunction unique() {\n return options => new UniqueOperator([], options);\n}\nclass UniqueOperator extends Operator {\n /** Not actually used but necessary for IRunnable interface */\n set(_, value) {\n return new UniqueOperator(\n [],\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n *_run(args = {}) {\n if (!this.config.base) return;\n const stream = new IterableWrapper(this.config.base, args);\n while (!stream.done) {\n const yieldArgs = yield this.normalizeRunOutput(stream.value);\n const lastValue = stream.value;\n // iterate the current stream\n stream.next(yieldArgs);\n while (\n !(yieldArgs && yieldArgs.skipToDate) &&\n !stream.done &&\n stream.value.isEqual(lastValue)\n ) {\n stream.next();\n }\n }\n }\n calculateIsInfinite() {\n return !!(this.config.base && this.config.base.isInfinite);\n }\n calculateHasDuration() {\n return !!(this.config.base && this.config.base.hasDuration);\n }\n}\n\nclass Schedule extends ScheduleBase {\n /**\n * Create a new Schedule object with the specified options.\n *\n * The order of precidence for rrules, rdates, exrules, and exdates is:\n *\n * 1. rrules are included\n * 2. exrules are excluded\n * 3. rdates are included\n * 4. exdates are excluded\n *\n * ### Options\n *\n * - **timezone**: The timezone that yielded occurrences should be *displayed* in.\n * Note, this one affects the *displayed* timezone of yielded occurrences.\n * For rules, occurrences are first found using the unmodified rule\n * config (including whatever timezone the `start` datetime is defined\n * in), and then converted to the timezone specified here before being\n * yielded. By default, the timezone is *local* time (`null`). So if you don't\n * want your rules to be displayed in local time, you must supply a\n * timezone argument.\n * - **data**: arbitrary data you can associate with this Schedule. This\n * is the only mutable property of `Schedule` objects.\n * - **maxDuration**: currently unused.\n * - **rrules**: rules specifying when occurrences happen. See the \"Rule Config\"\n * section below.\n * - **rdates**: individual dates that should be _included_ in the schedule.\n * - **exdates**: individual dates that should be _excluded_ from the schedule.\n * - **exrules**: rules specifying when occurrences shouldn't happen. See the\n * \"Rule Config\" section below.\n *\n * ### Rule Config\n *\n * - #### frequency\n *\n * The frequency rule part identifies the type of recurrence rule. Valid values\n * include `\"SECONDLY\"`, `\"MINUTELY\"`, `\"HOURLY\"`, `\"DAILY\"`, `\"WEEKLY\"`,\n * `\"MONTHLY\"`, or `\"YEARLY\"`.\n *\n * - #### start\n *\n * The start of the rule (not necessarily the first occurrence).\n * Either a `DateAdapter` instance, date object, or `DateTime` object.\n * The type of date object depends on the `DateAdapter` class used for this\n * `Rule`.\n *\n * - #### end?\n *\n * The end of the rule (not necessarily the last occurrence).\n * Either a `DateAdapter` instance, date object, or `DateTime` object.\n * The type of date object depends on the `DateAdapter` class used for this\n * `Rule`.\n *\n * - #### duration?\n *\n * A length of time expressed in milliseconds.\n *\n * - #### interval?\n *\n * The interval rule part contains a positive integer representing at\n * which intervals the recurrence rule repeats. The default value is\n * `1`, meaning every second for a SECONDLY rule, every minute for a\n * MINUTELY rule, every hour for an HOURLY rule, every day for a\n * DAILY rule, every week for a WEEKLY rule, every month for a\n * MONTHLY rule, and every year for a YEARLY rule. For example,\n * within a DAILY rule, a value of `8` means every eight days.\n *\n * - #### count?\n *\n * The count rule part defines the number of occurrences at which to\n * range-bound the recurrence. `count` and `end` are both two different\n * ways of specifying how a recurrence completes.\n *\n * - #### weekStart?\n *\n * The weekStart rule part specifies the day on which the workweek starts.\n * Valid values are `\"MO\"`, `\"TU\"`, `\"WE\"`, `\"TH\"`, `\"FR\"`, `\"SA\"`, and `\"SU\"`.\n * This is significant when a WEEKLY rule has an interval greater than 1,\n * and a `byDayOfWeek` rule part is specified. The\n * default value is `\"MO\"`.\n *\n * - #### bySecondOfMinute?\n *\n * The bySecondOfMinute rule part expects an array of seconds\n * within a minute. Valid values are 0 to 60.\n *\n * - #### byMinuteOfHour?\n *\n * The byMinuteOfHour rule part expects an array of minutes within an hour.\n * Valid values are 0 to 59.\n *\n * - #### byHourOfDay?\n *\n * The byHourOfDay rule part expects an array of hours of the day.\n * Valid values are 0 to 23.\n *\n * - #### byDayOfWeek?\n *\n * *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*\n *\n * The byDayOfWeek rule part expects an array. Each array entry can\n * be a day of the week (`\"SU\"`, `\"MO\"` , `\"TU\"`, `\"WE\"`, `\"TH\"`,\n * `\"FR\"`, `\"SA\"`). If the rule's `frequency` is either MONTHLY or YEARLY,\n * Any entry can also be a tuple where the first value of the tuple is a\n * day of the week and the second value is an positive/negative integer\n * (e.g. `[\"SU\", 1]`). In this case, the number indicates the nth occurrence of\n * the specified day within the MONTHLY or YEARLY rule.\n *\n * The behavior of byDayOfWeek changes depending on the `frequency`\n * of the rule.\n *\n * Within a MONTHLY rule, `[\"MO\", 1]` represents the first Monday\n * within the month, whereas `[\"MO\", -1]` represents the last Monday\n * of the month.\n *\n * Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry\n * corresponds to an offset within the month when the byMonthOfYear rule part is\n * present, and corresponds to an offset within the year otherwise.\n *\n * Regardless of rule `frequency`, if a byDayOfWeek entry is a string\n * (rather than a tuple), it means \"all of these days\" within the specified\n * frequency (e.g. within a MONTHLY rule, `\"MO\"` represents all Mondays within\n * the month).\n *\n * - #### byDayOfMonth?\n *\n * The byDayOfMonth rule part expects an array of days\n * of the month. Valid values are 1 to 31 or -31 to -1.\n *\n * For example, -10 represents the tenth to the last day of the month.\n * The byDayOfMonth rule part *must not* be specified when the rule's\n * `frequency` is set to WEEKLY.\n *\n * - #### byMonthOfYear?\n *\n * The byMonthOfYear rule part expects an array of months\n * of the year. Valid values are 1 to 12.\n *\n */\n constructor(options = {}) {\n super(options);\n this.rrules = [];\n this.exrules = [];\n for (const prop of ['rrules', 'exrules']) {\n const arg = options[prop];\n if (arg) {\n this[prop] = arg.map(ruleArgs => {\n if (ruleArgs instanceof Rule) {\n return ruleArgs.set('timezone', this.timezone);\n } else {\n return new Rule(ruleArgs, {\n timezone: this.timezone,\n });\n }\n });\n }\n }\n for (const prop of ['rdates', 'exdates']) {\n const arg = options[prop];\n if (arg) {\n this[prop] =\n arg instanceof Dates\n ? arg.set('timezone', this.timezone)\n : new Dates({\n dates: arg,\n timezone: this.timezone,\n });\n } else {\n this[prop] = new Dates({\n timezone: this.timezone,\n });\n }\n }\n this.hasDuration =\n this.rrules.every(rule => rule.hasDuration) &&\n this.exrules.every(rule => rule.hasDuration) &&\n this.rdates.hasDuration &&\n this.exdates.hasDuration;\n this.isInfinite = this.rrules.some(rule => rule.isInfinite);\n this.occurrenceStream = [\n add(...this.rrules),\n subtract(...this.exrules),\n add(this.rdates),\n subtract(this.exdates),\n unique(),\n ].reduce((prev, curr) => curr({ base: prev, timezone: this.timezone }), undefined);\n }\n add(prop, value) {\n const rrules = this.rrules.slice();\n const exrules = this.exrules.slice();\n let rdates = this.rdates;\n let exdates = this.exdates;\n switch (prop) {\n case 'rrule':\n rrules.push(value);\n break;\n case 'exrule':\n exrules.push(value);\n break;\n case 'rdate':\n rdates = this.rdates.add(value);\n break;\n case 'exdate':\n exdates = this.exdates.add(value);\n break;\n }\n return new Schedule({\n timezone: this.timezone,\n data: this.data,\n rrules,\n exrules,\n rdates,\n exdates,\n });\n }\n remove(prop, value) {\n let rrules = this.rrules;\n let exrules = this.exrules;\n let rdates = this.rdates;\n let exdates = this.exdates;\n switch (prop) {\n case 'rrule':\n rrules = rrules.filter(rule => rule !== value);\n break;\n case 'exrule':\n exrules = exrules.filter(rule => rule !== value);\n break;\n case 'rdate':\n rdates = this.rdates.remove(value);\n break;\n case 'exdate':\n exdates = this.exdates.remove(value);\n break;\n }\n return new Schedule({\n timezone: this.timezone,\n data: this.data,\n rrules,\n exrules,\n rdates,\n exdates,\n });\n }\n set(prop, value, options = {}) {\n let timezone = this.timezone;\n let rrules = this.rrules;\n let exrules = this.exrules;\n let rdates = this.rdates;\n let exdates = this.exdates;\n switch (prop) {\n case 'timezone':\n if (value === this.timezone && !options.keepLocalTime) return this;\n else if (options.keepLocalTime) {\n rrules = rrules.map(rule => rule.set('timezone', value, options));\n exrules = exrules.map(rule => rule.set('timezone', value, options));\n rdates = rdates.set('timezone', value, options);\n exdates = exdates.set('timezone', value, options);\n }\n timezone = value;\n break;\n case 'rrules':\n rrules = value;\n break;\n case 'exrules':\n exrules = value;\n break;\n case 'rdates':\n rdates = value;\n break;\n case 'exdates':\n exdates = value;\n break;\n }\n return new Schedule({\n timezone,\n data: this.data,\n rrules,\n exrules,\n rdates,\n exdates,\n });\n }\n}\n\n/**\n * An operator function, which takes a spread of occurrence generators and only\n * returns the dates which intersect every occurrence generator.\n *\n * Because it's possible for all the generators to never intersect,\n * and because the intersection operator can't detect this lack of intersection,\n * you must call `intersection()` with a `{maxFailedIterations: number}` argument.\n * For convenience, you can globally set `RScheduleConfig.defaultMaxFailedIterations`.\n * Without further information, I'd probably set `defaultMaxFailedIterations = 50`.\n *\n * The `maxFailedIterations` argument caps the number of iterations the operator will\n * run through without finding a single valid occurrence. If this number is reached, the operator will\n * stop iterating (preventing a possible infinite loop).\n *\n * - Note: `maxFailedIterations` caps the number of iterations which\n * *fail to turn up a single valid occurrence*. Every time a valid occurrence is returned,\n * the current iteration count is reset to 0.\n *\n */\nfunction intersection(args) {\n return options => new IntersectionOperator(args, options);\n}\nclass IntersectionOperator extends Operator {\n constructor(args, config) {\n super(args.streams, config);\n if (this.isInfinite) {\n this.maxFailedIterations =\n args.maxFailedIterations || IntersectionOperator.defaultMaxFailedIterations;\n if (!this.maxFailedIterations) {\n throw new ArgumentError(\n 'The IntersectionOperator must be provided ' +\n 'a `maxFailedIterations` argument when it is built from schedules of infinite length. ' +\n 'This argument is used to ensure that the IntersectionOperator does not enter ' +\n 'an infinite loop because the underlying schedules never intersect. ' +\n 'If the `maxFailedIterations` count is reached it will be assumed that ' +\n 'all valid occurrences have been found and iteration will end without error.' +\n 'Without additional information, \"50\" is probably a good ' +\n '`maxFailedIterations` value. ' +\n 'If the schedules are not of infinite length, `maxFailedIterations` is ignored. ' +\n 'Note also that you can provide a `defaultMaxFailedIterations` number via ' +\n 'IntersectionOperator.defaultMaxFailedIterations.',\n );\n }\n }\n }\n set(_, value) {\n return new IntersectionOperator(\n {\n maxFailedIterations: this.maxFailedIterations,\n streams: this.streams.map(stream => stream.set('timezone', value)),\n },\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n *_run(args = {}) {\n const streams = this.streams.map(stream => new IterableWrapper(stream, args));\n if (this.config.base) {\n streams.push(new IterableWrapper(this.config.base, args));\n }\n if (streams.length === 0) return;\n const hasEndDate = !!(!this.isInfinite || args.reverse || args.end);\n if (\n !cycleStreams$1(\n streams,\n undefined,\n Object.assign(Object.assign({}, args), {\n hasEndDate,\n iteration: 0,\n maxIterations: this.maxFailedIterations,\n }),\n )\n ) {\n return;\n }\n let stream = selectNextIterable(streams, args);\n while (stream) {\n const yieldArgs = yield this.normalizeRunOutput(stream.value);\n const lastValidDate = stream.value;\n if (!(yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate)) {\n // iterate the current stream\n stream.next();\n }\n if (\n !cycleStreams$1(\n streams,\n lastValidDate,\n Object.assign(Object.assign({}, args), {\n hasEndDate,\n iteration: 0,\n maxIterations: this.maxFailedIterations,\n }),\n yieldArgs,\n )\n ) {\n return;\n }\n // The call to `cycleStreams()`, above, has already called\n // selectNextIterable with the `yieldArgs`\n stream = selectNextIterable(streams, args);\n }\n }\n calculateIsInfinite() {\n // Note: Array#every() === true when length === 0\n if (!this.config.base) {\n if (this.streams.length === 0) return false;\n return this.streams.every(stream => stream.isInfinite);\n } else if (this.streams.length === 0) return this.config.base.isInfinite;\n return this.config.base.isInfinite && this.streams.every(stream => stream.isInfinite);\n }\n calculateHasDuration() {\n const streamsDuration = this.streams.every(stream => stream.hasDuration);\n if (!this.config.base) return streamsDuration;\n return this.config.base.hasDuration && streamsDuration;\n }\n}\nfunction cycleStreams$1(streams, lastValidDate, options, yieldArgs) {\n const next = selectNextIterable(streams, options, yieldArgs);\n if (!next) return false;\n if (lastValidDate && next.value.isEqual(lastValidDate)) return true;\n if (streams.some(stream => stream.done)) return false;\n if (streams.every(stream => stream.value.isEqual(next.value))) return true;\n options.iteration++;\n if (options.maxIterations && !options.hasEndDate && options.iteration > options.maxIterations) {\n return false;\n }\n // Since not all of the streams are equal, we grab the last stream...\n const last = selectLastIterable(streams, options);\n // ...and skip all the other streams so they are equal or past the last one\n streams.forEach(stream => {\n // Because streams can have multiple, identical dates in a row,\n // we don't want to `skipToDate` if the provided date is equal to the current date.\n if (last.value.isEqual(stream.value)) return;\n stream.next({ skipToDate: last.value });\n });\n // then we repeat\n return cycleStreams$1(streams, lastValidDate, options);\n}\n\nclass DurationIterableWrapper extends IterableWrapper {\n constructor(generator, runArgs) {\n super(generator, runArgs);\n this.workingValue = this.value;\n this.next();\n }\n}\nclass MergeDurationOperatorError extends Error {}\n/**\n * An operator function which takes an occurrence stream with\n * `hasDuration === true` and merges occurrences which have overlapping\n * start and end times.\n *\n * Because it's possible for all the occurrences in the stream to have\n * overlapping start and end times, you must provide a `maxDuration`\n * argument that represents the maximum possible duration for a single\n * occurrence. If this duration is exceeded, a `MergeDurationOperatorError`\n * will be thrown.\n *\n * - For your convenience, you can globally set a default\n * `MergeDurationOperator#maxDuration` via\n * `RScheduleConfig.MergeDurationOperator.defaultMaxDuration`.\n *\n * Usage example:\n *\n * ```typescript\n * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;\n *\n * const dates = new Dates({\n * dates: [\n * new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 2 }),\n * new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * ],\n * dateAdpter: StandardDateAdapter,\n * }).pipe(\n * mergeDuration({\n * maxDuration: MILLISECONDS_IN_HOUR * 24\n * })\n * )\n *\n * dates.occurrences().toArray() === [\n * new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 3 }),\n * new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * ]\n * ```\n */\nfunction mergeDuration(args) {\n return options => new MergeDurationOperator(args, options);\n}\nclass MergeDurationOperator extends Operator {\n constructor(args, config) {\n super([], config);\n this.maxDuration = args.maxDuration;\n if (config.base && !config.base.hasDuration) {\n throw new ArgumentError(\n 'Base stream provided to MergeDurationOperator does not have an associated duration. ' +\n 'The MergeDurationOperator can only be used with streams which have a duration. ',\n );\n }\n }\n /** Not actually used but necessary for IRunnable interface */\n set(_, value) {\n return new MergeDurationOperator(\n {\n maxDuration: this.maxDuration,\n },\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n _run(args = {}) {\n return args.reverse ? this.reverseRun(args) : this.forwardRun(args);\n }\n calculateIsInfinite() {\n return !!(this.config.base && this.config.base.isInfinite);\n }\n calculateHasDuration() {\n return true;\n }\n *forwardRun(args = {}) {\n if (!this.config.base) return;\n // We want to find occurrences that end after the provided\n // `start` time even if they begin before the provided `start`\n // time. Because of this, we must begin iterating `maxDuration`\n // before the provided start time.\n let checkFromStart = args.start;\n if (args.start) {\n checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n }\n let checkFromEnd = args.end;\n if (args.end) {\n checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n }\n const stream = new DurationIterableWrapper(\n this.config.base,\n Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n );\n let yieldArgs;\n // checking `stream.workingValue` because when `stream.done === true`\n // `stream.workingValue` will not have been yielded yet\n while (stream.workingValue) {\n // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`\n while (!stream.done && stream.workingValue.end.isAfterOrEqual(stream.value)) {\n if (stream.workingValue.duration > this.maxDuration) {\n throw new MergeDurationOperatorError(\n `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n this.maxDuration,\n );\n }\n if (stream.value.end.isAfter(stream.workingValue.end)) {\n const diff = stream.value.end.valueOf() - stream.workingValue.end.valueOf();\n stream.workingValue = stream.workingValue.set(\n 'duration',\n stream.workingValue.duration + diff,\n );\n }\n stream.next();\n }\n // check to make sure the occurrence we are about to yield ends after the\n // provided start time.\n if (args.start && stream.workingValue.end.isBefore(args.start)) {\n stream.workingValue = stream.value;\n stream.next();\n continue;\n }\n // make sure the occurrence we are about to yield ends after the\n // provided skipToDate\n if (\n (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) &&\n stream.workingValue.end.isBefore(yieldArgs.skipToDate)\n ) {\n stream.workingValue = stream.value;\n stream.next();\n continue;\n }\n // make sure we are not after the user requested `end` time.\n if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {\n break;\n }\n if (stream.workingValue.duration > this.maxDuration) {\n throw new MergeDurationOperatorError(\n `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n this.maxDuration,\n );\n }\n yieldArgs = yield this.normalizeRunOutput(stream.workingValue);\n if (\n (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) &&\n stream.workingValue.isAfterOrEqual(yieldArgs.skipToDate)\n ) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n stream.workingValue = stream.value;\n stream.next();\n }\n }\n *reverseRun(args = {}) {\n if (!this.config.base) return;\n // We want to find occurrences that end after the provided\n // `start` time even if they begin before the provided `start`\n // time. Because of this, we must begin iterating `maxDuration`\n // before the provided start time.\n let checkFromStart = args.start;\n if (args.start) {\n checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n }\n let checkFromEnd = args.end;\n if (args.end) {\n checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n }\n const stream = new DurationIterableWrapper(\n this.config.base,\n Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n );\n let yieldArgs;\n // checking `stream.workingValue` because when `stream.done === true`\n // `stream.workingValue` will not have been yielded yet\n while (stream.workingValue) {\n // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`\n while (!stream.done && stream.workingValue.isBeforeOrEqual(stream.value.end)) {\n if (stream.workingValue.duration > this.maxDuration) {\n throw new MergeDurationOperatorError(\n `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n this.maxDuration,\n );\n }\n if (\n stream.value.isBefore(stream.workingValue) ||\n stream.value.end.isAfter(stream.workingValue.end)\n ) {\n if (stream.value.end.isAfter(stream.workingValue.end)) {\n // `stream.workingValue` is a subset of `stream.value`\n // so simply replace `stream.workingValue` with `stream.value`\n stream.workingValue = stream.value;\n } else {\n const diff = stream.workingValue.valueOf() - stream.value.valueOf();\n stream.workingValue = stream.value.set('duration', stream.workingValue.duration + diff);\n }\n }\n stream.next();\n }\n // check to make sure the occurrence we are about to yield starts before the\n // provided start time.\n if (args.start && stream.workingValue.end.isBefore(args.start)) {\n break;\n }\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n stream.workingValue.end.isBefore(yieldArgs.skipToDate)\n ) {\n stream.workingValue = stream.value;\n stream.next();\n continue;\n }\n // make sure we are not after the user requested `end` time.\n if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {\n stream.workingValue = stream.value;\n stream.next();\n continue;\n }\n if (stream.workingValue.duration > this.maxDuration) {\n throw new MergeDurationOperatorError(\n `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n this.maxDuration,\n );\n }\n yieldArgs = yield this.normalizeRunOutput(stream.workingValue);\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n stream.workingValue.end.isBeforeOrEqual(yieldArgs.skipToDate)\n ) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n stream.workingValue = stream.value;\n stream.next();\n }\n }\n}\n\nclass SplitDurationOperatorError extends Error {}\n/**\n * An operator function which takes an occurrence stream with\n * `hasDuration === true` and passes occurrences through a splitting\n * function. One usecase for this operator is to dynamically break up\n * occurrences with a large duration into several smaller occurrences.\n *\n * You must provide a `maxDuration` argument that represents the\n * maximum possible duration for a single occurrence. If this\n * duration is exceeded, a `SplitDurationOperatorError` will be\n * thrown.\n *\n * - For your convenience, you can globally set a default\n * `SplitDurationOperator#maxDuration` via\n * `RScheduleConfig.SplitDurationOperator.defaultMaxDuration`.\n *\n * Usage example:\n *\n * ```typescript\n * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;\n *\n * const splitFn = (date: DateTime) => {\n * if (date.duration > MILLISECONDS_IN_HOUR) {\n * const diff = date.duration! / 2;\n *\n * return [\n * date.set('duration', diff),\n * date.add(diff, 'millisecond').set('duration', diff),\n * ];\n * }\n *\n * return [date];\n * };\n *\n * const dates = new Dates({\n * dates: [\n * new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),\n * ],\n * dateAdpter: StandardDateAdapter,\n * }).pipe(\n * splitDuration({\n * splitFn,\n * maxDuration: MILLISECONDS_IN_HOUR * 1\n * })\n * )\n *\n * expect(dates.occurrences().toArray()).toEqual([\n * new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * ])\n * ```\n */\nfunction splitDuration(args) {\n return options => new SplitDurationOperator(args, options);\n}\nclass SplitDurationOperator extends Operator {\n constructor(args, config) {\n super([], config);\n this.splitFn = args.splitFn;\n this.maxDuration = args.maxDuration;\n if (config.base && !config.base.hasDuration) {\n throw new ArgumentError(\n 'Base stream provided to SplitDurationOperator does not have an associated duration. ' +\n 'The SplitDurationOperator can only be used with streams which have a duration.',\n );\n }\n }\n /** Not actually used but necessary for IRunnable interface */\n set(_, value) {\n return new SplitDurationOperator(\n {\n maxDuration: this.maxDuration,\n splitFn: this.splitFn,\n },\n Object.assign(Object.assign({}, this.config), {\n base: this.config.base && this.config.base.set('timezone', value),\n timezone: value,\n }),\n );\n }\n *_run(args = {}) {\n if (!this.config.base) return;\n const reverse = args.reverse || false;\n // We want to find occurrences that end after the provided\n // `start` time even if they begin before the provided `start`\n // time. Because of this, we add `maxDuration` to\n // the provided start time.\n let checkFromStart = args.start;\n if (args.start) {\n checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n }\n // same goes for `end` time as with `start` time.\n let checkFromEnd = args.end;\n if (args.end) {\n checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n }\n const stream = new IterableWrapper(\n this.config.base,\n Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n );\n let yieldArgs;\n const datesBucket = [];\n while (!stream.done || (datesBucket[0] && datesBucket[0][0])) {\n /**\n * Example:\n * 10am - 2pm -> 10am - 12pm, 12pm - 2pm\n * 11am - 3pm -> 11am - 1pm, 1pm - 3pm\n * 2pm - 4pm -> 2pm - 3pm, 3pm - 4pm\n */\n if (!(datesBucket[0] && datesBucket[0][0])) {\n // we're out of dates\n datesBucket.push(this.splitDate(stream.value, reverse));\n stream.next();\n }\n while (\n !stream.done &&\n (reverse\n ? datesBucket[0].some(date => date.isBeforeOrEqual(stream.value.end))\n : datesBucket[0].some(date => date.isAfterOrEqual(stream.value)))\n ) {\n datesBucket.push(this.splitDate(stream.value, reverse));\n stream.next();\n }\n let selectedDate = datesBucket[0] && datesBucket[0][0];\n let bucketIndex = -1;\n let selectedBucketIndex = 0;\n let dateIndex = -1;\n let selectedDateIndex = 0;\n // find the next date as well as its location in the datesBucket\n for (const bucket of datesBucket) {\n bucketIndex++;\n dateIndex = -1;\n for (const date of bucket) {\n dateIndex++;\n let dateShouldComeNext;\n if (reverse) {\n dateShouldComeNext =\n date.isAfter(selectedDate) ||\n (date.isEqual(selectedDate) && date.duration > selectedDate.duration);\n } else {\n dateShouldComeNext =\n date.isBefore(selectedDate) ||\n (date.isEqual(selectedDate) && date.duration < selectedDate.duration);\n }\n if (dateShouldComeNext) {\n selectedDate = date;\n selectedBucketIndex = bucketIndex;\n selectedDateIndex = dateIndex;\n break;\n }\n }\n }\n datesBucket[selectedBucketIndex].splice(selectedDateIndex, 1);\n if (datesBucket[selectedBucketIndex].length === 0) {\n datesBucket.splice(selectedBucketIndex, 1);\n }\n // If we've been yieldedArgs from the last cycle, check to see\n // that the selectedDate honors the `skipToDate` requirement\n // if not, discard this selectedDate\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n selectedDate &&\n !datePastEnd(selectedDate, args) &&\n !datePastSkipToDate(selectedDate, yieldArgs.skipToDate, args)\n ) {\n continue;\n }\n // because we subtracted `maxDuration` to the base iterator's start time,\n // check to make sure the selectedDate we are about to yield should\n // actually be yielded (it may be before the provided `start` time).\n // If not, discard the selectedDate.\n if (args.start && selectedDate.end.isBefore(args.start)) {\n if (reverse) break;\n continue;\n }\n // because we added `maxDuration` to the base iterator's end time,\n // check to make sure the selectedDate we are about to yield should\n // actually be yielded (it may be after the provided `end` time).\n // If not, end iteration.\n if (args.end && selectedDate.isAfter(args.end)) {\n if (reverse) continue;\n break;\n }\n if (selectedDate.duration > this.maxDuration) {\n throw new SplitDurationOperatorError(\n `SplitDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n this.maxDuration,\n );\n }\n yieldArgs = yield this.normalizeRunOutput(selectedDate);\n if (\n yieldArgs &&\n yieldArgs.skipToDate &&\n (args.reverse\n ? selectedDate.isBeforeOrEqual(yieldArgs.skipToDate)\n : selectedDate.isAfterOrEqual(yieldArgs.skipToDate))\n ) {\n throw new Error(\n 'A provided `skipToDate` option must be greater than the last yielded date ' +\n '(or smaller, in the case of reverse iteration)',\n );\n }\n }\n }\n calculateIsInfinite() {\n return !!(this.config.base && this.config.base.isInfinite);\n }\n calculateHasDuration() {\n return true;\n }\n splitDate(date, reverse) {\n const dates = this.splitFn(date);\n let valid;\n if (dates.length === 0) {\n valid = false;\n } else if (dates.length === 1) {\n valid = date.duration === dates[0].duration;\n } else {\n valid = date.duration === dates.reduce((prev, curr) => prev + curr.duration, 0);\n }\n if (!valid) {\n throw new Error(\n 'The provided SplitDurationOperator split function ' +\n 'must return an array of DateTimes with length > 0 ' +\n 'where the total duration of the new dates equals the duration of ' +\n 'the original date.',\n );\n }\n dates.sort(dateTimeSortComparer);\n if (reverse) {\n dates.reverse();\n }\n return dates;\n }\n}\nfunction datePastEnd(date, options) {\n return !!(options.reverse\n ? options.start && date.isBefore(options.start)\n : options.end && date.isAfter(options.end));\n}\nfunction datePastSkipToDate(date, skipToDate, options) {\n return !!(options.reverse ? skipToDate.isAfterOrEqual(date) : skipToDate.isBeforeOrEqual(date));\n}\n\nexport {\n AddOperator,\n Calendar,\n Collection,\n CollectionIterator,\n Dates,\n IntersectionOperator,\n MergeDurationOperator,\n MergeDurationOperatorError,\n OccurrenceGenerator,\n OccurrenceIterator,\n Operator,\n Rule,\n RuleBase,\n Schedule,\n ScheduleBase,\n SplitDurationOperator,\n SplitDurationOperatorError,\n SubtractOperator,\n UniqueOperator,\n add,\n intersection,\n mergeDuration,\n splitDuration,\n subtract,\n unique,\n};\n","import {\n freqToGranularity,\n ValidDateTime,\n InvalidDateTime,\n DateAdapter,\n RuleOptionError,\n numberSortComparer,\n getDifferenceBetweenWeekdays,\n RecurrenceRuleError,\n uniqDateTimes,\n dateTimeSortComparer,\n} from '@rschedule/core';\n\nclass RecurrenceRule {\n constructor(processor) {\n this.processor = processor;\n this.start = processor.start;\n this.end = processor.end;\n this.options = processor.options;\n }\n}\n\nclass FrequencyRule extends RecurrenceRule {\n constructor(processor, initDate) {\n super(processor);\n this.initDate = initDate;\n this.intervalUnit = freqToGranularity(this.options.frequency);\n this.firstIntervalStartDate = this.normalizedStartDate(this.options.start);\n this.intervalStartDate = this.firstIntervalStartDate;\n this.intervalEndDate = this.normalizedEndDate(this.firstIntervalStartDate);\n this.skipToInterval(this.initDate);\n }\n run(date) {\n return this.validateDate(new ValidDateTime(date));\n }\n validateDate(arg) {\n const { date } = arg;\n if (arg instanceof ValidDateTime && this.dateIsWithinInterval(date)) {\n return arg;\n }\n this.skipToInterval(date);\n return new InvalidDateTime(\n // if the interval is 1, date will always be within the interval\n this.dateIsWithinInterval(date) ? date : this.setToCurrentInterval(),\n );\n }\n setToCurrentInterval() {\n return this.intervalStartDate;\n }\n normalizedStartDate(date) {\n if (this.options.frequency === 'WEEKLY') {\n return date.granularity('week', { weekStart: this.options.weekStart });\n }\n return date.granularity(this.intervalUnit);\n }\n normalizedEndDate(start) {\n switch (this.options.frequency) {\n case 'YEARLY':\n return start.add(1, 'year');\n case 'MONTHLY':\n return start.add(1, 'month');\n case 'WEEKLY':\n return start.add(1, 'week');\n case 'DAILY':\n return start.add(1, 'day');\n case 'HOURLY':\n return start.add(1, 'hour');\n case 'MINUTELY':\n return start.add(1, 'minute');\n case 'SECONDLY':\n return start.add(1, 'second');\n case 'MILLISECONDLY':\n return start.add(1, 'millisecond');\n default:\n throw new Error(`Unknown frequency ${this.options.frequency}`);\n }\n }\n skipToInterval(date) {\n const amount = this.intervalDifference(date);\n this.intervalStartDate = this.firstIntervalStartDate.add(amount, this.intervalUnit);\n this.intervalEndDate = this.normalizedEndDate(this.intervalStartDate);\n }\n dateIsWithinInterval(date) {\n return this.intervalStartDate.isBeforeOrEqual(date) && this.intervalEndDate.isAfter(date);\n }\n intervalDifference(date) {\n return intervalDifferenceBetweenDates({\n first: this.firstIntervalStartDate,\n second: date,\n unit: this.intervalUnit,\n interval: this.options.interval,\n weekStart: this.options.weekStart,\n direction: 'after',\n });\n }\n}\n/**\n * Given the frequency (unit) and interval, this function finds\n * how many jumps forward the first date needs in order to equal\n * or exceed the second date.\n *\n * For example:\n *\n * 1. Unit is daily and interval is 1. The second date is 3 days\n * after the first. This will return 3.\n * 2. Unit is yearly and interval is 1. The second date is 3 days\n * after the first. This will return 0.\n * 3. Unit is yearly and interval is 3. The second date is 4 years\n * after the first. This will return 6.\n */\nfunction intervalDifferenceBetweenDates({ first, second, unit, interval, weekStart, direction }) {\n let difference = (() => {\n let intervalDuration;\n let months;\n switch (unit) {\n case 'year':\n months = (second.get('year') - first.get('year')) * 12;\n months = months + second.get('month') - first.get('month');\n return Math.floor(months / 12);\n case 'month':\n months = (second.get('year') - first.get('year')) * 12;\n months = months + second.get('month') - first.get('month');\n return months;\n case 'week':\n first = first.granularity('week', { weekStart });\n intervalDuration = DateAdapter.MILLISECONDS_IN_WEEK;\n break;\n case 'day':\n intervalDuration = DateAdapter.MILLISECONDS_IN_DAY;\n break;\n case 'hour':\n intervalDuration = DateAdapter.MILLISECONDS_IN_HOUR;\n break;\n case 'minute':\n intervalDuration = DateAdapter.MILLISECONDS_IN_MINUTE;\n break;\n case 'second':\n intervalDuration = DateAdapter.MILLISECONDS_IN_SECOND;\n break;\n case 'millisecond':\n intervalDuration = 1;\n break;\n default:\n throw new Error('Unexpected `unit` value');\n }\n const diff = second.valueOf() - first.valueOf();\n return Math.floor(diff / intervalDuration);\n })();\n const fn = direction === 'after' ? Math.ceil : Math.floor;\n difference = fn(difference / interval) * interval;\n return difference;\n}\n\nclass RevFrequencyRule extends FrequencyRule {\n setToCurrentInterval() {\n return this.intervalEndDate.subtract(1, 'millisecond');\n }\n intervalDifference(date) {\n return intervalDifferenceBetweenDates({\n first: this.firstIntervalStartDate,\n second: date,\n unit: this.intervalUnit,\n interval: this.options.interval,\n weekStart: this.options.weekStart,\n direction: 'before',\n });\n }\n}\n\nconst FREQUENCIES = [\n 'MILLISECONDLY',\n 'SECONDLY',\n 'MINUTELY',\n 'HOURLY',\n 'DAILY',\n 'WEEKLY',\n 'MONTHLY',\n 'YEARLY',\n];\nconst FrequencyRuleModule = {\n name: 'FrequencyRule',\n get: processor => {\n if (\n processor.options.byMillisecondOfSecond !== undefined ||\n processor.options.frequency !== 'MILLISECONDLY'\n ) {\n return null;\n }\n if (processor.reverse) return new RevFrequencyRule(processor, processor.end);\n return new FrequencyRule(processor, processor.start);\n },\n normalizeOptions: (options, norm) => {\n if (!FREQUENCIES.includes(options.frequency)) {\n throw new RuleOptionError(`\"frequency\" must be one of ${JSON.stringify(FREQUENCIES)}`);\n }\n if (options.interval !== undefined) {\n if (!Number.isInteger(options.interval)) {\n throw new RuleOptionError('\"interval\" expects a whole number');\n }\n if (options.interval < 1) {\n throw new RuleOptionError('\"interval\" cannot be less than 1');\n }\n }\n if (options.weekStart !== undefined) {\n if (!DateAdapter.WEEKDAYS.includes(options.weekStart)) {\n throw new RuleOptionError(\n `\"weekStart\" must be one of ${JSON.stringify(DateAdapter.WEEKDAYS)}`,\n );\n }\n }\n norm.frequency = options.frequency;\n norm.interval = options.interval || 1;\n norm.weekStart = options.weekStart || 'MO';\n },\n deps: () => [FrequencyRuleModule],\n};\n\nfunction ruleOptionFilled(option) {\n return Array.isArray(option) && option.length > 0;\n}\n\nconst freqCache = new WeakMap();\nclass RecurrenceRuleBase extends RecurrenceRule {\n constructor(processor) {\n super(processor);\n if (!freqCache.has(this.processor)) {\n freqCache.set(this.processor, new FrequencyRule(processor, processor.start));\n }\n this.frequency = freqCache.get(this.processor);\n }\n validateDate(arg) {\n return this.frequency.validateDate(arg);\n }\n}\nclass RevRecurrenceRuleBase extends RecurrenceRule {\n constructor(processor) {\n super(processor);\n if (!freqCache.has(this.processor)) {\n freqCache.set(this.processor, new RevFrequencyRule(processor, processor.end));\n }\n this.frequency = freqCache.get(this.processor);\n }\n validateDate(arg) {\n return this.frequency.validateDate(arg);\n }\n}\n\n/**\n * Contains shared logic for ByHourOfDay, ByMinuteOfHour,\n * BySecondOfMinute, and ByMillisecondOfSecond reverse rule pipes\n */\nclass RevByTimeOfUnitRule extends RevRecurrenceRuleBase {\n run(date) {\n // e.g. const currentTime = date.get('hour');\n const currentTime = date.get(this.granularity);\n // e.g. for (const time of this.options.byHourOfDay) {\n for (const time of this.option) {\n if (currentTime < time) continue;\n if (currentTime === time) {\n return this.validateDate(new ValidDateTime(date));\n }\n // e.g. return this.nextValidDate(args, date.endGranularity('day').set('hour', time));\n return this.validateDate(\n new InvalidDateTime(date.endGranularity(this.baseGranularity).set(this.granularity, time)),\n );\n }\n return this.validateDate(\n new InvalidDateTime(\n date\n // e.g. .endGranularity('day')\n .endGranularity(this.baseGranularity)\n // e.g. .subtract(1, 'day')\n .subtract(1, this.baseGranularity)\n // e.g. .set('hour', this.options.byHourOfDay[0]);\n .set(this.granularity, this.option[0]),\n ),\n );\n }\n}\n\nclass RevByMillisecondOfSecondRule extends RevByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'second';\n this.granularity = 'millisecond';\n this.option = this.options.byMillisecondOfSecond.slice().reverse();\n }\n}\n\n/**\n * Contains shared logic for ByHourOfDay, ByMinuteOfHour,\n * BySecondOfMinute, and ByMillisecondOfSecond rule pipes\n */\nclass ByTimeOfUnitRule extends RecurrenceRuleBase {\n run(date) {\n // e.g. const currentTime = date.get('hour');\n const currentTime = date.get(this.granularity);\n // e.g. for (const time of this.options.byHourOfDay) {\n for (const time of this.option) {\n if (currentTime > time) continue;\n if (currentTime === time) {\n return this.validateDate(new ValidDateTime(date));\n }\n // e.g. return this.nextValidDate(args, date.granularity('day').set('hour', time));\n return this.validateDate(\n new InvalidDateTime(date.granularity(this.baseGranularity).set(this.granularity, time)),\n );\n }\n return this.validateDate(\n new InvalidDateTime(\n date\n // e.g. .granularity('day')\n .granularity(this.baseGranularity)\n // e.g. .add(1, 'day')\n .add(1, this.baseGranularity)\n // e.g. .set('hour', this.options.byHourOfDay[0]);\n .set(this.granularity, this.option[0]),\n ),\n );\n }\n}\n\nclass ByMillisecondOfSecondRule extends ByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'second';\n this.granularity = 'millisecond';\n this.option = this.options.byMillisecondOfSecond;\n }\n}\n\nconst ByMillisecondOfSecondRuleModule = {\n name: 'ByMillisecondOfSecond',\n get: processor => {\n if (processor.options.byMillisecondOfSecond === undefined) return null;\n if (processor.reverse) return new RevByMillisecondOfSecondRule(processor);\n return new ByMillisecondOfSecondRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byMillisecondOfSecond !== undefined) {\n if (!ruleOptionFilled(options.byMillisecondOfSecond)) {\n throw new RuleOptionError('\"byMillisecondOfSecond\" expects a non-empty array');\n }\n if (options.byMillisecondOfSecond.some(num => num < 0 || num > 999)) {\n throw new RuleOptionError('\"byMillisecondOfSecond\" values must be >= 0 && <= 999');\n }\n norm.byMillisecondOfSecond = options.byMillisecondOfSecond;\n norm.byMillisecondOfSecond.sort(numberSortComparer);\n } else if (options.frequency !== 'MILLISECONDLY') {\n norm.byMillisecondOfSecond = [norm.start.get('millisecond')];\n }\n },\n deps: () => [FrequencyRuleModule, ByMillisecondOfSecondRuleModule],\n};\n\nclass RevBySecondOfMinuteRule extends RevByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'minute';\n this.granularity = 'second';\n this.option = this.options.bySecondOfMinute.slice().reverse();\n }\n}\n\nclass BySecondOfMinuteRule extends ByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'minute';\n this.granularity = 'second';\n this.option = this.options.bySecondOfMinute;\n }\n}\n\nconst BySecondOfMinuteRuleModule = {\n name: 'BySecondOfMinute',\n get: processor => {\n if (processor.options.bySecondOfMinute === undefined) return null;\n if (processor.reverse) return new RevBySecondOfMinuteRule(processor);\n return new BySecondOfMinuteRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.bySecondOfMinute !== undefined) {\n if (!ruleOptionFilled(options.bySecondOfMinute)) {\n throw new RuleOptionError('\"bySecondOfMinute\" expects a non-empty array');\n }\n if (options.bySecondOfMinute.some(num => num < 0 || num > 60)) {\n throw new RuleOptionError('\"bySecondOfMinute\" values must be >= 0 && <= 60');\n }\n norm.bySecondOfMinute = options.bySecondOfMinute;\n norm.bySecondOfMinute.sort(numberSortComparer);\n } else if (!['SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {\n norm.bySecondOfMinute = [norm.start.get('second')];\n }\n },\n deps: () => [FrequencyRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule],\n};\n\nclass RevByMinuteOfHourRule extends RevByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'hour';\n this.granularity = 'minute';\n this.option = this.options.byMinuteOfHour.slice().reverse();\n }\n}\n\nclass ByMinuteOfHourRule extends ByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'hour';\n this.granularity = 'minute';\n this.option = this.options.byMinuteOfHour;\n }\n}\n\nconst ByMinuteOfHourRuleModule = {\n name: 'ByMinuteOfHour',\n get: processor => {\n if (processor.options.byMinuteOfHour === undefined) return null;\n if (processor.reverse) return new RevByMinuteOfHourRule(processor);\n return new ByMinuteOfHourRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byMinuteOfHour !== undefined) {\n if (!ruleOptionFilled(options.byMinuteOfHour)) {\n throw new RuleOptionError('\"byMinuteOfHour\" expects a non-empty array');\n }\n if (options.byMinuteOfHour.some(num => num < 0 || num > 59)) {\n throw new RuleOptionError('\"byMinuteOfHour\" values must be >= 0 && <= 59');\n }\n norm.byMinuteOfHour = options.byMinuteOfHour;\n norm.byMinuteOfHour.sort(numberSortComparer);\n } else if (!['MINUTELY', 'SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {\n norm.byMinuteOfHour = [norm.start.get('minute')];\n }\n },\n deps: () => [\n FrequencyRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n ],\n};\n\nclass RevByHourOfDayRule extends RevByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'day';\n this.granularity = 'hour';\n this.option = this.options.byHourOfDay.slice().reverse();\n }\n}\n\nclass ByHourOfDayRule extends ByTimeOfUnitRule {\n constructor() {\n super(...arguments);\n this.baseGranularity = 'day';\n this.granularity = 'hour';\n this.option = this.options.byHourOfDay;\n }\n}\n\nconst ByHourOfDayRuleModule = {\n name: 'ByHourOfDay',\n get: processor => {\n if (processor.options.byHourOfDay === undefined) return null;\n if (processor.reverse) return new RevByHourOfDayRule(processor);\n return new ByHourOfDayRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byHourOfDay !== undefined) {\n if (!ruleOptionFilled(options.byHourOfDay)) {\n throw new RuleOptionError('\"byHourOfDay\" expects a non-empty array');\n }\n if (options.byHourOfDay.some(num => num < 0 || num > 23)) {\n throw new RuleOptionError('\"byHourOfDay\" values must be >= 0 && <= 23');\n }\n norm.byHourOfDay = options.byHourOfDay;\n norm.byHourOfDay.sort(numberSortComparer);\n } else if (['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY'].includes(options.frequency)) {\n norm.byHourOfDay = [norm.start.get('hour')];\n }\n },\n deps: () => [\n FrequencyRuleModule,\n ByHourOfDayRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n ],\n};\n\nfunction getNextWeekday(date, weekday) {\n return date.add(getDifferenceBetweenWeekdays(date.get('weekday'), weekday), 'day');\n}\n\nfunction getNthWeekdayOfMonth(date, weekday, nth) {\n let base = date.set('day', 1);\n if (nth < 0) {\n base = base.add(1, 'month');\n }\n base = getNextWeekday(base, weekday);\n // when nth is negative, adding it will act as subtraction\n return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');\n}\n\nclass ByDayOfMonthRule extends RecurrenceRuleBase {\n run(date) {\n const normalizedByDayOfMonth = normalizeByDayOfMonth(\n date,\n this.options.byDayOfMonth,\n this.options.byDayOfWeek,\n );\n const currentDay = date.get('day');\n for (const day of normalizedByDayOfMonth) {\n if (currentDay > day) continue;\n if (currentDay === day) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(new InvalidDateTime(date.granularity('month').set('day', day)));\n }\n let next;\n let nextMonth = date;\n let index = 0;\n while (!next && index < 30) {\n nextMonth = nextMonth.granularity('month').add(1, 'month');\n next = normalizeByDayOfMonth(\n nextMonth,\n this.options.byDayOfMonth,\n this.options.byDayOfWeek,\n )[0];\n index++;\n }\n if (index >= 13) {\n throw new RecurrenceRuleError('byDayOfMonth Infinite while loop');\n }\n return this.validateDate(new InvalidDateTime(nextMonth.set('day', next)));\n }\n}\n/**\n * Does a few things:\n *\n * 1. filters out byDayOfMonth entries which are not applicable\n * to current month\n * 2. negative entries to positive ones\n * 3. if a byDayOfWeek option is given, removes days which are\n * not on the correct day of the week\n */\nfunction normalizeByDayOfMonth(date, byDayOfMonth, byDayOfWeek) {\n const lengthOfMonth = date.endGranularity('month').get('day');\n let normalizedByDayOfMonth = byDayOfMonth\n .filter(day => lengthOfMonth >= Math.abs(day))\n .map(day => (day > 0 ? day : lengthOfMonth + day + 1));\n if (byDayOfWeek) {\n const base = date.granularity('month');\n const filteredByDayOfMonth = [];\n byDayOfWeek.forEach(entry => {\n if (typeof entry === 'string') {\n filteredByDayOfMonth.push(\n ...normalizedByDayOfMonth.filter(day => base.set('day', day).get('weekday') === entry),\n );\n return;\n }\n const nthWeekdayOfMonth = getNthWeekdayOfMonth(date, ...entry).get('day');\n if (normalizedByDayOfMonth.includes(nthWeekdayOfMonth)) {\n filteredByDayOfMonth.push(nthWeekdayOfMonth);\n }\n });\n normalizedByDayOfMonth = Array.from(new Set(filteredByDayOfMonth));\n }\n return normalizedByDayOfMonth.sort((a, b) => {\n if (a > b) return 1;\n if (a < b) return -1;\n else return 0;\n });\n}\n\nclass RevByDayOfMonthRule extends RevRecurrenceRuleBase {\n run(date) {\n const normalizedByDayOfMonth = normalizeByDayOfMonth(\n date,\n this.options.byDayOfMonth,\n this.options.byDayOfWeek,\n ).reverse();\n const currentDay = date.get('day');\n for (const day of normalizedByDayOfMonth) {\n if (currentDay < day) continue;\n if (currentDay === day) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(new InvalidDateTime(date.endGranularity('month').set('day', day)));\n }\n let next;\n let nextMonth = date;\n let index = 0;\n while (!next && index < 30) {\n nextMonth = nextMonth.endGranularity('month').subtract(1, 'month');\n next = normalizeByDayOfMonth(\n nextMonth,\n this.options.byDayOfMonth,\n this.options.byDayOfWeek,\n ).pop();\n index++;\n }\n if (index >= 13) {\n throw new RecurrenceRuleError('byDayOfMonth Infinite while loop');\n }\n return this.validateDate(new InvalidDateTime(nextMonth.set('day', next)));\n }\n}\n\nconst ByDayOfMonthRuleModule = {\n name: 'ByDayOfMonth',\n get: processor => {\n if (processor.options.byDayOfMonth === undefined) return null;\n if (processor.reverse) return new RevByDayOfMonthRule(processor);\n return new ByDayOfMonthRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byDayOfMonth !== undefined) {\n if (options.frequency === 'WEEKLY') {\n throw new RuleOptionError('when \"frequency\" is \"WEEKLY\", \"byDayOfMonth\" cannot be present');\n }\n if (!ruleOptionFilled(options.byDayOfMonth)) {\n throw new RuleOptionError('\"byDayOfMonth\" expects a non-empty array');\n }\n if (options.byDayOfMonth.some(num => num === 0 || num < -31 || num > 31)) {\n throw new RuleOptionError(\n '\"byDayOfMonth\" values must be `num !== 0 && num <= 31 && num >= -31`',\n );\n }\n norm.byDayOfMonth = options.byDayOfMonth.slice();\n } else if (\n !(ruleOptionFilled(options.byDayOfWeek) || ruleOptionFilled(options.byDayOfYear)) &&\n ['YEARLY', 'MONTHLY'].includes(options.frequency)\n ) {\n norm.byDayOfMonth = [norm.start.get('day')];\n }\n },\n deps: () => [\n FrequencyRuleModule,\n ByDayOfMonthRuleModule,\n ByHourOfDayRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n ],\n};\n\nfunction getNthWeekdayOfYear(date, weekday, nth) {\n let base = date.set('month', 1).set('day', 1);\n if (nth < 0) {\n base = base.add(1, 'year');\n }\n base = getNextWeekday(base, weekday);\n // when nth is negative, adding it will act as subtraction\n return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');\n}\n\nfunction getPreviousWeekday(date, weekday) {\n const diff = getDifferenceBetweenWeekdays(date.get('weekday'), weekday);\n return date.subtract(diff === 0 ? 0 : 7 - diff, 'day');\n}\n\nclass RevByDayOfWeekRule extends RevRecurrenceRuleBase {\n run(date) {\n if (this.options.frequency === 'YEARLY') {\n return this.options.byMonthOfYear === undefined\n ? this.expandYearly(date)\n : this.expandMonthly(date);\n } else if (this.options.frequency === 'MONTHLY') {\n return this.expandMonthly(date);\n }\n return this.expand(date);\n }\n expandYearly(date) {\n let next = getPrevWeekdaysOfYear(date, this.options.byDayOfWeek)[0];\n let index = 0;\n let base = date;\n // If we can't find a valid date this year,\n // search the previous year. Only search the past 28 years.\n // (the calendar repeats on a 28 year cycle, according\n // to the internet).\n while (!next && index < 28) {\n index++;\n base = base.granularity('year').subtract(1, 'millisecond');\n next = getPrevWeekdaysOfYear(base, this.options.byDayOfWeek)[0];\n }\n if (!next) {\n throw new RecurrenceRuleError(\n 'The byDayOfWeek rule appears to contain an impossible combination',\n );\n }\n return this.result(date, next);\n }\n expandMonthly(date) {\n let next = getPrevWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];\n let index = 0;\n let base = date;\n // TODO: performance improvment\n // If, in the first year, a match isn't found, we should be able to\n // jumpt to the previous leap year and check that. Or, if already on\n // a leap year, we can just error immediately.\n // If we can't find a valid date this month,\n // search the previous month. Only search the past 4 years\n // (to account for leap year).\n while (!next && index < 50) {\n index++;\n base = base.granularity('month').subtract(1, 'millisecond');\n next = getPrevWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];\n }\n if (!next) {\n throw new RecurrenceRuleError(\n 'The byDayOfWeek rule appears to contain an impossible combination',\n );\n }\n return this.result(date, next);\n }\n expand(date) {\n const next = this.options.byDayOfWeek\n .map(weekday => getPreviousWeekday(date, weekday))\n .sort(dateTimeSortComparer)\n .pop();\n return this.result(date, next);\n }\n result(date, next) {\n if (next.isEqual(date)) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(new InvalidDateTime(next.endGranularity('day')));\n }\n}\n/** For each byDayOfWeek entry, find the previous DateTime */\nfunction getPrevWeekdaysOfYear(date, byDayOfWeek) {\n const normalizedNthWeekdaysOfYear = byDayOfWeek\n .filter(entry => Array.isArray(entry))\n .map(entry => getNthWeekdayOfYear(date, ...entry));\n const normalizedNextWeekdays = byDayOfWeek\n .filter(entry => typeof entry === 'string')\n .map(weekday => getPreviousWeekday(date, weekday))\n .filter(entry => entry.get('year') === date.get('year'));\n return uniqDateTimes([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays])\n .filter(entry => entry.isBeforeOrEqual(date))\n .sort(dateTimeSortComparer)\n .reverse();\n}\n/** For each byDayOfWeek entry, find the previous DateTime */\nfunction getPrevWeekdaysOfMonth(date, byDayOfWeek) {\n const normalizedNthWeekdaysOfMonth = byDayOfWeek\n .filter(entry => Array.isArray(entry))\n .map(entry => getNthWeekdayOfMonth(date, ...entry));\n const normalizedNextWeekdays = byDayOfWeek\n .filter(entry => typeof entry === 'string')\n .map(weekday => getPreviousWeekday(date, weekday))\n .filter(\n entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'),\n );\n return uniqDateTimes([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays])\n .filter(entry => entry.isBeforeOrEqual(date))\n .sort(dateTimeSortComparer)\n .reverse();\n}\n\nclass ByDayOfWeekRule extends RecurrenceRuleBase {\n run(date) {\n if (this.options.frequency === 'YEARLY') {\n return this.options.byMonthOfYear === undefined\n ? this.expandYearly(date)\n : this.expandMonthly(date);\n } else if (this.options.frequency === 'MONTHLY') {\n return this.expandMonthly(date);\n }\n return this.expand(date);\n }\n expandYearly(date) {\n let next = getNextWeekdaysOfYear(date, this.options.byDayOfWeek)[0];\n let index = 0;\n let base = date;\n // If we can't find a valid date this year,\n // search next year. Only search the next 28 years.\n // (the calendar repeats on a 28 year cycle, according\n // to the internet).\n while (!next && index < 28) {\n index++;\n base = base.granularity('year').add(1, 'year');\n next = getNextWeekdaysOfYear(base, this.options.byDayOfWeek)[0];\n }\n if (!next) {\n throw new RecurrenceRuleError(\n 'The byDayOfWeek rule appears to contain an impossible combination',\n );\n }\n return this.result(date, next);\n }\n expandMonthly(date) {\n let next = getNextWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];\n let index = 0;\n let base = date;\n // TODO: performance improvment\n // If, in the first year, a match isn't found, we should be able to\n // jumpt to the next leap year and check that. Or, if already on\n // a leap year, we can just error immediately.\n // If we can't find a valid date this month,\n // search the next month. Only search the next 4 years\n // (to account for leap year).\n while (!next && index < 50) {\n index++;\n base = base.granularity('month').add(1, 'month');\n next = getNextWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];\n }\n if (!next) {\n throw new RecurrenceRuleError(\n 'The byDayOfWeek rule appears to contain an impossible combination',\n );\n }\n return this.result(date, next);\n }\n expand(date) {\n const next = this.options.byDayOfWeek\n .map(weekday => getNextWeekday(date, weekday))\n .sort(dateTimeSortComparer)[0];\n return this.result(date, next);\n }\n result(date, next) {\n if (next.isEqual(date)) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(new InvalidDateTime(next.granularity('day')));\n }\n}\n/** For each byDayOfWeek entry, find the next DateTime */\nfunction getNextWeekdaysOfYear(date, byDayOfWeek) {\n const normalizedNthWeekdaysOfYear = byDayOfWeek\n .filter(entry => Array.isArray(entry))\n .map(entry => getNthWeekdayOfYear(date, ...entry));\n const normalizedNextWeekdays = byDayOfWeek\n .filter(entry => typeof entry === 'string')\n .map(weekday => getNextWeekday(date, weekday))\n .filter(entry => entry.get('year') === date.get('year'));\n return uniqDateTimes([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays])\n .filter(entry => entry.isAfterOrEqual(date))\n .sort(dateTimeSortComparer);\n}\n/** For each byDayOfWeek entry, find the next DateTime */\nfunction getNextWeekdaysOfMonth(date, byDayOfWeek) {\n const normalizedNthWeekdaysOfMonth = byDayOfWeek\n .filter(entry => Array.isArray(entry))\n .map(entry => getNthWeekdayOfMonth(date, ...entry));\n const normalizedNextWeekdays = byDayOfWeek\n .filter(entry => typeof entry === 'string')\n .map(weekday => getNextWeekday(date, weekday))\n .filter(\n entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'),\n );\n return uniqDateTimes([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays])\n .filter(entry => entry.isAfterOrEqual(date))\n .sort(dateTimeSortComparer);\n}\n\nconst ByDayOfWeekRuleModule = {\n name: 'ByDayOfWeek',\n get: processor => {\n if (processor.options.byDayOfWeek === undefined) return null;\n if (processor.reverse) return new RevByDayOfWeekRule(processor);\n return new ByDayOfWeekRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byDayOfWeek !== undefined) {\n if (!ruleOptionFilled(options.byDayOfWeek)) {\n throw new RuleOptionError('\"byDayOfWeek\" expects a non-empty array');\n }\n const invalidWeeday = options.byDayOfWeek.find(day =>\n Array.isArray(day)\n ? !DateAdapter.WEEKDAYS.includes(day[0])\n : !DateAdapter.WEEKDAYS.includes(day),\n );\n if (invalidWeeday) {\n throw new RuleOptionError(\n `\"byDayOfWeek\" expects weedays in the form ` +\n `${JSON.stringify(DateAdapter.WEEKDAYS)} but \"${invalidWeeday}\" was provided`,\n );\n }\n if (\n !['YEARLY', 'MONTHLY'].includes(options.frequency) &&\n options.byDayOfWeek.some(weekday => Array.isArray(weekday))\n ) {\n throw new RuleOptionError(\n '\"byDayOfWeek\" can only include a numeric value (i.e. `[string, number]`) when the \"frequency\" is ' +\n 'either \"MONTHLY\" or \"YEARLY\"',\n );\n }\n if (\n options.frequency === 'MONTHLY' &&\n options.byDayOfWeek.some(\n weekday =>\n Array.isArray(weekday) && (weekday[1] < -31 || weekday[1] === 0 || weekday[1] > 31),\n )\n ) {\n throw new RuleOptionError(\n 'when \"frequency\" is \"MONTHLY\", each \"byDayOfWeek\" can optionally only' +\n ' have a numeric value >= -31 and <= 31 and !== 0',\n );\n }\n if (\n options.frequency === 'YEARLY' &&\n options.byDayOfWeek.some(\n weekday =>\n Array.isArray(weekday) && (weekday[1] < -366 || weekday[1] === 0 || weekday[1] > 366),\n )\n ) {\n throw new RuleOptionError(\n 'when \"frequency\" is \"YEARLY\", each \"byDayOfWeek\" can optionally only' +\n ' have a numeric value >= -366 and <= 366 and !== 0',\n );\n }\n norm.byDayOfWeek = options.byDayOfWeek;\n } else if (!ruleOptionFilled(options.byDayOfMonth) && options.frequency === 'WEEKLY') {\n norm.byDayOfWeek = [norm.start.get('weekday')];\n }\n },\n deps: () => [\n FrequencyRuleModule,\n ByDayOfWeekRuleModule,\n ByHourOfDayRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n ],\n};\n\nclass RevByMonthOfYearRule extends RevRecurrenceRuleBase {\n constructor() {\n super(...arguments);\n this.option = this.processor.options.byMonthOfYear.slice().reverse();\n }\n run(date) {\n const currentMonth = date.get('month');\n for (const month of this.option) {\n if (currentMonth < month) continue;\n if (currentMonth === month) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(\n new InvalidDateTime(date.endGranularity('year').set('month', month)),\n );\n }\n return this.validateDate(\n new InvalidDateTime(\n date\n .endGranularity('year')\n .subtract(1, 'year')\n .set('month', this.option[0]),\n ),\n );\n }\n}\n\nclass ByMonthOfYearRule extends RecurrenceRuleBase {\n run(date) {\n const currentMonth = date.get('month');\n for (const month of this.options.byMonthOfYear) {\n if (currentMonth > month) continue;\n if (currentMonth === month) {\n return this.validateDate(new ValidDateTime(date));\n }\n return this.validateDate(new InvalidDateTime(date.granularity('year').set('month', month)));\n }\n return this.validateDate(\n new InvalidDateTime(\n date\n .granularity('year')\n .add(1, 'year')\n .set('month', this.options.byMonthOfYear[0]),\n ),\n );\n }\n}\n\nconst ByMonthOfYearRuleModule = {\n name: 'ByMonthOfYear',\n get: processor => {\n if (processor.options.byMonthOfYear === undefined) return null;\n if (processor.reverse) {\n return new RevByMonthOfYearRule(processor);\n }\n return new ByMonthOfYearRule(processor);\n },\n normalizeOptions: (options, norm) => {\n if (options.byMonthOfYear !== undefined) {\n if (!ruleOptionFilled(options.byMonthOfYear)) {\n throw new RuleOptionError('\"byMonthOfYear\" expects a non-empty array');\n }\n if (options.byMonthOfYear.some(num => num < 1 || num > 12)) {\n throw new RuleOptionError('\"byMonthOfYear\" values must be `num >= 1 && num >= 12`');\n }\n norm.byMonthOfYear = options.byMonthOfYear.slice();\n norm.byMonthOfYear.sort(numberSortComparer);\n } else if (\n !(\n ruleOptionFilled(options.byDayOfMonth) ||\n ruleOptionFilled(options.byDayOfWeek) ||\n ruleOptionFilled(options.byDayOfYear)\n ) &&\n options.frequency === 'YEARLY'\n ) {\n norm.byMonthOfYear = [norm.start.get('month')];\n }\n },\n deps: () => [\n FrequencyRuleModule,\n ByMonthOfYearRuleModule,\n ByDayOfMonthRuleModule,\n ByHourOfDayRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n ],\n};\n\nconst ICAL_RULES = [\n FrequencyRuleModule,\n ByMonthOfYearRuleModule,\n ByDayOfMonthRuleModule,\n ByDayOfWeekRuleModule,\n ByHourOfDayRuleModule,\n ByMinuteOfHourRuleModule,\n BySecondOfMinuteRuleModule,\n ByMillisecondOfSecondRuleModule,\n];\n\nexport {\n ByDayOfMonthRule,\n ByDayOfMonthRuleModule,\n ByDayOfWeekRule,\n ByDayOfWeekRuleModule,\n ByHourOfDayRule,\n ByHourOfDayRuleModule,\n ByMillisecondOfSecondRule,\n ByMillisecondOfSecondRuleModule,\n ByMinuteOfHourRule,\n ByMinuteOfHourRuleModule,\n ByMonthOfYearRule,\n ByMonthOfYearRuleModule,\n BySecondOfMinuteRule,\n BySecondOfMinuteRuleModule,\n FrequencyRule,\n FrequencyRuleModule,\n ICAL_RULES,\n RevByDayOfMonthRule,\n RevByDayOfWeekRule,\n RevByHourOfDayRule,\n RevByMillisecondOfSecondRule,\n RevByMinuteOfHourRule,\n RevByMonthOfYearRule,\n RevBySecondOfMinuteRule,\n RevFrequencyRule,\n getPrevWeekdaysOfMonth,\n getPrevWeekdaysOfYear,\n};\n","import { DateAdapterBase, InvalidDateAdapterError, ArgumentError } from '@rschedule/core';\n\nclass StandardDateAdapter extends DateAdapterBase {\n constructor(date, options = {}) {\n super(undefined, options);\n if (!['UTC', null, undefined].includes(options.timezone)) {\n throw new InvalidDateAdapterError(\n `StandardDateAdapter only supports \"UTC\" and ` +\n `local time zones but \"${options.timezone}\" was provided.`,\n );\n }\n this._date = new Date(date);\n this.timezone = options.timezone !== undefined ? options.timezone : null;\n this.assertIsValid();\n }\n static isDate(object) {\n return Object.prototype.toString.call(object) === '[object Date]';\n }\n static fromDate(date, options) {\n return new StandardDateAdapter(date, options);\n }\n static fromJSON(json) {\n const args = [\n json.year,\n json.month - 1,\n json.day,\n json.hour,\n json.minute,\n json.second,\n json.millisecond,\n ];\n switch (json.timezone) {\n case 'UTC': {\n return new StandardDateAdapter(new Date(Date.UTC(...args)), {\n timezone: 'UTC',\n duration: json.duration,\n });\n }\n case null: {\n return new StandardDateAdapter(new Date(...args), {\n timezone: null,\n duration: json.duration,\n });\n }\n default:\n throw new InvalidDateAdapterError(\n 'The `StandardDateAdapter` only supports datetimes in ' +\n `UTC or LOCAL (null) time. You provided a JSON object ` +\n `with timezone \"${json.timezone}\".`,\n );\n }\n }\n static fromDateTime(datetime) {\n const date = StandardDateAdapter.fromJSON(datetime.toJSON());\n date.generators.push(...datetime.generators);\n return date;\n }\n get date() {\n return new Date(this._date);\n }\n get end() {\n if (!this.duration) return;\n if (this._end) return this._end;\n this._end = StandardDateAdapter.fromDateTime(\n this.toDateTime().add(this.duration, 'millisecond'),\n ).date;\n return this._end;\n }\n set(prop, value) {\n if (prop === 'timezone') {\n if (this.timezone === value) return this;\n else {\n return new StandardDateAdapter(this._date, {\n timezone: value,\n duration: this.duration,\n generators: this.generators,\n });\n }\n } else if (prop === 'duration') {\n if (this.duration === value) return this;\n else {\n return new StandardDateAdapter(this._date, {\n timezone: this.timezone,\n duration: value,\n generators: this.generators,\n });\n }\n }\n throw new ArgumentError(`Unknown prop \"${prop}\" for StandardDateAdapter#set()`);\n }\n valueOf() {\n return this._date.valueOf();\n }\n toJSON() {\n let json;\n if (this.timezone === 'UTC') {\n json = {\n timezone: this.timezone,\n year: this._date.getUTCFullYear(),\n month: this._date.getUTCMonth() + 1,\n day: this._date.getUTCDate(),\n hour: this._date.getUTCHours(),\n minute: this._date.getUTCMinutes(),\n second: this._date.getUTCSeconds(),\n millisecond: this._date.getUTCMilliseconds(),\n };\n } else {\n json = {\n timezone: this.timezone,\n year: this._date.getFullYear(),\n month: this._date.getMonth() + 1,\n day: this._date.getDate(),\n hour: this._date.getHours(),\n minute: this._date.getMinutes(),\n second: this._date.getSeconds(),\n millisecond: this._date.getMilliseconds(),\n };\n }\n if (this.duration) {\n json.duration = this.duration;\n }\n return json;\n }\n assertIsValid() {\n if (!StandardDateAdapter.isDate(this._date) || isNaN(this._date.valueOf())) {\n throw new InvalidDateAdapterError('StandardDateAdapter has invalid date.');\n } else if (![null, 'UTC'].includes(this.timezone)) {\n throw new InvalidDateAdapterError(\n 'StandardDateAdapter only supports local (null) and UTC timezones but ' +\n `\"${this.timezone}\" was specified.`,\n );\n } else if (this.duration && this.duration <= 0) {\n throw new InvalidDateAdapterError('If provided, duration must be greater than 0.');\n }\n return true;\n }\n}\nStandardDateAdapter.hasTimezoneSupport = false;\n\nexport { StandardDateAdapter };\n","import { DateAdapterBase } from '@rschedule/core';\nimport { Rule } from '@rschedule/core/generators';\nimport { ICAL_RULES } from '@rschedule/core/rules/ICAL_RULES';\nimport { StandardDateAdapter } from '@rschedule/standard-date-adapter';\n\nDateAdapterBase.adapter = StandardDateAdapter;\nRule.recurrenceRules = ICAL_RULES;\n","import { OccurrenceGenerator } from '@rschedule/core/generators';\n\nclass ParseJSONError extends Error {}\nclass SerializeJSONError extends Error {}\nOccurrenceGenerator.JSON_FN_MAP = new Map();\nOccurrenceGenerator.prototype.toJSON = function serialize(opts) {\n throw new SerializeJSONError(\n `To support smaller bundles, ${this.constructor.name}#toJSON() ` +\n `must be manually added. See \"@rschedule/json-tools\" in the rSchedule docs.`,\n );\n};\nOccurrenceGenerator.fromJSON = function parse(json, options) {\n if (typeof json !== 'object' || json === null) {\n throw new ParseJSONError(`Invalid json \"${json}\"`);\n }\n const fn = OccurrenceGenerator.JSON_FN_MAP.get(json.type);\n if (!fn) {\n throw new ParseJSONError(\n `Unknown rSchedule object type \"${json.type}\". Have you added a json serializer ` +\n `for \"${json.type}\"? ` +\n `See \"@rschedule/json-tools\" in the rSchedule docs.`,\n );\n }\n return fn(json, options);\n};\nfunction serializeDataToJSON(gen, json, opt) {\n if (!opt.data) return;\n if (opt.data === true) {\n json.data = gen.data;\n } else {\n json.data = opt.data(gen);\n }\n if (json.data === undefined) delete json.data;\n}\nfunction registerJSONSerializerFn(name, fn) {\n OccurrenceGenerator.JSON_FN_MAP.set(name, fn);\n}\n\nexport { ParseJSONError, SerializeJSONError, registerJSONSerializerFn, serializeDataToJSON };\n","import { Dates, Rule, Schedule } from '@rschedule/core/generators';\nimport {\n serializeDataToJSON,\n ParseJSONError,\n registerJSONSerializerFn,\n} from '@rschedule/json-tools';\nimport { DateAdapterBase, cloneJSON } from '@rschedule/core';\n\nDates.prototype.toJSON = function serialize(opts = {}) {\n const json = {\n type: 'Dates',\n dates: this.adapters.map(adapter => adapter.toJSON()),\n };\n if (!opts.nested) json.timezone = this.timezone;\n serializeDataToJSON(this, json, opts);\n return json;\n};\nDates.fromJSON = function parse(json, options = {}) {\n if (json.type !== 'Dates') {\n throw new ParseJSONError('Invalid Dates JSON');\n }\n return new Dates({\n dates: json.dates.map(date => DateAdapterBase.adapter.fromJSON(date)),\n data: typeof options.data === 'function' ? options.data(json) : json.data,\n timezone: options.timezone || json.timezone,\n });\n};\nregisterJSONSerializerFn('Dates', Dates.fromJSON);\n\nRule.prototype.toJSON = function serialize(opts = {}) {\n const json = {\n type: 'Rule',\n config: Object.assign(Object.assign({}, cloneJSON(this.options)), {\n start: this.normalizeDateInput(this.options.start).toJSON(),\n }),\n };\n if (this.options.end) {\n json.config.end = this.normalizeDateInput(this.options.end).toJSON();\n }\n if (!opts.nested) json.timezone = this.timezone;\n serializeDataToJSON(this, json, opts);\n return json;\n};\nRule.fromJSON = function fromJSON(json, options = {}) {\n const config = Object.assign(Object.assign({}, json.config), {\n start: DateAdapterBase.adapter.fromJSON(json.config.start),\n end: json.config.end && DateAdapterBase.adapter.fromJSON(json.config.end),\n });\n return new Rule(config, {\n data: typeof options.data === 'function' ? options.data(json) : json.data,\n timezone: options.timezone || json.timezone,\n });\n};\nregisterJSONSerializerFn('Rule', Rule.fromJSON);\n\nSchedule.prototype.toJSON = function serialize(opts = {}) {\n const json = {\n type: 'Schedule',\n rrules: this.rrules.map(rule =>\n rule.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n ),\n exrules: this.exrules.map(rule =>\n rule.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n ),\n rdates: this.rdates.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n exdates: this.exdates.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n };\n if (!opts.nested) json.timezone = this.timezone;\n serializeDataToJSON(this, json, opts);\n return json;\n};\nSchedule.fromJSON = function parse(json, options = {}) {\n if (json.type !== 'Schedule') {\n throw new ParseJSONError('Invalid Schedule JSON');\n }\n return new Schedule({\n rrules: json.rrules.map(rule =>\n Rule.fromJSON(rule, Object.assign({ timezone: json.timezone }, options)),\n ),\n exrules: json.exrules.map(rule =>\n Rule.fromJSON(rule, Object.assign({ timezone: json.timezone }, options)),\n ),\n rdates: Dates.fromJSON(json.rdates, Object.assign({ timezone: json.timezone }, options)),\n exdates: Dates.fromJSON(json.exdates, Object.assign({ timezone: json.timezone }, options)),\n data: typeof options.data === 'function' ? options.data(json) : json.data,\n timezone: options.timezone || json.timezone,\n });\n};\nregisterJSONSerializerFn('Schedule', Schedule.fromJSON);\n","export var protectedTokens = ['D', 'DD', 'YY', 'YYYY']\n\nexport function isProtectedToken(token) {\n return protectedTokens.indexOf(token) !== -1\n}\n\nexport function throwProtectedError(token) {\n throw new RangeError(\n '`options.awareOfUnicodeTokens` must be set to `true` to use `' +\n token +\n '` token; see: https://git.io/fxCyr'\n )\n}\n","import fs from '../platform/server/fs';\nimport * as monthUtils from '../shared/months';\nimport * as sqlite from '../platform/server/sqlite';\nimport * as prefs from './prefs';\nimport * as cloudStorage from './cloud-storage';\nconst connection = require('../platform/server/connection');\nconst uuid = require('../platform/uuid');\nconst dateFns = require('date-fns');\n\n// A special backup that represents the latest version of the db that\n// can be reverted to after loading a backup\nconst LATEST_BACKUP_FILENAME = 'db.latest.sqlite';\nlet serviceInterval = null;\n\nexport async function getBackups(id) {\n const budgetDir = fs.getBudgetDir(id);\n const backupDir = fs.join(budgetDir, 'backups');\n\n let paths = [];\n if (await fs.exists(backupDir)) {\n paths = await fs.listDir(backupDir);\n paths = paths.filter(file => file.match(/\\.sqlite$/));\n }\n\n const backups = await Promise.all(\n paths.map(async path => {\n const mtime = await fs.getModifiedTime(fs.join(backupDir, path));\n return {\n id: path,\n date: new Date(mtime)\n };\n })\n );\n\n backups.sort((b1, b2) => {\n if (b1.date < b2.date) {\n return 1;\n } else if (b1.date > b2.date) {\n return -1;\n }\n return 0;\n });\n\n return backups;\n}\n\nexport async function getLatestBackup(id) {\n const budgetDir = fs.getBudgetDir(id);\n if (await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME))) {\n return {\n id: LATEST_BACKUP_FILENAME,\n date: null,\n isLatest: true\n };\n }\n return null;\n}\n\nexport async function getAvailableBackups(id) {\n let backups = await getBackups(id);\n\n let latestBackup = await getLatestBackup(id);\n if (latestBackup) {\n backups.unshift(latestBackup);\n }\n\n backups = backups.map(backup => ({\n ...backup,\n date: backup.date ? dateFns.format(backup.date, 'yyyy-MM-dd h:mm') : null\n }));\n\n return backups;\n}\n\nexport async function updateBackups(backups) {\n const byDay = backups.reduce((groups, backup) => {\n const day = dateFns.format(backup.date, 'yyyy-MM-dd');\n groups[day] = groups[day] || [];\n groups[day].push(backup);\n return groups;\n }, {});\n\n const removed = [];\n for (let day of Object.keys(byDay)) {\n const dayBackups = byDay[day];\n const isToday = day === monthUtils.currentDay();\n // Allow 3 backups of the current day (so fine-grained edits are\n // kept around). Otherwise only keep around one backup per day.\n // And only keep a total of 10 backups.\n for (let backup of dayBackups.slice(isToday ? 3 : 1)) {\n removed.push(backup.id);\n }\n }\n\n // Get the list of remaining backups and only keep the latest 10\n const currentBackups = backups.filter(backup => !removed.includes(backup.id));\n return removed.concat(currentBackups.slice(10).map(backup => backup.id));\n}\n\nexport async function makeBackup(id) {\n const budgetDir = fs.getBudgetDir(id);\n\n // When making a backup, we no longer consider the user to be\n // viewing any backups. If there exists a \"latest backup\" we should\n // delete it and consider whatever is current as the latest\n if (await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME))) {\n await fs.removeFile(fs.join(fs.getBudgetDir(id), LATEST_BACKUP_FILENAME));\n }\n\n let backupId = `${uuid.v4Sync()}.sqlite`;\n let backupPath = fs.join(budgetDir, 'backups', backupId);\n\n if (!(await fs.exists(fs.join(budgetDir, 'backups')))) {\n await fs.mkdir(fs.join(budgetDir, 'backups'));\n }\n\n await fs.copyFile(fs.join(budgetDir, 'db.sqlite'), backupPath);\n\n // Remove all the messages from the backup\n const db = sqlite.openDatabase(backupPath);\n await sqlite.runQuery(db, 'DELETE FROM messages_crdt');\n await sqlite.runQuery(db, 'DELETE FROM messages_clock');\n sqlite.closeDatabase(db);\n\n const toRemove = await updateBackups(await getBackups(id));\n for (let id of toRemove) {\n await fs.removeFile(fs.join(budgetDir, 'backups', id));\n }\n\n connection.send('backups-updated', await getAvailableBackups(id));\n}\n\nexport async function loadBackup(id, backupId) {\n const budgetDir = fs.getBudgetDir(id);\n\n if (!(await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME)))) {\n // If this is the first time we're loading a backup, save the\n // current version so the user can easily revert back to it\n await fs.copyFile(\n fs.join(budgetDir, 'db.sqlite'),\n fs.join(budgetDir, LATEST_BACKUP_FILENAME)\n );\n\n await fs.copyFile(\n fs.join(budgetDir, 'metadata.json'),\n fs.join(budgetDir, 'metadata.latest.json')\n );\n\n // Restart the backup service to make sure the user has the full\n // amount of time to figure out which one they want\n stopBackupService();\n startBackupService(id);\n\n await prefs.loadPrefs(id);\n }\n\n if (backupId === LATEST_BACKUP_FILENAME) {\n console.log('Reverting backup');\n\n // If reverting back to the latest, copy and delete the latest\n // backup\n await fs.copyFile(\n fs.join(budgetDir, LATEST_BACKUP_FILENAME),\n fs.join(budgetDir, 'db.sqlite')\n );\n await fs.copyFile(\n fs.join(budgetDir, 'metadata.latest.json'),\n fs.join(budgetDir, 'metadata.json')\n );\n await fs.removeFile(fs.join(budgetDir, LATEST_BACKUP_FILENAME));\n await fs.removeFile(fs.join(budgetDir, 'metadata.latest.json'));\n\n // Re-upload the new file\n try {\n await cloudStorage.upload();\n } catch (e) {}\n prefs.unloadPrefs();\n } else {\n console.log('Loading backup', backupId);\n\n // This function is only ever called when a budget isn't loaded,\n // so it's safe to load our prefs in. We need to forget about any\n // syncing data if we are loading a backup (the current sync data\n // will be restored if the user reverts to the original version)\n await prefs.loadPrefs(id);\n await prefs.savePrefs({\n groupId: null,\n lastSyncedTimestamp: null,\n lastUploaded: null\n });\n\n // Re-upload the new file\n try {\n await cloudStorage.upload();\n } catch (e) {}\n\n prefs.unloadPrefs();\n\n await fs.copyFile(\n fs.join(budgetDir, 'backups', backupId),\n fs.join(budgetDir, 'db.sqlite')\n );\n }\n}\n\nexport function startBackupService(id) {\n if (serviceInterval) {\n clearInterval(serviceInterval);\n }\n\n // Make a backup every 15 minutes\n serviceInterval = setInterval(async () => {\n console.log('Making backup');\n await makeBackup(id);\n }, 1000 * 60 * 15);\n}\n\nexport function stopBackupService() {\n clearInterval(serviceInterval);\n serviceInterval = null;\n}\n","import asyncStorage from '../../platform/server/asyncStorage';\nimport { sha256String } from '../encryption-internals';\nlet Mixpanel = require('@jlongster/mixpanel');\nlet uuid = require('../../platform/uuid');\n\nlet currentUniqueId;\nlet mixpanel;\nlet isEnabled = true;\n\nexport function toggle(trackUsage) {\n isEnabled = trackUsage == null || trackUsage === 'true' ? true : false;\n}\n\n// TODO: Figure out location, send to EU data centers if in EU\n// {\n// host: \"api-eu.mixpanel.com\",\n// },\n\n// This must stay up-to-date with all apps that hit mixpanel! That includes the\n// website and server. If changing this, make sure to change it everywhere\nasync function hash(userId) {\n let hashed = await sha256String(userId);\n return `user-${hashed.replace(/[=/]/g, '')}`;\n}\n\nfunction isAnonymous(id) {\n return !id.startsWith('user-');\n}\n\nexport async function init() {\n mixpanel = Mixpanel.init('7e6461b8dde1d5dbf04ed1711768257a');\n\n let [\n [, distinctId],\n [, userId],\n [, trackUsage]\n ] = await asyncStorage.multiGet(['distinct-id-v2', 'user-id', 'track-usage']);\n\n toggle(trackUsage);\n\n if (distinctId == null) {\n if (userId) {\n let hashedId = await hash(userId);\n currentUniqueId = hashedId;\n setProfile({ $name: hashedId });\n } else {\n currentUniqueId = uuid.v4Sync();\n }\n\n await asyncStorage.setItem('distinct-id-v2', currentUniqueId);\n } else {\n currentUniqueId = distinctId;\n\n if (!isAnonymous(distinctId)) {\n setProfile({ $name: distinctId });\n }\n }\n}\n\nexport async function login(userId) {\n let hashedId = await hash(userId);\n await asyncStorage.setItem('distinct-id-v2', hashedId);\n\n if (isAnonymous(currentUniqueId)) {\n mixpanel.identify(hashedId, currentUniqueId);\n\n startBuffering();\n // So ridiculous. https://help.mixpanel.com/hc/en-us/articles/115004497803-Identity-Management-Best-Practices#serverside-aliasing\n setTimeout(() => {\n stopBuffering();\n }, 2000);\n\n currentUniqueId = hashedId;\n setProfile({ $name: hashedId });\n } else {\n currentUniqueId = hashedId;\n }\n}\n\nlet BUFFERING = false;\nlet BUFFER = [];\n\nfunction startBuffering() {\n BUFFERING = true;\n BUFFER = [];\n}\n\nfunction stopBuffering() {\n for (let call of BUFFER) {\n call[0](...call[1]);\n }\n BUFFERING = false;\n BUFFER = [];\n}\n\nfunction buffered(func) {\n return (...args) => {\n if (process.env.NODE_ENV !== 'development') {\n if (BUFFERING) {\n BUFFER.push([func, [currentUniqueId, ...args]]);\n } else {\n func(currentUniqueId, ...args);\n }\n }\n };\n}\n\nexport const track = buffered((distinct_id, name, props) => {});\n\nexport const setProfile = buffered((distinct_id, props) => {});\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.constants = {\n O_RDONLY: 0,\n O_WRONLY: 1,\n O_RDWR: 2,\n S_IFMT: 61440,\n S_IFREG: 32768,\n S_IFDIR: 16384,\n S_IFCHR: 8192,\n S_IFBLK: 24576,\n S_IFIFO: 4096,\n S_IFLNK: 40960,\n S_IFSOCK: 49152,\n O_CREAT: 64,\n O_EXCL: 128,\n O_NOCTTY: 256,\n O_TRUNC: 512,\n O_APPEND: 1024,\n O_DIRECTORY: 65536,\n O_NOATIME: 262144,\n O_NOFOLLOW: 131072,\n O_SYNC: 1052672,\n O_DIRECT: 16384,\n O_NONBLOCK: 2048,\n S_IRWXU: 448,\n S_IRUSR: 256,\n S_IWUSR: 128,\n S_IXUSR: 64,\n S_IRWXG: 56,\n S_IRGRP: 32,\n S_IWGRP: 16,\n S_IXGRP: 8,\n S_IRWXO: 7,\n S_IROTH: 4,\n S_IWOTH: 2,\n S_IXOTH: 1,\n F_OK: 0,\n R_OK: 4,\n W_OK: 2,\n X_OK: 1,\n UV_FS_SYMLINK_DIR: 1,\n UV_FS_SYMLINK_JUNCTION: 2,\n UV_FS_COPYFILE_EXCL: 1,\n UV_FS_COPYFILE_FICLONE: 2,\n UV_FS_COPYFILE_FICLONE_FORCE: 4,\n COPYFILE_EXCL: 1,\n COPYFILE_FICLONE: 2,\n COPYFILE_FICLONE_FORCE: 4,\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","module.exports = require(\"./utils\");\r\nmodule.exports.FileSystem = require(\"./fileSystem\");\r\nmodule.exports.Constants = require(\"./constants\");\r\nmodule.exports.Errors = require(\"./errors\");\r\nmodule.exports.FileAttr = require(\"./fattr\");","module.exports = require(\"./utils\");\nmodule.exports.Constants = require(\"./constants\");\nmodule.exports.Errors = require(\"./errors\");\nmodule.exports.FileAttr = require(\"./fattr\");\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var dateToCompare = toDate(dirtyDateToCompare)\n return date.getTime() < dateToCompare.getTime()\n}\n","export async function incrFetch(\n runQuery,\n terms,\n compare,\n makeQuery,\n params = []\n) {\n let pageCount = 500;\n let results = [];\n\n let fetchedIds = new Set();\n\n for (let i = 0; i < terms.length; i += pageCount) {\n let slice = terms.slice(i, i + pageCount).filter(id => !fetchedIds.has(id));\n if (slice.length > 0) {\n let filter = slice.map(id => compare(id)).join(' OR ');\n let query = makeQuery('(' + filter + ')');\n\n let rows = await runQuery(query, params, true);\n fetchedIds = new Set([...fetchedIds, ...slice]);\n results = results.concat(rows);\n }\n }\n\n return results;\n}\n\nexport function whereIn(ids, field) {\n let ids2 = [...new Set(ids)];\n let filter = `${field} IN (` + ids2.map(id => `'${id}'`).join(',') + ')';\n return filter;\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/\n}\n\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The previous `parse` implementation was renamed to `parseISO`.\n *\n * ```javascript\n * // Before v2.0.0\n * parse('2016-01-01')\n *\n * // v2.0.0 onward\n * parseISO('2016-01-01')\n * ```\n *\n * - `parseISO` now validates separate date and time values in ISO-8601 strings\n * and returns `Invalid Date` if the date is invalid.\n *\n * ```javascript\n * parseISO('2018-13-32')\n * //=> Invalid Date\n * ```\n *\n * - `parseISO` now doesn't fall back to `new Date` constructor\n * if it fails to parse a string argument. Instead, it returns `Invalid Date`.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var options = dirtyOptions || {}\n\n var additionalDigits =\n options.additionalDigits == null\n ? DEFAULT_ADDITIONAL_DIGITS\n : toInteger(options.additionalDigits)\n if (\n additionalDigits !== 2 &&\n additionalDigits !== 1 &&\n additionalDigits !== 0\n ) {\n throw new RangeError('additionalDigits must be 0, 1 or 2')\n }\n\n if (\n !(\n typeof argument === 'string' ||\n Object.prototype.toString.call(argument) === '[object String]'\n )\n ) {\n return new Date(NaN)\n }\n\n var dateStrings = splitDateString(argument)\n var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n var date = parseDate(parseYearResult.restDateString, parseYearResult.year)\n\n if (isNaN(date) || !date) {\n return new Date(NaN)\n }\n\n var timestamp = date.getTime()\n var time = 0\n var offset\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time)\n if (isNaN(time)) {\n return new Date(NaN)\n }\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone)\n if (isNaN(offset)) {\n return new Date(NaN)\n }\n } else {\n var fullTime = timestamp + time\n var fullTimeDate = new Date(fullTime)\n\n offset = getTimezoneOffsetInMilliseconds(fullTimeDate)\n\n // Adjust time when it's coming from DST\n var fullTimeDateNextDay = new Date(fullTime)\n fullTimeDateNextDay.setDate(fullTimeDate.getDate() + 1)\n var offsetDiff =\n getTimezoneOffsetInMilliseconds(fullTimeDateNextDay) - offset\n if (offsetDiff > 0) {\n offset += offsetDiff\n }\n }\n\n return new Date(timestamp + time + offset)\n}\n\nfunction splitDateString(dateString) {\n var dateStrings = {}\n var array = dateString.split(patterns.dateTimeDelimiter)\n var timeString\n\n if (/:/.test(array[0])) {\n dateStrings.date = null\n timeString = array[0]\n } else {\n dateStrings.date = array[0]\n timeString = array[1]\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0]\n timeString = dateString.substr(dateStrings.date.length, dateString.length)\n }\n }\n\n if (timeString) {\n var token = patterns.timezone.exec(timeString)\n if (token) {\n dateStrings.time = timeString.replace(token[1], '')\n dateStrings.timezone = token[1]\n } else {\n dateStrings.time = timeString\n }\n }\n\n return dateStrings\n}\n\nfunction parseYear(dateString, additionalDigits) {\n var regex = new RegExp(\n '^(?:(\\\\d{4}|[+-]\\\\d{' +\n (4 + additionalDigits) +\n '})|(\\\\d{2}|[+-]\\\\d{' +\n (2 + additionalDigits) +\n '})$)'\n )\n\n var captures = dateString.match(regex)\n // Invalid ISO-formatted year\n if (!captures) return { year: null }\n\n var year = captures[1] && parseInt(captures[1])\n var century = captures[2] && parseInt(captures[2])\n\n return {\n year: century == null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length)\n }\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return null\n\n var captures = dateString.match(dateRegex)\n // Invalid ISO-formatted string\n if (!captures) return null\n\n var isWeekDate = !!captures[4]\n var dayOfYear = parseDateUnit(captures[1])\n var month = parseDateUnit(captures[2]) - 1\n var day = parseDateUnit(captures[3])\n var week = parseDateUnit(captures[4]) - 1\n var dayOfWeek = parseDateUnit(captures[5]) - 1\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN)\n }\n return dayOfISOWeekYear(year, week, dayOfWeek)\n } else {\n var date = new Date(0)\n if (\n !validateDate(year, month, day) ||\n !validateDayOfYearDate(year, dayOfYear)\n ) {\n return new Date(NaN)\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day))\n return date\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1\n}\n\nfunction parseTime(timeString) {\n var captures = timeString.match(timeRegex)\n if (!captures) return null // Invalid ISO-formatted time\n\n var hours = parseTimeUnit(captures[1])\n var minutes = parseTimeUnit(captures[2])\n var seconds = parseTimeUnit(captures[3])\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN\n }\n\n return (\n (hours % 24) * MILLISECONDS_IN_HOUR +\n minutes * MILLISECONDS_IN_MINUTE +\n seconds * 1000\n )\n}\n\nfunction parseTimeUnit(value) {\n return (value && parseFloat(value.replace(',', '.'))) || 0\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === 'Z') return 0\n\n var captures = timezoneString.match(timezoneRegex)\n if (!captures) return 0\n\n var sign = captures[1] === '+' ? -1 : 1\n var hours = parseInt(captures[2])\n var minutes = (captures[3] && parseInt(captures[3])) || 0\n\n if (!validateTimezone(hours, minutes)) {\n return NaN\n }\n\n return (\n sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE)\n )\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n var date = new Date(0)\n date.setUTCFullYear(isoWeekYear, 0, 4)\n var fourthOfJanuaryDay = date.getUTCDay() || 7\n var diff = (week || 0) * 7 + (day || 0) + 1 - fourthOfJanuaryDay\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100)\n}\n\nfunction validateDate(year, month, date) {\n return !(\n month < 0 ||\n month > 11 ||\n date < 1 ||\n date > (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n )\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return !(dayOfYear < 1 || dayOfYear > (isLeapYearIndex(year) ? 366 : 365))\n}\n\nfunction validateWeekDate(_year, week, day) {\n return !(week < 0 || week > 52 || day < 0 || day > 6)\n}\n\nfunction validateTime(hours, minutes, seconds) {\n return !(\n seconds < 0 ||\n seconds >= 60 ||\n minutes < 0 ||\n minutes >= 60 ||\n hours < 0 ||\n hours >= 25\n )\n}\n\nfunction validateTimezone(_hours, minutes) {\n return !(minutes < 0 || minutes > 59)\n}\n","import * as db from './index';\nimport { addSyncListener } from '../sync/index';\n\n// This file keeps all the mappings in memory so we can access it\n// synchronously. This is primarily used in the rules system, but\n// there may be other uses in the future. You don't need to worry\n// about this generally; if you are querying transactions, ids are\n// transparently mapped for you. But if you are building something\n// that stores ids and later uses them, you need to remember to map\n// the ids.\n//\n// IMPORTANT: `loadMappings` must be called first before other modules\n// that listen for sync changes. This must be the first sync listener\n// to run in case other listeners use this mapping table; otherwise\n// they might see stale mappings.\n\nlet allMappings;\nlet unlistenSync;\n\nexport async function loadMappings() {\n // The mappings are separated into tables specific to the type of\n // data. But you know, we really could keep a global mapping table.\n let categories = (await db.all('SELECT * FROM category_mapping')).map(r => [\n r.id,\n r.transferId\n ]);\n let payees = (await db.all('SELECT * FROM payee_mapping')).map(r => [\n r.id,\n r.targetId\n ]);\n\n // All ids are unique, so we can just keep a global table of mappings\n allMappings = new Map(categories.concat(payees));\n\n if (unlistenSync) {\n unlistenSync();\n }\n unlistenSync = addSyncListener(onApplySync);\n}\n\nfunction onApplySync(oldValues, newValues) {\n newValues.forEach((items, table) => {\n if (table.indexOf('mapping') !== -1) {\n let field = table === 'category_mapping' ? 'transferId' : 'targetId';\n\n items.forEach(newValue => {\n allMappings.set(newValue.id, newValue[field]);\n });\n }\n });\n}\n\nexport function getMappings() {\n return allMappings;\n}\n\nexport function getMapping(id) {\n return allMappings.get(id) || null;\n}\n","import * as db from '../db';\n\nasync function getPayee(acct) {\n return db.first('SELECT * FROM payees WHERE transfer_acct = ?', [acct]);\n}\n\nasync function getTransferredAccount(transaction) {\n if (transaction.payee) {\n let { transfer_acct, id } = await db.first(\n 'SELECT id, transfer_acct FROM v_payees WHERE id = ?',\n [transaction.payee]\n );\n return transfer_acct;\n }\n return null;\n}\n\nasync function clearCategory(transaction, transferAcct) {\n const { offbudget: fromOffBudget } = await db.first(\n 'SELECT offbudget FROM accounts WHERE id = ?',\n [transaction.account]\n );\n const { offbudget: toOffBudget } = await db.first(\n 'SELECT offbudget FROM accounts WHERE id = ?',\n [transferAcct]\n );\n\n // We should clear the category to make sure it's not being\n // accounted for in the budget, unless it should be in the case of\n // transferring from an on-budget to off-budget account\n if (fromOffBudget === toOffBudget) {\n await db.updateTransaction({ id: transaction.id, category: null });\n return true;\n }\n return false;\n}\n\nexport async function addTransfer(transaction, transferredAccount) {\n let { id: fromPayee } = await db.first(\n 'SELECT id FROM payees WHERE transfer_acct = ?',\n [transaction.account]\n );\n\n // We need to enforce certain constraints with child transaction transfers\n if (transaction.parent_id) {\n let row = await db.first(\n `\n SELECT p.id, p.transfer_acct FROM v_transactions t\n LEFT JOIN payees p ON p.id = t.payee\n WHERE t.id = ?\n `,\n [transaction.parent_id]\n );\n\n if (row.transfer_acct) {\n if (row.id !== transaction.payee) {\n // This child transaction is trying to use a transfer payee,\n // but the parent is already using a different transfer payee.\n // This is not allowed, so not only do we do nothing, we clear\n // the payee of the child transaction to make it clear\n await db.updateTransaction({ id: transaction.id, payee: null });\n return { id: transaction.id, payee: null };\n }\n\n // The parent has the same transfer payee, so it \"owns\" the\n // transfer logic\n return null;\n }\n }\n\n const id = await db.insertTransaction({\n account: transferredAccount,\n amount: -transaction.amount,\n payee: fromPayee,\n date: transaction.date,\n transfer_id: transaction.id,\n notes: transaction.notes || null,\n cleared: false\n });\n\n await db.updateTransaction({ id: transaction.id, transfer_id: id });\n const categoryCleared = await clearCategory(transaction, transferredAccount);\n\n return {\n id: transaction.id,\n transfer_id: id,\n ...(categoryCleared ? { category: null } : {})\n };\n}\n\nexport async function removeTransfer(transaction) {\n let transferTrans = await db.getTransaction(transaction.transfer_id);\n if (transferTrans.is_child) {\n // If it's a child transaction, we don't delete it because that\n // would invalidate the whole split transaction. Instead of turn\n // it into a normal transaction\n await db.updateTransaction({\n id: transaction.transfer_id,\n transfer_id: null,\n payee: null\n });\n } else {\n await db.deleteTransaction({ id: transaction.transfer_id });\n }\n await db.updateTransaction({ id: transaction.id, transfer_id: null });\n return { id: transaction.id, transfer_id: null };\n}\n\nexport async function updateTransfer(transaction, transferredAccount) {\n let payee = await getPayee(transaction.account);\n\n await db.updateTransaction({\n id: transaction.transfer_id,\n account: transferredAccount,\n // Make sure to update the payee on the other side in case the\n // user moved this transaction into another account\n payee: payee.id,\n date: transaction.date,\n notes: transaction.notes,\n amount: -transaction.amount\n });\n\n const categoryCleared = await clearCategory(transaction, transferredAccount);\n if (categoryCleared) {\n return { id: transaction.id, category: null };\n }\n}\n\nexport async function onInsert(transaction) {\n let transferredAccount = await getTransferredAccount(transaction);\n\n if (transferredAccount) {\n return addTransfer(transaction, transferredAccount);\n }\n}\n\nexport async function onDelete(transaction) {\n if (transaction.transfer_id) {\n await removeTransfer(transaction);\n }\n}\n\nexport async function onUpdate(transaction) {\n const transferredAccount = await getTransferredAccount(transaction);\n\n if (transferredAccount && !transaction.transfer_id) {\n return addTransfer(transaction, transferredAccount);\n }\n\n if (!transferredAccount && transaction.transfer_id) {\n return removeTransfer(transaction);\n }\n\n if (transferredAccount && transaction.transfer_id) {\n return updateTransfer(transaction, transferredAccount);\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","'use strict';\n\nvar Buffer = require('buffer').Buffer;\nvar Transform = require('stream').Transform;\nvar binding = require('./binding');\nvar util = require('util');\nvar assert = require('assert').ok;\nvar kMaxLength = require('buffer').kMaxLength;\nvar kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';\n\n// zlib doesn't provide these, so kludge them in following the same\n// const naming scheme zlib uses.\nbinding.Z_MIN_WINDOWBITS = 8;\nbinding.Z_MAX_WINDOWBITS = 15;\nbinding.Z_DEFAULT_WINDOWBITS = 15;\n\n// fewer than 64 bytes per chunk is stupid.\n// technically it could work with as few as 8, but even 64 bytes\n// is absurdly low. Usually a MB or more is best.\nbinding.Z_MIN_CHUNK = 64;\nbinding.Z_MAX_CHUNK = Infinity;\nbinding.Z_DEFAULT_CHUNK = 16 * 1024;\n\nbinding.Z_MIN_MEMLEVEL = 1;\nbinding.Z_MAX_MEMLEVEL = 9;\nbinding.Z_DEFAULT_MEMLEVEL = 8;\n\nbinding.Z_MIN_LEVEL = -1;\nbinding.Z_MAX_LEVEL = 9;\nbinding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;\n\n// expose all the zlib constants\nvar bkeys = Object.keys(binding);\nfor (var bk = 0; bk < bkeys.length; bk++) {\n var bkey = bkeys[bk];\n if (bkey.match(/^Z/)) {\n Object.defineProperty(exports, bkey, {\n enumerable: true, value: binding[bkey], writable: false\n });\n }\n}\n\n// translation table for return codes.\nvar codes = {\n Z_OK: binding.Z_OK,\n Z_STREAM_END: binding.Z_STREAM_END,\n Z_NEED_DICT: binding.Z_NEED_DICT,\n Z_ERRNO: binding.Z_ERRNO,\n Z_STREAM_ERROR: binding.Z_STREAM_ERROR,\n Z_DATA_ERROR: binding.Z_DATA_ERROR,\n Z_MEM_ERROR: binding.Z_MEM_ERROR,\n Z_BUF_ERROR: binding.Z_BUF_ERROR,\n Z_VERSION_ERROR: binding.Z_VERSION_ERROR\n};\n\nvar ckeys = Object.keys(codes);\nfor (var ck = 0; ck < ckeys.length; ck++) {\n var ckey = ckeys[ck];\n codes[codes[ckey]] = ckey;\n}\n\nObject.defineProperty(exports, 'codes', {\n enumerable: true, value: Object.freeze(codes), writable: false\n});\n\nexports.Deflate = Deflate;\nexports.Inflate = Inflate;\nexports.Gzip = Gzip;\nexports.Gunzip = Gunzip;\nexports.DeflateRaw = DeflateRaw;\nexports.InflateRaw = InflateRaw;\nexports.Unzip = Unzip;\n\nexports.createDeflate = function (o) {\n return new Deflate(o);\n};\n\nexports.createInflate = function (o) {\n return new Inflate(o);\n};\n\nexports.createDeflateRaw = function (o) {\n return new DeflateRaw(o);\n};\n\nexports.createInflateRaw = function (o) {\n return new InflateRaw(o);\n};\n\nexports.createGzip = function (o) {\n return new Gzip(o);\n};\n\nexports.createGunzip = function (o) {\n return new Gunzip(o);\n};\n\nexports.createUnzip = function (o) {\n return new Unzip(o);\n};\n\n// Convenience methods.\n// compress/decompress a string or buffer in one step.\nexports.deflate = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Deflate(opts), buffer, callback);\n};\n\nexports.deflateSync = function (buffer, opts) {\n return zlibBufferSync(new Deflate(opts), buffer);\n};\n\nexports.gzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Gzip(opts), buffer, callback);\n};\n\nexports.gzipSync = function (buffer, opts) {\n return zlibBufferSync(new Gzip(opts), buffer);\n};\n\nexports.deflateRaw = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new DeflateRaw(opts), buffer, callback);\n};\n\nexports.deflateRawSync = function (buffer, opts) {\n return zlibBufferSync(new DeflateRaw(opts), buffer);\n};\n\nexports.unzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Unzip(opts), buffer, callback);\n};\n\nexports.unzipSync = function (buffer, opts) {\n return zlibBufferSync(new Unzip(opts), buffer);\n};\n\nexports.inflate = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Inflate(opts), buffer, callback);\n};\n\nexports.inflateSync = function (buffer, opts) {\n return zlibBufferSync(new Inflate(opts), buffer);\n};\n\nexports.gunzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Gunzip(opts), buffer, callback);\n};\n\nexports.gunzipSync = function (buffer, opts) {\n return zlibBufferSync(new Gunzip(opts), buffer);\n};\n\nexports.inflateRaw = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new InflateRaw(opts), buffer, callback);\n};\n\nexports.inflateRawSync = function (buffer, opts) {\n return zlibBufferSync(new InflateRaw(opts), buffer);\n};\n\nfunction zlibBuffer(engine, buffer, callback) {\n var buffers = [];\n var nread = 0;\n\n engine.on('error', onError);\n engine.on('end', onEnd);\n\n engine.end(buffer);\n flow();\n\n function flow() {\n var chunk;\n while (null !== (chunk = engine.read())) {\n buffers.push(chunk);\n nread += chunk.length;\n }\n engine.once('readable', flow);\n }\n\n function onError(err) {\n engine.removeListener('end', onEnd);\n engine.removeListener('readable', flow);\n callback(err);\n }\n\n function onEnd() {\n var buf;\n var err = null;\n\n if (nread >= kMaxLength) {\n err = new RangeError(kRangeErrorMessage);\n } else {\n buf = Buffer.concat(buffers, nread);\n }\n\n buffers = [];\n engine.close();\n callback(err, buf);\n }\n}\n\nfunction zlibBufferSync(engine, buffer) {\n if (typeof buffer === 'string') buffer = Buffer.from(buffer);\n\n if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');\n\n var flushFlag = engine._finishFlushFlag;\n\n return engine._processChunk(buffer, flushFlag);\n}\n\n// generic zlib\n// minimal 2-byte header\nfunction Deflate(opts) {\n if (!(this instanceof Deflate)) return new Deflate(opts);\n Zlib.call(this, opts, binding.DEFLATE);\n}\n\nfunction Inflate(opts) {\n if (!(this instanceof Inflate)) return new Inflate(opts);\n Zlib.call(this, opts, binding.INFLATE);\n}\n\n// gzip - bigger header, same deflate compression\nfunction Gzip(opts) {\n if (!(this instanceof Gzip)) return new Gzip(opts);\n Zlib.call(this, opts, binding.GZIP);\n}\n\nfunction Gunzip(opts) {\n if (!(this instanceof Gunzip)) return new Gunzip(opts);\n Zlib.call(this, opts, binding.GUNZIP);\n}\n\n// raw - no header\nfunction DeflateRaw(opts) {\n if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);\n Zlib.call(this, opts, binding.DEFLATERAW);\n}\n\nfunction InflateRaw(opts) {\n if (!(this instanceof InflateRaw)) return new InflateRaw(opts);\n Zlib.call(this, opts, binding.INFLATERAW);\n}\n\n// auto-detect header.\nfunction Unzip(opts) {\n if (!(this instanceof Unzip)) return new Unzip(opts);\n Zlib.call(this, opts, binding.UNZIP);\n}\n\nfunction isValidFlushFlag(flag) {\n return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\n\nfunction Zlib(opts, mode) {\n var _this = this;\n\n this._opts = opts = opts || {};\n this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;\n\n Transform.call(this, opts);\n\n if (opts.flush && !isValidFlushFlag(opts.flush)) {\n throw new Error('Invalid flush flag: ' + opts.flush);\n }\n if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {\n throw new Error('Invalid flush flag: ' + opts.finishFlush);\n }\n\n this._flushFlag = opts.flush || binding.Z_NO_FLUSH;\n this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;\n\n if (opts.chunkSize) {\n if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {\n throw new Error('Invalid chunk size: ' + opts.chunkSize);\n }\n }\n\n if (opts.windowBits) {\n if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {\n throw new Error('Invalid windowBits: ' + opts.windowBits);\n }\n }\n\n if (opts.level) {\n if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {\n throw new Error('Invalid compression level: ' + opts.level);\n }\n }\n\n if (opts.memLevel) {\n if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {\n throw new Error('Invalid memLevel: ' + opts.memLevel);\n }\n }\n\n if (opts.strategy) {\n if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {\n throw new Error('Invalid strategy: ' + opts.strategy);\n }\n }\n\n if (opts.dictionary) {\n if (!Buffer.isBuffer(opts.dictionary)) {\n throw new Error('Invalid dictionary: it should be a Buffer instance');\n }\n }\n\n this._handle = new binding.Zlib(mode);\n\n var self = this;\n this._hadError = false;\n this._handle.onerror = function (message, errno) {\n // there is no way to cleanly recover.\n // continuing only obscures problems.\n _close(self);\n self._hadError = true;\n\n var error = new Error(message);\n error.errno = errno;\n error.code = exports.codes[errno];\n self.emit('error', error);\n };\n\n var level = exports.Z_DEFAULT_COMPRESSION;\n if (typeof opts.level === 'number') level = opts.level;\n\n var strategy = exports.Z_DEFAULT_STRATEGY;\n if (typeof opts.strategy === 'number') strategy = opts.strategy;\n\n this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);\n\n this._buffer = Buffer.allocUnsafe(this._chunkSize);\n this._offset = 0;\n this._level = level;\n this._strategy = strategy;\n\n this.once('end', this.close);\n\n Object.defineProperty(this, '_closed', {\n get: function () {\n return !_this._handle;\n },\n configurable: true,\n enumerable: true\n });\n}\n\nutil.inherits(Zlib, Transform);\n\nZlib.prototype.params = function (level, strategy, callback) {\n if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {\n throw new RangeError('Invalid compression level: ' + level);\n }\n if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {\n throw new TypeError('Invalid strategy: ' + strategy);\n }\n\n if (this._level !== level || this._strategy !== strategy) {\n var self = this;\n this.flush(binding.Z_SYNC_FLUSH, function () {\n assert(self._handle, 'zlib binding closed');\n self._handle.params(level, strategy);\n if (!self._hadError) {\n self._level = level;\n self._strategy = strategy;\n if (callback) callback();\n }\n });\n } else {\n process.nextTick(callback);\n }\n};\n\nZlib.prototype.reset = function () {\n assert(this._handle, 'zlib binding closed');\n return this._handle.reset();\n};\n\n// This is the _flush function called by the transform class,\n// internally, when the last chunk has been written.\nZlib.prototype._flush = function (callback) {\n this._transform(Buffer.alloc(0), '', callback);\n};\n\nZlib.prototype.flush = function (kind, callback) {\n var _this2 = this;\n\n var ws = this._writableState;\n\n if (typeof kind === 'function' || kind === undefined && !callback) {\n callback = kind;\n kind = binding.Z_FULL_FLUSH;\n }\n\n if (ws.ended) {\n if (callback) process.nextTick(callback);\n } else if (ws.ending) {\n if (callback) this.once('end', callback);\n } else if (ws.needDrain) {\n if (callback) {\n this.once('drain', function () {\n return _this2.flush(kind, callback);\n });\n }\n } else {\n this._flushFlag = kind;\n this.write(Buffer.alloc(0), '', callback);\n }\n};\n\nZlib.prototype.close = function (callback) {\n _close(this, callback);\n process.nextTick(emitCloseNT, this);\n};\n\nfunction _close(engine, callback) {\n if (callback) process.nextTick(callback);\n\n // Caller may invoke .close after a zlib error (which will null _handle).\n if (!engine._handle) return;\n\n engine._handle.close();\n engine._handle = null;\n}\n\nfunction emitCloseNT(self) {\n self.emit('close');\n}\n\nZlib.prototype._transform = function (chunk, encoding, cb) {\n var flushFlag;\n var ws = this._writableState;\n var ending = ws.ending || ws.ended;\n var last = ending && (!chunk || ws.length === chunk.length);\n\n if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));\n\n if (!this._handle) return cb(new Error('zlib binding closed'));\n\n // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag\n // (or whatever flag was provided using opts.finishFlush).\n // If it's explicitly flushing at some other time, then we use\n // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression\n // goodness.\n if (last) flushFlag = this._finishFlushFlag;else {\n flushFlag = this._flushFlag;\n // once we've flushed the last of the queue, stop flushing and\n // go back to the normal behavior.\n if (chunk.length >= ws.length) {\n this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;\n }\n }\n\n this._processChunk(chunk, flushFlag, cb);\n};\n\nZlib.prototype._processChunk = function (chunk, flushFlag, cb) {\n var availInBefore = chunk && chunk.length;\n var availOutBefore = this._chunkSize - this._offset;\n var inOff = 0;\n\n var self = this;\n\n var async = typeof cb === 'function';\n\n if (!async) {\n var buffers = [];\n var nread = 0;\n\n var error;\n this.on('error', function (er) {\n error = er;\n });\n\n assert(this._handle, 'zlib binding closed');\n do {\n var res = this._handle.writeSync(flushFlag, chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore); // out_len\n } while (!this._hadError && callback(res[0], res[1]));\n\n if (this._hadError) {\n throw error;\n }\n\n if (nread >= kMaxLength) {\n _close(this);\n throw new RangeError(kRangeErrorMessage);\n }\n\n var buf = Buffer.concat(buffers, nread);\n _close(this);\n\n return buf;\n }\n\n assert(this._handle, 'zlib binding closed');\n var req = this._handle.write(flushFlag, chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore); // out_len\n\n req.buffer = chunk;\n req.callback = callback;\n\n function callback(availInAfter, availOutAfter) {\n // When the callback is used in an async write, the callback's\n // context is the `req` object that was created. The req object\n // is === this._handle, and that's why it's important to null\n // out the values after they are done being used. `this._handle`\n // can stay in memory longer than the callback and buffer are needed.\n if (this) {\n this.buffer = null;\n this.callback = null;\n }\n\n if (self._hadError) return;\n\n var have = availOutBefore - availOutAfter;\n assert(have >= 0, 'have should not go down');\n\n if (have > 0) {\n var out = self._buffer.slice(self._offset, self._offset + have);\n self._offset += have;\n // serve some output to the consumer.\n if (async) {\n self.push(out);\n } else {\n buffers.push(out);\n nread += out.length;\n }\n }\n\n // exhausted the output buffer, or used all the input create a new one.\n if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n availOutBefore = self._chunkSize;\n self._offset = 0;\n self._buffer = Buffer.allocUnsafe(self._chunkSize);\n }\n\n if (availOutAfter === 0) {\n // Not actually done. Need to reprocess.\n // Also, update the availInBefore to the availInAfter value,\n // so that if we have to hit it a third (fourth, etc.) time,\n // it'll have the correct byte counts.\n inOff += availInBefore - availInAfter;\n availInBefore = availInAfter;\n\n if (!async) return true;\n\n var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);\n newReq.callback = callback; // this same function\n newReq.buffer = chunk;\n return;\n }\n\n if (!async) return false;\n\n // finished with the chunk.\n cb();\n }\n};\n\nutil.inherits(Deflate, Zlib);\nutil.inherits(Inflate, Zlib);\nutil.inherits(Gzip, Zlib);\nutil.inherits(Gunzip, Zlib);\nutil.inherits(DeflateRaw, Zlib);\nutil.inherits(InflateRaw, Zlib);\nutil.inherits(Unzip, Zlib);","'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","function first(arr) {\n return arr[0];\n}\n\nfunction firstValue(arr) {\n const keys = Object.keys(arr[0]);\n return arr[0][keys[0]];\n}\n\nfunction number(v) {\n if (typeof v === 'number') {\n return v;\n } else if (typeof v === 'string') {\n const parsed = parseFloat(v);\n if (isNaN(parsed)) {\n return 0;\n }\n return parsed;\n }\n\n return 0;\n}\n\nfunction min(x, y) {\n return Math.min(x, y);\n}\n\nfunction max(x, y) {\n return Math.max(x, y);\n}\n\nmodule.exports = {\n first,\n firstValue,\n number,\n min,\n max\n};\n","import * as db from '../db';\nimport Timestamp, { serializeClock, getClock } from '../timestamp';\nimport * as merkle from '../merkle';\n\nexport function rebuildMerkleHash() {\n let rows = db.runQuery('SELECT timestamp FROM messages_crdt', [], true);\n let trie = {};\n\n for (let i = 0; i < rows.length; i++) {\n trie = merkle.insert(trie, Timestamp.parse(rows[i].timestamp));\n }\n\n return {\n numMessages: rows.length,\n trie: trie\n };\n}\n\nexport default async function repairSync() {\n let rebuilt = rebuildMerkleHash();\n let clock = getClock();\n\n // Save it locally\n clock.merkle = rebuilt.trie;\n\n // Persist it in the db\n db.runQuery(\n db.cache('INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)'),\n [serializeClock(clock)]\n );\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * var result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport default function addYears(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMonths(dirtyDate, amount * 12)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * var result = differenceInDays(\n * new Date(2011, 6, 2, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n */\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var dateLeft = toDate(dirtyDateLeft)\n var dateRight = toDate(dirtyDateRight)\n\n var sign = compareAsc(dateLeft, dateRight)\n var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight))\n\n dateLeft.setDate(dateLeft.getDate() - sign * difference)\n\n // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n // If so, result must be decreased by 1 in absolute value\n var isLastDayNotFull = compareAsc(dateLeft, dateRight) === -sign\n var result = sign * (difference - isLastDayNotFull)\n // Prevent negative zero\n return result === 0 ? 0 : result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * var result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nexport default function getDate(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var dayOfMonth = date.getDate()\n return dayOfMonth\n}\n","export type EventType = string | symbol;\n\n// An event handler can take an optional event argument\n// and should not return a value\nexport type Handler = (event?: T) => void;\nexport type WildcardHandler = (type: EventType, event?: any) => void;\n\n// An array of all currently registered event handlers for a type\nexport type EventHandlerList = Array;\nexport type WildCardEventHandlerList = Array;\n\n// A map of event types and their corresponding event handlers.\nexport type EventHandlerMap = Map;\n\nexport interface Emitter {\n\tall: EventHandlerMap;\n\n\ton(type: EventType, handler: Handler): void;\n\ton(type: '*', handler: WildcardHandler): void;\n\n\toff(type: EventType, handler: Handler): void;\n\toff(type: '*', handler: WildcardHandler): void;\n\n\temit(type: EventType, event?: T): void;\n\temit(type: '*', event?: any): void;\n}\n\n/**\n * Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nexport default function mitt(all?: EventHandlerMap): Emitter {\n\tall = all || new Map();\n\n\treturn {\n\n\t\t/**\n\t\t * A Map of event names to registered handler functions.\n\t\t */\n\t\tall,\n\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t * @param {string|symbol} type Type of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton(type: EventType, handler: Handler) {\n\t\t\tconst handlers = all.get(type);\n\t\t\tconst added = handlers && handlers.push(handler);\n\t\t\tif (!added) {\n\t\t\t\tall.set(type, [handler]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t * @param {string|symbol} type Type of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff(type: EventType, handler: Handler) {\n\t\t\tconst handlers = all.get(type);\n\t\t\tif (handlers) {\n\t\t\t\thandlers.splice(handlers.indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * Note: Manually firing \"*\" handlers is not supported.\n\t\t *\n\t\t * @param {string|symbol} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit(type: EventType, evt: T) {\n\t\t\t((all.get(type) || []) as EventHandlerList).slice().map((handler) => { handler(evt); });\n\t\t\t((all.get('*') || []) as WildCardEventHandlerList).slice().map((handler) => { handler(type, evt); });\n\t\t}\n\t};\n}\n","module.exports = {\n fetch: self.fetch,\n fetchBinary: () => {\n throw new Error('fetchBinary not implemented');\n }\n};\n","import toDate from '../../toDate/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var year = date.getUTCFullYear()\n\n var fourthOfJanuaryOfNextYear = new Date(0)\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4)\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0)\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear)\n\n var fourthOfJanuaryOfThisYear = new Date(0)\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4)\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0)\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear)\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year\n } else {\n return year - 1\n }\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted\n * @returns {Date} the new date with the months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * var result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function subMonths(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addMonths(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted\n * @returns {Date} the new date with the days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * var result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport default function subDays(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addDays(dirtyDate, -amount)\n}\n","export function fromPlaidAccountType(type, subtype) {\n switch (type) {\n case 'brokerage':\n case 'investment':\n return 'investment';\n case 'credit':\n return 'credit';\n case 'loan':\n return 'debt';\n case 'other':\n return 'other';\n case 'depository':\n default:\n switch (subtype) {\n case 'money market':\n case 'savings':\n return 'savings';\n case 'cd':\n return 'cd';\n default:\n return 'checking';\n }\n }\n}\n\nexport function prettyAccountType(type) {\n switch (type) {\n case 'checking':\n return 'Checking';\n case 'savings':\n return 'Savings';\n case 'cd':\n return 'CD';\n case 'investment':\n return 'Investment';\n case 'credit':\n return 'Credit Card';\n case 'mortgage':\n return 'Mortgage';\n case 'debt':\n return 'Debt';\n case 'other':\n default:\n return 'Other';\n }\n}\n\nexport function determineOffBudget(type) {\n switch (type) {\n case 'investment':\n case 'mortgage':\n case 'debt':\n case 'other':\n return true;\n default:\n }\n return false;\n}\n","import * as db from '../db';\n\nexport async function createPayee(description) {\n // Check to make sure no payee already exists with exactly the same\n // name\n let row = await db.first(\n `SELECT id FROM payees WHERE LOWER(name) = ? AND tombstone = 0`,\n [description.toLowerCase()]\n );\n\n if (row) {\n return row.id;\n } else {\n return db.insertPayee({ name: description });\n }\n}\n\nexport async function getStartingBalancePayee() {\n let category = await db.first(`\n SELECT * FROM categories\n WHERE is_income = 1 AND\n LOWER(name) = 'starting balances' AND\n tombstone = 0\n `);\n if (category === null) {\n category = await db.first(\n 'SELECT * FROM categories WHERE is_income = 1 AND tombstone = 0'\n );\n }\n\n let id = await createPayee('Starting Balance');\n return {\n id,\n category: category ? category.id : null\n };\n}\n","import toInteger from '../toInteger/index.js'\nimport getUTCWeekYear from '../getUTCWeekYear/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCWeekYear (dirtyDate, dirtyOptions) {\n if (arguments.length < 1) {\n throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n }\n\n var options = dirtyOptions || {}\n var locale = options.locale\n var localeFirstWeekContainsDate = locale &&\n locale.options &&\n locale.options.firstWeekContainsDate\n var defaultFirstWeekContainsDate =\n localeFirstWeekContainsDate == null\n ? 1\n : toInteger(localeFirstWeekContainsDate)\n var firstWeekContainsDate =\n options.firstWeekContainsDate == null\n ? defaultFirstWeekContainsDate\n : toInteger(options.firstWeekContainsDate)\n\n var year = getUTCWeekYear(dirtyDate, dirtyOptions)\n var firstWeek = new Date(0)\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate)\n firstWeek.setUTCHours(0, 0, 0, 0)\n var date = startOfUTCWeek(firstWeek, dirtyOptions)\n return date\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\nimport startOfUTCWeekYear from '../startOfUTCWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCWeek(dirtyDate, options) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var diff =\n startOfUTCWeek(date, options).getTime() -\n startOfUTCWeekYear(date, options).getTime()\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import getUTCISOWeekYear from '../getUTCISOWeekYear/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var year = getUTCISOWeekYear(dirtyDate)\n var fourthOfJanuary = new Date(0)\n fourthOfJanuary.setUTCFullYear(year, 0, 4)\n fourthOfJanuary.setUTCHours(0, 0, 0, 0)\n var date = startOfUTCISOWeek(fourthOfJanuary)\n return date\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\nimport startOfUTCISOWeekYear from '../startOfUTCISOWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCISOWeek(dirtyDate) {\n if (arguments.length < 1) {\n throw new TypeError(\n '1 argument required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var diff =\n startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime()\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import asyncStorage from '../../platform/server/asyncStorage';\nimport * as db from '../db';\nimport { getServer } from '../server-config';\nimport * as bankSync from './sync';\nimport { fromPlaidAccountType } from '../../shared/accounts';\nimport { amountToInteger } from '../../shared/util';\nimport { post } from '../post';\nimport { runMutator } from '../mutators';\nconst uuid = require('../../platform/uuid');\n\nexport async function handoffPublicToken(institution, publicToken) {\n let [[, userId], [, key]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n if (institution == null || !institution.institution_id || !institution.name) {\n throw new Error('Invalid institution object');\n }\n\n let id = uuid.v4Sync();\n\n // Make sure to generate an access token first before inserting it\n // into our local database in case it fails\n await post(getServer().PLAID_SERVER + '/handoff_public_token', {\n userId,\n key,\n item_id: id,\n public_token: publicToken\n });\n\n await runMutator(() =>\n db.insertWithUUID('banks', {\n id,\n bank_id: institution.institution_id,\n name: institution.name\n })\n );\n\n return id;\n}\n\nexport async function addAccounts(bankId, accountIds, offbudgetIds = []) {\n let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n // Get all the available accounts\n let accounts = await bankSync.getAccounts(userId, userKey, bankId);\n\n // Only add the selected accounts\n accounts = accounts.filter(acct => accountIds.includes(acct.account_id));\n\n return Promise.all(\n accounts.map(async acct => {\n let id = await runMutator(async () => {\n let id = await db.insertAccount({\n account_id: acct.account_id,\n name: acct.name,\n official_name: acct.official_name,\n type: fromPlaidAccountType(acct.type),\n balance_current: amountToInteger(acct.balances.current),\n mask: acct.mask,\n bank: bankId,\n offbudget: offbudgetIds.includes(acct.account_id) ? 1 : 0\n });\n\n // Create a transfer payee\n await db.insertPayee({\n name: '',\n transfer_acct: id\n });\n\n return id;\n });\n\n // Do an initial sync\n await bankSync.syncAccount(userId, userKey, id, acct.account_id, bankId);\n\n return id;\n })\n );\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar constants_1 = require(\"./constants\");\nvar getBigInt_1 = require(\"./getBigInt\");\nvar S_IFMT = constants_1.constants.S_IFMT, S_IFDIR = constants_1.constants.S_IFDIR, S_IFREG = constants_1.constants.S_IFREG, S_IFBLK = constants_1.constants.S_IFBLK, S_IFCHR = constants_1.constants.S_IFCHR, S_IFLNK = constants_1.constants.S_IFLNK, S_IFIFO = constants_1.constants.S_IFIFO, S_IFSOCK = constants_1.constants.S_IFSOCK;\n/**\n * Statistics about a file/directory, like `fs.Stats`.\n */\nvar Stats = /** @class */ (function () {\n function Stats() {\n }\n Stats.build = function (node, bigint) {\n if (bigint === void 0) { bigint = false; }\n var stats = new Stats();\n var uid = node.uid, gid = node.gid, atime = node.atime, mtime = node.mtime, ctime = node.ctime;\n var getStatNumber = !bigint ? function (number) { return number; } : getBigInt_1.default;\n // Copy all values on Stats from Node, so that if Node values\n // change, values on Stats would still be the old ones,\n // just like in Node fs.\n stats.uid = getStatNumber(uid);\n stats.gid = getStatNumber(gid);\n stats.rdev = getStatNumber(0);\n stats.blksize = getStatNumber(4096);\n stats.ino = getStatNumber(node.ino);\n stats.size = getStatNumber(node.getSize());\n stats.blocks = getStatNumber(1);\n stats.atime = atime;\n stats.mtime = mtime;\n stats.ctime = ctime;\n stats.birthtime = ctime;\n stats.atimeMs = getStatNumber(atime.getTime());\n stats.mtimeMs = getStatNumber(mtime.getTime());\n var ctimeMs = getStatNumber(ctime.getTime());\n stats.ctimeMs = ctimeMs;\n stats.birthtimeMs = ctimeMs;\n stats.dev = getStatNumber(0);\n stats.mode = getStatNumber(node.mode);\n stats.nlink = getStatNumber(node.nlink);\n return stats;\n };\n Stats.prototype._checkModeProperty = function (property) {\n return (Number(this.mode) & S_IFMT) === property;\n };\n Stats.prototype.isDirectory = function () {\n return this._checkModeProperty(S_IFDIR);\n };\n Stats.prototype.isFile = function () {\n return this._checkModeProperty(S_IFREG);\n };\n Stats.prototype.isBlockDevice = function () {\n return this._checkModeProperty(S_IFBLK);\n };\n Stats.prototype.isCharacterDevice = function () {\n return this._checkModeProperty(S_IFCHR);\n };\n Stats.prototype.isSymbolicLink = function () {\n return this._checkModeProperty(S_IFLNK);\n };\n Stats.prototype.isFIFO = function () {\n return this._checkModeProperty(S_IFIFO);\n };\n Stats.prototype.isSocket = function () {\n return this._checkModeProperty(S_IFSOCK);\n };\n return Stats;\n}());\nexports.Stats = Stats;\nexports.default = Stats;\n","\"use strict\";\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar buffer_1 = require(\"buffer\");\nexports.Buffer = buffer_1.Buffer;\nfunction bufferV0P12Ponyfill(arg0) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return new (buffer_1.Buffer.bind.apply(buffer_1.Buffer, __spreadArrays([void 0, arg0], args)))();\n}\nvar bufferAllocUnsafe = buffer_1.Buffer.allocUnsafe || bufferV0P12Ponyfill;\nexports.bufferAllocUnsafe = bufferAllocUnsafe;\nvar bufferFrom = buffer_1.Buffer.from || bufferV0P12Ponyfill;\nexports.bufferFrom = bufferFrom;\n","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n","// source: sync.proto\n/**\n * @fileoverview\n * @enhanceable\n * @suppress {messageConventions} JS Compiler reports an error if a variable or\n * field starts with 'MSG_' and isn't a translatable message.\n * @public\n */\n// GENERATED CODE -- DO NOT EDIT!\n\nvar jspb = require('google-protobuf');\nvar goog = jspb;\nvar global = globalThis;\n\ngoog.exportSymbol('proto.EncryptedData', null, global);\ngoog.exportSymbol('proto.Message', null, global);\ngoog.exportSymbol('proto.MessageEnvelope', null, global);\ngoog.exportSymbol('proto.SyncRequest', null, global);\ngoog.exportSymbol('proto.SyncResponse', null, global);\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.EncryptedData = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.EncryptedData, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.EncryptedData.displayName = 'proto.EncryptedData';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.Message = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.Message, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.Message.displayName = 'proto.Message';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.MessageEnvelope = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.MessageEnvelope, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.MessageEnvelope.displayName = 'proto.MessageEnvelope';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SyncRequest = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.SyncRequest.repeatedFields_, null);\n};\ngoog.inherits(proto.SyncRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.SyncRequest.displayName = 'proto.SyncRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SyncResponse = function(opt_data) {\n jspb.Message.initialize(this, opt_data, 0, -1, proto.SyncResponse.repeatedFields_, null);\n};\ngoog.inherits(proto.SyncResponse, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n /**\n * @public\n * @override\n */\n proto.SyncResponse.displayName = 'proto.SyncResponse';\n}\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.EncryptedData.prototype.toObject = function(opt_includeInstance) {\n return proto.EncryptedData.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.EncryptedData} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.EncryptedData.toObject = function(includeInstance, msg) {\n var f, obj = {\n iv: msg.getIv_asB64(),\n authtag: msg.getAuthtag_asB64(),\n data: msg.getData_asB64()\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.EncryptedData}\n */\nproto.EncryptedData.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.EncryptedData;\n return proto.EncryptedData.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.EncryptedData} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.EncryptedData}\n */\nproto.EncryptedData.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {!Uint8Array} */ (reader.readBytes());\n msg.setIv(value);\n break;\n case 2:\n var value = /** @type {!Uint8Array} */ (reader.readBytes());\n msg.setAuthtag(value);\n break;\n case 3:\n var value = /** @type {!Uint8Array} */ (reader.readBytes());\n msg.setData(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.EncryptedData.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.EncryptedData} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.EncryptedData.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getIv_asU8();\n if (f.length > 0) {\n writer.writeBytes(\n 1,\n f\n );\n }\n f = message.getAuthtag_asU8();\n if (f.length > 0) {\n writer.writeBytes(\n 2,\n f\n );\n }\n f = message.getData_asU8();\n if (f.length > 0) {\n writer.writeBytes(\n 3,\n f\n );\n }\n};\n\n\n/**\n * optional bytes iv = 1;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getIv = function() {\n return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * optional bytes iv = 1;\n * This is a type-conversion wrapper around `getIv()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getIv_asB64 = function() {\n return /** @type {string} */ (jspb.Message.bytesAsB64(\n this.getIv()));\n};\n\n\n/**\n * optional bytes iv = 1;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getIv()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getIv_asU8 = function() {\n return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n this.getIv()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setIv = function(value) {\n return jspb.Message.setProto3BytesField(this, 1, value);\n};\n\n\n/**\n * optional bytes authTag = 2;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getAuthtag = function() {\n return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * optional bytes authTag = 2;\n * This is a type-conversion wrapper around `getAuthtag()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getAuthtag_asB64 = function() {\n return /** @type {string} */ (jspb.Message.bytesAsB64(\n this.getAuthtag()));\n};\n\n\n/**\n * optional bytes authTag = 2;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getAuthtag()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getAuthtag_asU8 = function() {\n return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n this.getAuthtag()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setAuthtag = function(value) {\n return jspb.Message.setProto3BytesField(this, 2, value);\n};\n\n\n/**\n * optional bytes data = 3;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getData = function() {\n return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * optional bytes data = 3;\n * This is a type-conversion wrapper around `getData()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getData_asB64 = function() {\n return /** @type {string} */ (jspb.Message.bytesAsB64(\n this.getData()));\n};\n\n\n/**\n * optional bytes data = 3;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getData()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getData_asU8 = function() {\n return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n this.getData()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setData = function(value) {\n return jspb.Message.setProto3BytesField(this, 3, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.Message.prototype.toObject = function(opt_includeInstance) {\n return proto.Message.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.Message} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Message.toObject = function(includeInstance, msg) {\n var f, obj = {\n dataset: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n row: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n column: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\n value: jspb.Message.getFieldWithDefault(msg, 4, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.Message}\n */\nproto.Message.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.Message;\n return proto.Message.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.Message} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.Message}\n */\nproto.Message.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setDataset(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setRow(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setColumn(value);\n break;\n case 4:\n var value = /** @type {string} */ (reader.readString());\n msg.setValue(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.Message.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.Message.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.Message} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Message.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getDataset();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getRow();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getColumn();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n f = message.getValue();\n if (f.length > 0) {\n writer.writeString(\n 4,\n f\n );\n }\n};\n\n\n/**\n * optional string dataset = 1;\n * @return {string}\n */\nproto.Message.prototype.getDataset = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setDataset = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string row = 2;\n * @return {string}\n */\nproto.Message.prototype.getRow = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setRow = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string column = 3;\n * @return {string}\n */\nproto.Message.prototype.getColumn = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setColumn = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional string value = 4;\n * @return {string}\n */\nproto.Message.prototype.getValue = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setValue = function(value) {\n return jspb.Message.setProto3StringField(this, 4, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.MessageEnvelope.prototype.toObject = function(opt_includeInstance) {\n return proto.MessageEnvelope.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.MessageEnvelope} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.MessageEnvelope.toObject = function(includeInstance, msg) {\n var f, obj = {\n timestamp: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n isencrypted: jspb.Message.getBooleanFieldWithDefault(msg, 2, false),\n content: msg.getContent_asB64()\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.MessageEnvelope}\n */\nproto.MessageEnvelope.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.MessageEnvelope;\n return proto.MessageEnvelope.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.MessageEnvelope} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.MessageEnvelope}\n */\nproto.MessageEnvelope.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = /** @type {string} */ (reader.readString());\n msg.setTimestamp(value);\n break;\n case 2:\n var value = /** @type {boolean} */ (reader.readBool());\n msg.setIsencrypted(value);\n break;\n case 3:\n var value = /** @type {!Uint8Array} */ (reader.readBytes());\n msg.setContent(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.MessageEnvelope.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.MessageEnvelope.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.MessageEnvelope} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.MessageEnvelope.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getTimestamp();\n if (f.length > 0) {\n writer.writeString(\n 1,\n f\n );\n }\n f = message.getIsencrypted();\n if (f) {\n writer.writeBool(\n 2,\n f\n );\n }\n f = message.getContent_asU8();\n if (f.length > 0) {\n writer.writeBytes(\n 3,\n f\n );\n }\n};\n\n\n/**\n * optional string timestamp = 1;\n * @return {string}\n */\nproto.MessageEnvelope.prototype.getTimestamp = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setTimestamp = function(value) {\n return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional bool isEncrypted = 2;\n * @return {boolean}\n */\nproto.MessageEnvelope.prototype.getIsencrypted = function() {\n return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false));\n};\n\n\n/**\n * @param {boolean} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setIsencrypted = function(value) {\n return jspb.Message.setProto3BooleanField(this, 2, value);\n};\n\n\n/**\n * optional bytes content = 3;\n * @return {!(string|Uint8Array)}\n */\nproto.MessageEnvelope.prototype.getContent = function() {\n return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * optional bytes content = 3;\n * This is a type-conversion wrapper around `getContent()`\n * @return {string}\n */\nproto.MessageEnvelope.prototype.getContent_asB64 = function() {\n return /** @type {string} */ (jspb.Message.bytesAsB64(\n this.getContent()));\n};\n\n\n/**\n * optional bytes content = 3;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getContent()`\n * @return {!Uint8Array}\n */\nproto.MessageEnvelope.prototype.getContent_asU8 = function() {\n return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n this.getContent()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setContent = function(value) {\n return jspb.Message.setProto3BytesField(this, 3, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.SyncRequest.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SyncRequest.prototype.toObject = function(opt_includeInstance) {\n return proto.SyncRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.SyncRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncRequest.toObject = function(includeInstance, msg) {\n var f, obj = {\n messagesList: jspb.Message.toObjectList(msg.getMessagesList(),\n proto.MessageEnvelope.toObject, includeInstance),\n fileid: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n groupid: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\n keyid: jspb.Message.getFieldWithDefault(msg, 5, \"\"),\n since: jspb.Message.getFieldWithDefault(msg, 6, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SyncRequest}\n */\nproto.SyncRequest.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.SyncRequest;\n return proto.SyncRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SyncRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SyncRequest}\n */\nproto.SyncRequest.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.MessageEnvelope;\n reader.readMessage(value,proto.MessageEnvelope.deserializeBinaryFromReader);\n msg.addMessages(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setFileid(value);\n break;\n case 3:\n var value = /** @type {string} */ (reader.readString());\n msg.setGroupid(value);\n break;\n case 5:\n var value = /** @type {string} */ (reader.readString());\n msg.setKeyid(value);\n break;\n case 6:\n var value = /** @type {string} */ (reader.readString());\n msg.setSince(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SyncRequest.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.SyncRequest.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SyncRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncRequest.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getMessagesList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.MessageEnvelope.serializeBinaryToWriter\n );\n }\n f = message.getFileid();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n f = message.getGroupid();\n if (f.length > 0) {\n writer.writeString(\n 3,\n f\n );\n }\n f = message.getKeyid();\n if (f.length > 0) {\n writer.writeString(\n 5,\n f\n );\n }\n f = message.getSince();\n if (f.length > 0) {\n writer.writeString(\n 6,\n f\n );\n }\n};\n\n\n/**\n * repeated MessageEnvelope messages = 1;\n * @return {!Array}\n */\nproto.SyncRequest.prototype.getMessagesList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.MessageEnvelope, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.SyncRequest} returns this\n*/\nproto.SyncRequest.prototype.setMessagesList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.MessageEnvelope=} opt_value\n * @param {number=} opt_index\n * @return {!proto.MessageEnvelope}\n */\nproto.SyncRequest.prototype.addMessages = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.MessageEnvelope, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.clearMessagesList = function() {\n return this.setMessagesList([]);\n};\n\n\n/**\n * optional string fileId = 2;\n * @return {string}\n */\nproto.SyncRequest.prototype.getFileid = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setFileid = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string groupId = 3;\n * @return {string}\n */\nproto.SyncRequest.prototype.getGroupid = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setGroupid = function(value) {\n return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional string keyId = 5;\n * @return {string}\n */\nproto.SyncRequest.prototype.getKeyid = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setKeyid = function(value) {\n return jspb.Message.setProto3StringField(this, 5, value);\n};\n\n\n/**\n * optional string since = 6;\n * @return {string}\n */\nproto.SyncRequest.prototype.getSince = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setSince = function(value) {\n return jspb.Message.setProto3StringField(this, 6, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array}\n * @const\n */\nproto.SyncResponse.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_, eg, foo.pb_default.\n * For the list of reserved names please see:\n * net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n * JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SyncResponse.prototype.toObject = function(opt_includeInstance) {\n return proto.SyncResponse.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n * the JSPB instance for transitional soy proto support:\n * http://goto/soy-param-migration\n * @param {!proto.SyncResponse} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncResponse.toObject = function(includeInstance, msg) {\n var f, obj = {\n messagesList: jspb.Message.toObjectList(msg.getMessagesList(),\n proto.MessageEnvelope.toObject, includeInstance),\n merkle: jspb.Message.getFieldWithDefault(msg, 2, \"\")\n };\n\n if (includeInstance) {\n obj.$jspbMessageInstance = msg;\n }\n return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SyncResponse}\n */\nproto.SyncResponse.deserializeBinary = function(bytes) {\n var reader = new jspb.BinaryReader(bytes);\n var msg = new proto.SyncResponse;\n return proto.SyncResponse.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SyncResponse} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SyncResponse}\n */\nproto.SyncResponse.deserializeBinaryFromReader = function(msg, reader) {\n while (reader.nextField()) {\n if (reader.isEndGroup()) {\n break;\n }\n var field = reader.getFieldNumber();\n switch (field) {\n case 1:\n var value = new proto.MessageEnvelope;\n reader.readMessage(value,proto.MessageEnvelope.deserializeBinaryFromReader);\n msg.addMessages(value);\n break;\n case 2:\n var value = /** @type {string} */ (reader.readString());\n msg.setMerkle(value);\n break;\n default:\n reader.skipField();\n break;\n }\n }\n return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SyncResponse.prototype.serializeBinary = function() {\n var writer = new jspb.BinaryWriter();\n proto.SyncResponse.serializeBinaryToWriter(this, writer);\n return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SyncResponse} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncResponse.serializeBinaryToWriter = function(message, writer) {\n var f = undefined;\n f = message.getMessagesList();\n if (f.length > 0) {\n writer.writeRepeatedMessage(\n 1,\n f,\n proto.MessageEnvelope.serializeBinaryToWriter\n );\n }\n f = message.getMerkle();\n if (f.length > 0) {\n writer.writeString(\n 2,\n f\n );\n }\n};\n\n\n/**\n * repeated MessageEnvelope messages = 1;\n * @return {!Array}\n */\nproto.SyncResponse.prototype.getMessagesList = function() {\n return /** @type{!Array} */ (\n jspb.Message.getRepeatedWrapperField(this, proto.MessageEnvelope, 1));\n};\n\n\n/**\n * @param {!Array} value\n * @return {!proto.SyncResponse} returns this\n*/\nproto.SyncResponse.prototype.setMessagesList = function(value) {\n return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.MessageEnvelope=} opt_value\n * @param {number=} opt_index\n * @return {!proto.MessageEnvelope}\n */\nproto.SyncResponse.prototype.addMessages = function(opt_value, opt_index) {\n return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.MessageEnvelope, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.SyncResponse} returns this\n */\nproto.SyncResponse.prototype.clearMessagesList = function() {\n return this.setMessagesList([]);\n};\n\n\n/**\n * optional string merkle = 2;\n * @return {string}\n */\nproto.SyncResponse.prototype.getMerkle = function() {\n return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncResponse} returns this\n */\nproto.SyncResponse.prototype.setMerkle = function(value) {\n return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\ngoog.object.extend(exports, proto);\n","exports.require = function() {\n var fs = require(\"fs\");\n if (process.versions['electron']) {\n\t try {\n\t originalFs = require(\"original-fs\");\n\t if (Object.keys(originalFs).length > 0) {\n\t fs = originalFs;\n }\n\t } catch (e) {}\n }\n return fs\n};\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * var result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var date = toDate(dirtyDate)\n var dateToCompare = toDate(dirtyDateToCompare)\n return date.getTime() > dateToCompare.getTime()\n}\n","// TODO: comment on why it works this way\n\nlet send;\n\nmodule.exports = { send };\n","import fs from '../../platform/server/fs';\nimport * as sqlite from '../../platform/server/sqlite';\n\n// We have to bundle in JS migrations manually to avoid having to `eval`\n// them which doesn't play well with CSP. There isn't great, and eventually\n// we can remove this migration.\nimport m1632571489012 from '../../../migrations/1632571489012_remove_cache.js';\n\nconst uuid = require('../../platform/uuid');\n\nlet MIGRATIONS_DIR = fs.migrationsPath;\n\nlet javascriptMigrations = {\n 1632571489012: m1632571489012\n};\n\nexport async function withMigrationsDir(dir, func) {\n let oldDir = MIGRATIONS_DIR;\n MIGRATIONS_DIR = dir;\n await func();\n MIGRATIONS_DIR = oldDir;\n}\n\nexport function getMigrationsDir() {\n return MIGRATIONS_DIR;\n}\n\nfunction getMigrationId(name) {\n return parseInt(name.match(/^(\\d)+/)[0]);\n}\n\nexport function getUpMigration(id, names) {\n for (let m of names) {\n if (getMigrationId(m) === id) {\n return m;\n }\n }\n}\n\nexport async function getAppliedMigrations(db) {\n const rows = await sqlite.runQuery(\n db,\n 'SELECT * FROM __migrations__ ORDER BY id ASC',\n [],\n true\n );\n return rows.map(row => row.id);\n}\n\nexport async function getMigrationList(migrationsDir) {\n const files = await fs.listDir(migrationsDir);\n return files\n .filter(name => name.match(/(\\.sql|\\.js)$/))\n .sort((m1, m2) => {\n const id1 = getMigrationId(m1);\n const id2 = getMigrationId(m2);\n if (id1 < id2) {\n return -1;\n } else if (id1 > id2) {\n return 1;\n }\n return 0;\n });\n}\n\nexport function getPending(appliedIds, all) {\n return all.filter(name => {\n const id = getMigrationId(name);\n return appliedIds.indexOf(id) === -1;\n });\n}\n\nasync function applyJavaScript(db, id) {\n const dbInterface = {\n runQuery: (query, params, fetchAll) =>\n sqlite.runQuery(db, query, params, fetchAll),\n execQuery: query => sqlite.execQuery(db, query),\n transaction: func => sqlite.transaction(db, func)\n };\n\n if (javascriptMigrations[id] == null) {\n throw new Error('Could not find JS migration code to run for ' + id);\n }\n\n let run = javascriptMigrations[id];\n return run(dbInterface, () => uuid.v4Sync());\n}\n\nasync function applySql(db, sql) {\n try {\n await sqlite.execQuery(db, sql);\n } catch (e) {\n console.log('Error applying sql:', sql);\n throw e;\n }\n}\n\nexport async function applyMigration(db, name, migrationsDir) {\n const code = await fs.readFile(fs.join(migrationsDir, name));\n if (name.match(/\\.js$/)) {\n await applyJavaScript(db, getMigrationId(name));\n } else {\n await applySql(db, code);\n }\n await sqlite.runQuery(db, 'INSERT INTO __migrations__ (id) VALUES (?)', [\n getMigrationId(name)\n ]);\n}\n\nfunction checkDatabaseValidity(appliedIds, available) {\n for (let i = 0; i < appliedIds.length; i++) {\n if (\n i >= available.length ||\n appliedIds[i] !== getMigrationId(available[i])\n ) {\n throw new Error('out-of-sync-migrations');\n }\n }\n}\n\nexport async function migrate(db) {\n let appliedIds = await getAppliedMigrations(db);\n let available = await getMigrationList(MIGRATIONS_DIR);\n\n checkDatabaseValidity(appliedIds, available);\n\n const pending = getPending(appliedIds, available);\n\n for (let migration of pending) {\n await applyMigration(db, migration, MIGRATIONS_DIR);\n }\n\n return pending;\n}\n","export default async function runMigration(db, uuid) {\n function getValue(node) {\n return node.expr != null ? node.expr : node.cachedValue;\n }\n\n db.execQuery(`\nCREATE TABLE zero_budget_months\n (id TEXT PRIMARY KEY,\n buffered INTEGER DEFAULT 0); \n\nCREATE TABLE zero_budgets\n (id TEXT PRIMARY KEY,\n month INTEGER,\n category TEXT,\n amount INTEGER DEFAULT 0,\n carryover INTEGER DEFAULT 0);\n\nCREATE TABLE reflect_budgets\n (id TEXT PRIMARY KEY,\n month INTEGER,\n category TEXT,\n amount INTEGER DEFAULT 0,\n carryover INTEGER DEFAULT 0);\n\nCREATE TABLE notes\n (id TEXT PRIMARY KEY,\n note TEXT);\n\nCREATE TABLE kvcache (key TEXT PRIMARY KEY, value TEXT);\nCREATE TABLE kvcache_key (id INTEGER PRIMARY KEY, key REAL);\n`);\n\n // Migrate budget amounts and carryover\n let budget = db.runQuery(\n `SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!budget-%'`,\n [],\n true\n );\n db.transaction(() => {\n budget.map(monthBudget => {\n let match = monthBudget.name.match(\n /^(budget-report|budget)(\\d+)!budget-(.+)$/\n );\n if (match == null) {\n console.log('Warning: invalid budget month name', monthBudget.name);\n return;\n }\n\n let type = match[1];\n let month = match[2].slice(0, 4) + '-' + match[2].slice(4);\n let dbmonth = parseInt(match[2]);\n let cat = match[3];\n\n let amount = parseInt(getValue(monthBudget));\n if (isNaN(amount)) {\n amount = 0;\n }\n\n let sheetName = monthBudget.name.split('!')[0];\n let carryover = db.runQuery(\n 'SELECT * FROM spreadsheet_cells WHERE name = ?',\n [`${sheetName}!carryover-${cat}`],\n true\n );\n\n let table = type === 'budget-report' ? 'reflect_budgets' : 'zero_budgets';\n db.runQuery(\n `INSERT INTO ${table} (id, month, category, amount, carryover) VALUES (?, ?, ?, ?, ?)`,\n [\n `${month}-${cat}`,\n dbmonth,\n cat,\n amount,\n carryover.length > 0 && getValue(carryover[0]) === 'true' ? 1 : 0\n ]\n );\n });\n });\n\n // Migrate buffers\n let buffers = db.runQuery(\n `SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!buffered'`,\n [],\n true\n );\n db.transaction(() => {\n buffers.map(buffer => {\n let match = buffer.name.match(/^budget(\\d+)!buffered$/);\n if (match) {\n let month = match[1].slice(0, 4) + '-' + match[1].slice(4);\n let amount = parseInt(getValue(buffer));\n if (isNaN(amount)) {\n amount = 0;\n }\n\n db.runQuery(\n `INSERT INTO zero_budget_months (id, buffered) VALUES (?, ?)`,\n [month, amount]\n );\n }\n });\n });\n\n // Migrate notes\n let notes = db.runQuery(\n `SELECT * FROM spreadsheet_cells WHERE name LIKE 'notes!%'`,\n [],\n true\n );\n\n let parseNote = str => {\n try {\n let value = JSON.parse(str);\n return value && value !== '' ? value : null;\n } catch (e) {\n return null;\n }\n };\n\n db.transaction(() => {\n notes.forEach(note => {\n let parsed = parseNote(getValue(note));\n if (parsed) {\n let [, id] = note.name.split('!');\n db.runQuery(`INSERT INTO notes (id, note) VALUES (?, ?)`, [id, parsed]);\n }\n });\n });\n\n db.execQuery(`\n DROP TABLE spreadsheet_cells;\n ANALYZE;\n VACUUM;\n `);\n}\n","import { quoteAlias } from './compiler';\n\nfunction selectFields(fields) {\n return Object.keys(fields)\n .map(as => {\n let field = fields[as];\n let needsAs = field !== as;\n // If it's just an identifier, we automatically prefix it with\n // `_.` which makes sure it references the root table\n if (!field.match(/[ .]/)) {\n field = `_.${field}`;\n }\n return needsAs ? `${field} AS ${quoteAlias(as)}` : `${field}`;\n })\n .join(', ');\n}\n\nexport function makeViews(schema, schemaConfig) {\n let views = schemaConfig.views;\n let viewStrs = [];\n\n Object.keys(views).forEach(table => {\n let { fields: fieldMappings = {}, ...tableViews } = views[table];\n\n let publicFields = Object.fromEntries(\n Object.keys(schema[table]).map(name => [name, name])\n );\n let internalFields = { ...publicFields, ...fieldMappings };\n\n Object.keys(tableViews).forEach(viewName => {\n let publicMaker = overrides => {\n let fields = { ...publicFields, ...overrides };\n return selectFields(fields);\n };\n let internalMaker = overrides => {\n let fields = { ...internalFields, ...overrides };\n return selectFields(fields);\n };\n\n let sql;\n if (typeof tableViews[viewName] === 'function') {\n sql = tableViews[viewName](internalMaker, publicMaker);\n } else {\n sql = tableViews[viewName];\n }\n sql = sql.trim().replace(/;$/, '');\n\n viewStrs.push(`\n DROP VIEW IF EXISTS ${viewName};\n CREATE VIEW ${viewName} AS ${sql};\n `);\n });\n });\n\n return viewStrs.join('\\n');\n}\n","import md5 from 'md5';\nimport * as migrations from './migrate/migrations';\nimport * as db from './db';\nimport { schema, schemaConfig } from './aql/schema';\nimport { makeViews } from './aql/views';\n\n// Managing the init/update process\n\nasync function runMigrations() {\n await migrations.migrate(db.getDatabase());\n}\n\nexport async function updateViews() {\n let hashKey = 'view-hash';\n let row = await db.first('SELECT value FROM __meta__ WHERE key = ?', [\n hashKey\n ]);\n let { value: hash } = row || {};\n\n let views = makeViews(schema, schemaConfig);\n let currentHash = md5(views);\n\n if (hash !== currentHash) {\n await db.execQuery(views);\n await db.runQuery(\n 'INSERT OR REPLACE INTO __meta__ (key, value) VALUES (?, ?)',\n [hashKey, currentHash]\n );\n }\n}\n\nexport async function updateVersion() {\n await runMigrations();\n await updateViews();\n}\n","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n constructor (options) {\n if (typeof options === 'number')\n options = { max: options }\n\n if (!options)\n options = {}\n\n if (options.max && (typeof options.max !== 'number' || options.max < 0))\n throw new TypeError('max must be a non-negative number')\n // Kind of weird to have a default max of Infinity, but oh well.\n const max = this[MAX] = options.max || Infinity\n\n const lc = options.length || naiveLength\n this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n this[ALLOW_STALE] = options.stale || false\n if (options.maxAge && typeof options.maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n this[MAX_AGE] = options.maxAge || 0\n this[DISPOSE] = options.dispose\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n this.reset()\n }\n\n // resize the cache when the max changes.\n set max (mL) {\n if (typeof mL !== 'number' || mL < 0)\n throw new TypeError('max must be a non-negative number')\n\n this[MAX] = mL || Infinity\n trim(this)\n }\n get max () {\n return this[MAX]\n }\n\n set allowStale (allowStale) {\n this[ALLOW_STALE] = !!allowStale\n }\n get allowStale () {\n return this[ALLOW_STALE]\n }\n\n set maxAge (mA) {\n if (typeof mA !== 'number')\n throw new TypeError('maxAge must be a non-negative number')\n\n this[MAX_AGE] = mA\n trim(this)\n }\n get maxAge () {\n return this[MAX_AGE]\n }\n\n // resize the cache when the lengthCalculator changes.\n set lengthCalculator (lC) {\n if (typeof lC !== 'function')\n lC = naiveLength\n\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC\n this[LENGTH] = 0\n this[LRU_LIST].forEach(hit => {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n this[LENGTH] += hit.length\n })\n }\n trim(this)\n }\n get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n get length () { return this[LENGTH] }\n get itemCount () { return this[LRU_LIST].length }\n\n rforEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].tail; walker !== null;) {\n const prev = walker.prev\n forEachStep(this, fn, walker, thisp)\n walker = prev\n }\n }\n\n forEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].head; walker !== null;) {\n const next = walker.next\n forEachStep(this, fn, walker, thisp)\n walker = next\n }\n }\n\n keys () {\n return this[LRU_LIST].toArray().map(k => k.key)\n }\n\n values () {\n return this[LRU_LIST].toArray().map(k => k.value)\n }\n\n reset () {\n if (this[DISPOSE] &&\n this[LRU_LIST] &&\n this[LRU_LIST].length) {\n this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n }\n\n this[CACHE] = new Map() // hash of items by key\n this[LRU_LIST] = new Yallist() // list of items in order of use recency\n this[LENGTH] = 0 // length of items in the list\n }\n\n dump () {\n return this[LRU_LIST].map(hit =>\n isStale(this, hit) ? false : {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }).toArray().filter(h => h)\n }\n\n dumpLru () {\n return this[LRU_LIST]\n }\n\n set (key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE]\n\n if (maxAge && typeof maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n\n const now = maxAge ? Date.now() : 0\n const len = this[LENGTH_CALCULATOR](value, key)\n\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key))\n return false\n }\n\n const node = this[CACHE].get(key)\n const item = node.value\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET])\n this[DISPOSE](key, item.value)\n }\n\n item.now = now\n item.maxAge = maxAge\n item.value = value\n this[LENGTH] += len - item.length\n item.length = len\n this.get(key)\n trim(this)\n return true\n }\n\n const hit = new Entry(key, value, len, now, maxAge)\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE])\n this[DISPOSE](key, value)\n\n return false\n }\n\n this[LENGTH] += hit.length\n this[LRU_LIST].unshift(hit)\n this[CACHE].set(key, this[LRU_LIST].head)\n trim(this)\n return true\n }\n\n has (key) {\n if (!this[CACHE].has(key)) return false\n const hit = this[CACHE].get(key).value\n return !isStale(this, hit)\n }\n\n get (key) {\n return get(this, key, true)\n }\n\n peek (key) {\n return get(this, key, false)\n }\n\n pop () {\n const node = this[LRU_LIST].tail\n if (!node)\n return null\n\n del(this, node)\n return node.value\n }\n\n del (key) {\n del(this, this[CACHE].get(key))\n }\n\n load (arr) {\n // reset the cache\n this.reset()\n\n const now = Date.now()\n // A previous serialized cache has the most recent items first\n for (let l = arr.length - 1; l >= 0; l--) {\n const hit = arr[l]\n const expiresAt = hit.e || 0\n if (expiresAt === 0)\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v)\n else {\n const maxAge = expiresAt - now\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge)\n }\n }\n }\n }\n\n prune () {\n this[CACHE].forEach((value, key) => get(this, key, false))\n }\n}\n\nconst get = (self, key, doUse) => {\n const node = self[CACHE].get(key)\n if (node) {\n const hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n return undefined\n } else {\n if (doUse) {\n if (self[UPDATE_AGE_ON_GET])\n node.value.now = Date.now()\n self[LRU_LIST].unshiftNode(node)\n }\n }\n return hit.value\n }\n}\n\nconst isStale = (self, hit) => {\n if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n return false\n\n const diff = Date.now() - hit.now\n return hit.maxAge ? diff > hit.maxAge\n : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n if (self[LENGTH] > self[MAX]) {\n for (let walker = self[LRU_LIST].tail;\n self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n const prev = walker.prev\n del(self, walker)\n walker = prev\n }\n }\n}\n\nconst del = (self, node) => {\n if (node) {\n const hit = node.value\n if (self[DISPOSE])\n self[DISPOSE](hit.key, hit.value)\n\n self[LENGTH] -= hit.length\n self[CACHE].delete(hit.key)\n self[LRU_LIST].removeNode(node)\n }\n}\n\nclass Entry {\n constructor (key, value, length, now, maxAge) {\n this.key = key\n this.value = value\n this.length = length\n this.now = now\n this.maxAge = maxAge || 0\n }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n let hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n hit = undefined\n }\n if (hit)\n fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","import mitt from 'mitt';\nimport { schema, schemaConfig } from '../aql/schema';\nimport { compileQuery } from '../aql/compiler';\nimport { runCompiledQuery } from '../aql/schema/run-query';\n\nconst Graph = require('./graph-data-structure');\nconst { unresolveName, resolveName } = require('./util');\n\nexport default class Spreadsheet {\n constructor(saveCache, setCacheStatus) {\n this.graph = new Graph();\n this.nodes = new Map();\n this.transactionDepth = 0;\n this.saveCache = saveCache;\n this.setCacheStatus = setCacheStatus;\n this.dirtyCells = [];\n this.computeQueue = [];\n this.events = mitt();\n this._meta = {\n createdMonths: new Set()\n };\n }\n\n meta() {\n return this._meta;\n }\n\n setMeta(meta) {\n this._meta = meta;\n }\n\n // Spreadsheet interface\n\n _getNode(name) {\n const { sheet } = unresolveName(name);\n\n if (!this.nodes.has(name)) {\n this.nodes.set(name, {\n name,\n expr: null,\n value: null,\n sheet: sheet\n });\n }\n return this.nodes.get(name);\n }\n\n getNode(name) {\n return this._getNode(name);\n }\n\n hasCell(name) {\n return this.nodes.has(name);\n }\n\n add(name, expr, value) {\n this.set(name, expr);\n }\n\n getNodes() {\n return this.nodes;\n }\n\n serialize() {\n return {\n graph: this.graph.getEdges(),\n nodes: [...this.nodes.entries()]\n };\n }\n\n transaction(func) {\n this.startTransaction();\n try {\n func();\n } catch (e) {\n console.log(e);\n }\n return this.endTransaction();\n }\n\n startTransaction() {\n this.transactionDepth++;\n }\n\n endTransaction() {\n this.transactionDepth--;\n\n if (this.transactionDepth === 0) {\n const cells = this.dirtyCells;\n this.dirtyCells = [];\n\n this.queueComputation(this.graph.topologicalSort(cells));\n }\n\n return [];\n }\n\n queueComputation(cellNames) {\n // TODO: Formally write out the different cases when the existing\n // queue is not empty. There should be cases where we can easily\n // optimize this by skipping computations if we know they are\n // going to be computed again. The hard thing is to ensure that\n // the order of computations stays correct\n\n this.computeQueue = this.computeQueue.concat(cellNames);\n\n // Begin running on the next tick so we guarantee that it doesn't finish\n // within the same tick. Since some computations are async, this makes it\n // consistent (otherwise it would only sometimes finish sync)\n Promise.resolve().then(() => {\n if (!this.running) {\n this.runComputations();\n }\n });\n }\n\n runComputations(idx = 0) {\n this.running = true;\n\n while (idx < this.computeQueue.length) {\n let name = this.computeQueue[idx];\n let node;\n let result;\n\n try {\n node = this.getNode(name);\n\n if (node._run) {\n let args = node._dependencies.map(dep => {\n return this.getNode(dep).value;\n });\n\n result = node._run(...args);\n\n if (result instanceof Promise) {\n console.warn(\n 'dynamic cell returned a promise! this is discouraged because errors are not handled properly'\n );\n }\n } else if (node.sql) {\n result = runCompiledQuery(\n node.query,\n node.sql.sqlPieces,\n node.sql.state\n );\n } else {\n idx++;\n continue;\n }\n } catch (e) {\n console.log('Error while evaluating ' + name + ':', e);\n // If an error happens, bail on the rest of the computations\n this.running = false;\n this.computeQueue = [];\n return;\n }\n\n if (result instanceof Promise) {\n // When the cell is finished computing, finish computing the\n // rest\n result.then(\n value => {\n node.value = value;\n this.runComputations(idx + 1);\n },\n err => {\n // TODO: use captureException here\n console.warn(`Failed running ${node.name}!`, err);\n this.runComputations(idx + 1);\n }\n );\n\n return;\n } else {\n node.value = result;\n }\n\n idx++;\n }\n\n // If everything computed in one loop (no async operations) notify\n // the user and empty the queue\n if (idx === this.computeQueue.length) {\n this.events.emit('change', { names: this.computeQueue });\n\n // Cache the updated cells\n if (this.saveCache) {\n this.saveCache(this.computeQueue);\n }\n this.markCacheSafe();\n\n this.running = false;\n this.computeQueue = [];\n }\n }\n\n markCacheSafe() {\n if (!this.cacheBarrier) {\n if (this.setCacheStatus) {\n this.setCacheStatus({ clean: true });\n }\n }\n }\n\n markCacheDirty() {\n if (this.setCacheStatus) {\n this.setCacheStatus({ clean: false });\n }\n }\n\n startCacheBarrier() {\n this.cacheBarrier = true;\n this.markCacheDirty();\n }\n\n endCacheBarrier() {\n this.cacheBarrier = false;\n\n let pendingChange = this.running || this.computeQueue.length > 0;\n if (!pendingChange) {\n this.markCacheSafe();\n }\n }\n\n addEventListener(name, func) {\n this.events.on(name, func);\n return () => this.events.off(name, func);\n }\n\n onFinish(func) {\n if (this.transactionDepth !== 0) {\n throw new Error(\n 'onFinish called while inside a spreadsheet transaction. This is not allowed as it will lead to race conditions'\n );\n }\n\n if (!this.running && this.computeQueue.length === 0) {\n func([]);\n // The remove function does nothing\n return () => {};\n }\n\n let remove = this.addEventListener('change', (...args) => {\n remove();\n return func(...args);\n });\n return remove;\n }\n\n unload() {\n this.events.all.clear();\n }\n\n getValue(name) {\n return this.getNode(name).value;\n }\n\n getExpr(name) {\n return this.getNode(name).expr;\n }\n\n getCellValue(sheet, name) {\n return this.getNode(resolveName(sheet, name)).value;\n }\n\n getCellExpr(sheet, name) {\n return this.getNode(resolveName(sheet, name)).expr;\n }\n\n getCellValueLoose(sheetName, cellName) {\n let name = resolveName(sheetName, cellName);\n if (this.nodes.has(name)) {\n return this.getNode(name).value;\n }\n return null;\n }\n\n bootup(onReady) {\n this.onFinish(() => {\n onReady();\n });\n }\n\n load(name, value) {\n const node = this._getNode(name);\n node.expr = value;\n node.value = value;\n }\n\n create(name, value) {\n return this.transaction(() => {\n const node = this._getNode(name);\n node.expr = value;\n node.value = value;\n this._markDirty(name);\n });\n }\n\n set(name, value) {\n this.create(name, value);\n }\n\n recompute(name) {\n this.transaction(() => {\n this.dirtyCells.push(name);\n });\n }\n\n recomputeAll() {\n // Recompute everything!\n this.transaction(() => {\n this.dirtyCells = [...this.nodes.keys()];\n });\n }\n\n createQuery(sheetName, cellName, query) {\n let name = resolveName(sheetName, cellName);\n let node = this._getNode(name);\n\n if (node.query !== query) {\n node.query = query;\n let { sqlPieces, state } = compileQuery(node.query, schema, schemaConfig);\n node.sql = { sqlPieces, state };\n\n this.transaction(() => {\n this._markDirty(name);\n });\n }\n }\n\n createStatic(sheetName, cellName, initialValue) {\n let name = resolveName(sheetName, cellName);\n let exists = this.nodes.has(name);\n if (!exists) {\n this.create(name, initialValue);\n }\n }\n\n createDynamic(\n sheetName,\n cellName,\n { dependencies = [], run, initialValue, refresh }\n ) {\n let name = resolveName(sheetName, cellName);\n let node = this._getNode(name);\n\n if (node.dynamic) {\n // If it already exists, do nothing\n return;\n }\n\n node.dynamic = true;\n node._run = run;\n\n dependencies = dependencies.map(dep => {\n let resolved;\n if (!unresolveName(dep).sheet) {\n resolved = resolveName(sheetName, dep);\n } else {\n resolved = dep;\n }\n\n return resolved;\n });\n\n node._dependencies = dependencies;\n\n // TODO: diff these\n this.graph.removeIncomingEdges(name);\n dependencies.forEach(dep => {\n this.graph.addEdge(dep, name);\n });\n\n if (node.value == null || refresh) {\n this.transaction(() => {\n node.value = initialValue;\n this._markDirty(name);\n });\n }\n }\n\n clearSheet(sheetName) {\n for (let [name, node] of this.nodes.entries()) {\n if (node.sheet === sheetName) {\n this.nodes.delete(name);\n }\n }\n }\n\n voidCell(sheetName, name, voidValue = null) {\n let node = this.getNode(resolveName(sheetName, name));\n node._run = null;\n node.dynamic = false;\n node.value = voidValue;\n }\n\n deleteCell(sheetName, name) {\n this.voidCell(sheetName, name);\n this.nodes.delete(resolveName(sheetName, name));\n }\n\n addDependencies(sheetName, cellName, deps) {\n let name = resolveName(sheetName, cellName);\n\n deps = deps.map(dep => {\n if (!unresolveName(dep).sheet) {\n return resolveName(sheetName, dep);\n }\n return dep;\n });\n\n let node = this.getNode(name);\n let newDeps = deps.filter(\n dep => (node._dependencies || []).indexOf(dep) === -1\n );\n\n if (newDeps.length > 0) {\n node._dependencies = (node._dependencies || []).concat(newDeps);\n newDeps.forEach(dep => {\n this.graph.addEdge(dep, name);\n });\n this.recompute(name);\n }\n }\n\n removeDependencies(sheetName, cellName, deps) {\n let name = resolveName(sheetName, cellName);\n\n deps = deps.map(dep => {\n if (!unresolveName(dep).sheet) {\n return resolveName(sheetName, dep);\n }\n return dep;\n });\n\n let node = this.getNode(name);\n\n node._dependencies = (node._dependencies || []).filter(\n dep => deps.indexOf(dep) === -1\n );\n\n deps.forEach(dep => {\n this.graph.removeEdge(dep, name);\n });\n this.recompute(name);\n }\n\n _markDirty(name) {\n this.dirtyCells.push(name);\n }\n\n triggerDatabaseChanges(oldValues, newValues) {\n let tables = new Set([...oldValues.keys(), ...newValues.keys()]);\n\n this.startTransaction();\n // TODO: Create an index of deps so we don't have to iterate\n // across all nodes\n this.nodes.forEach(node => {\n if (\n node.sql &&\n node.sql.state.dependencies.some(dep => tables.has(dep))\n ) {\n this._markDirty(node.name);\n }\n });\n this.endTransaction();\n }\n}\n","import encryption from '../encryption';\nimport * as prefs from '../prefs';\nlet { SyncError } = require('../errors');\nlet SyncPb = require('./proto/sync_pb');\n\nfunction coerceBuffer(value) {\n // The web encryption APIs give us back raw Uint8Array... but our\n // encryption code assumes we can work with it as a buffer. This is\n // a leaky abstraction and ideally the our abstraction over the web\n // encryption APIs should do this.\n if (!Buffer.isBuffer(value)) {\n return Buffer.from(value);\n }\n return value;\n}\n\nexport async function encode(groupId, fileId, since, messages) {\n let { encryptKeyId } = prefs.getPrefs();\n let requestPb = new SyncPb.SyncRequest();\n\n for (let i = 0; i < messages.length; i++) {\n let msg = messages[i];\n let envelopePb = new SyncPb.MessageEnvelope();\n envelopePb.setTimestamp(msg.timestamp);\n\n let messagePb = new SyncPb.Message();\n messagePb.setDataset(msg.dataset);\n messagePb.setRow(msg.row);\n messagePb.setColumn(msg.column);\n messagePb.setValue(msg.value);\n let binaryMsg = messagePb.serializeBinary();\n\n if (encryptKeyId) {\n let encrypted = new SyncPb.EncryptedData();\n\n let result;\n try {\n result = await encryption.encrypt(binaryMsg, encryptKeyId);\n } catch (e) {\n throw new SyncError('encrypt-failure', {\n isMissingKey: e.message === 'missing-key'\n });\n }\n\n encrypted.setData(result.value);\n encrypted.setIv(Buffer.from(result.meta.iv, 'base64'));\n encrypted.setAuthtag(Buffer.from(result.meta.authTag, 'base64'));\n\n envelopePb.setContent(encrypted.serializeBinary());\n envelopePb.setIsencrypted(true);\n } else {\n envelopePb.setContent(binaryMsg);\n }\n\n requestPb.addMessages(envelopePb);\n }\n\n requestPb.setGroupid(groupId);\n requestPb.setFileid(fileId);\n requestPb.setKeyid(encryptKeyId);\n requestPb.setSince(since);\n\n return requestPb.serializeBinary();\n}\n\nexport async function decode(data) {\n let { encryptKeyId } = prefs.getPrefs();\n\n let responsePb = SyncPb.SyncResponse.deserializeBinary(data);\n let merkle = JSON.parse(responsePb.getMerkle());\n let list = responsePb.getMessagesList();\n let messages = [];\n\n for (let i = 0; i < list.length; i++) {\n let envelopePb = list[i];\n let timestamp = envelopePb.getTimestamp();\n let encrypted = envelopePb.getIsencrypted();\n let msg;\n\n if (encrypted) {\n let binary = SyncPb.EncryptedData.deserializeBinary(\n envelopePb.getContent()\n );\n\n let decrypted;\n try {\n decrypted = await encryption.decrypt(coerceBuffer(binary.getData()), {\n keyId: encryptKeyId,\n algorithm: 'aes-256-gcm',\n iv: coerceBuffer(binary.getIv()),\n authTag: coerceBuffer(binary.getAuthtag())\n });\n } catch (e) {\n console.log(e);\n throw new SyncError('decrypt-failure', {\n isMissingKey: e.message === 'missing-key'\n });\n }\n\n msg = SyncPb.Message.deserializeBinary(decrypted);\n } else {\n msg = SyncPb.Message.deserializeBinary(envelopePb.getContent());\n }\n\n messages.push({\n timestamp: timestamp,\n dataset: msg.getDataset(),\n row: msg.getRow(),\n column: msg.getColumn(),\n value: msg.getValue()\n });\n }\n\n return { messages, merkle };\n}\n","import fs from '../../platform/server/fs';\nconst uuid = require('../../platform/uuid');\n\nexport async function uniqueFileName(existingFiles) {\n let initialName = 'My Finances';\n let idx = 1;\n\n // If there is a conflict, keep appending an index until there is no\n // conflict and we have a unique name\n let newName = initialName;\n while (existingFiles.find(file => file.name === newName)) {\n newName = `${initialName} ${idx}`;\n idx++;\n }\n\n return newName;\n}\n\nexport async function idFromFileName(name) {\n let id =\n name.replace(/( |[^A-Za-z0-9])/g, '-') + '-' + uuid.v4Sync().slice(0, 7);\n\n // Make sure the id is unique. There's a chance one could already\n // exist (although very unlikely now that we append unique\n // characters onto the id)\n let index = 0;\n\n let budgetDir = fs.getBudgetDir(id);\n while (await fs.exists(budgetDir)) {\n index++;\n budgetDir = fs.getBudgetDir(id + index.toString());\n }\n\n // If a suffix was added, update the id\n if (index > 0) {\n id = id + index.toString();\n }\n\n return id;\n}\n","import fs from 'fs';\nimport csvStringify from 'csv-stringify/lib/sync';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport { integerToAmount } from '../../shared/util';\n\nexport async function exportToCSV(\n transactions,\n accounts,\n categoryGroups,\n payees\n) {\n const accountNamesById = accounts.reduce((reduced, { id, name }) => {\n reduced[id] = name;\n return reduced;\n }, {});\n\n const categoryNamesById = categoryGroups.reduce(\n (reduced, { name, categories: subCategories }) => {\n subCategories.forEach(\n subCategory =>\n (reduced[subCategory.id] = `${name}: ${subCategory.name}`)\n );\n return reduced;\n },\n {}\n );\n\n const payeeNamesById = payees.reduce((reduced, { id, name }) => {\n reduced[id] = name;\n return reduced;\n }, {});\n\n const transactionsForExport = transactions.map(\n ({ account, date, payee, notes, category, amount }) => ({\n Account: accountNamesById[account],\n Date: date,\n Payee: payeeNamesById[payee],\n Notes: notes,\n Category: categoryNamesById[category],\n Amount: amount == null ? 0 : integerToAmount(amount)\n })\n );\n\n return csvStringify(transactionsForExport, { header: true });\n}\n\nexport async function exportQueryToCSV(query) {\n let { data: transactions } = await aqlQuery(\n query\n .select([\n { Id: 'id' },\n { Account: 'account.name' },\n { Date: 'date' },\n { Payee: 'payee.name' },\n { ParentId: 'parent_id' },\n { IsParent: 'is_parent' },\n { Notes: 'notes' },\n { Category: 'category.name' },\n { Amount: 'amount' }\n ])\n .options({ splits: 'all' })\n );\n\n let parentsPayees = new Map();\n for (let trans of transactions) {\n if (trans.IsParent) {\n parentsPayees.set(trans.Id, trans.Payee);\n }\n }\n\n // filter out any parent transactions\n let noParents = transactions.filter(t => !t.IsParent);\n\n // map final properties for export and grab the payee for splits from their parent transaction\n let transactionsForExport = noParents.map(trans => {\n return {\n Account: trans.Account,\n Date: trans.Date,\n Payee: trans.ParentId ? parentsPayees.get(trans.ParentId) : trans.Payee,\n Notes: trans.Notes,\n Category: trans.Category,\n Amount: trans.Amount == null ? 0 : integerToAmount(trans.Amount)\n };\n });\n\n return csvStringify(transactionsForExport, { header: true });\n}\n","\nconst stringify = require('.')\nconst {StringDecoder} = require('string_decoder')\n\nmodule.exports = function(records, options={}){\n const data = []\n if(Buffer.isBuffer(records)){\n const decoder = new StringDecoder()\n records = decoder.write(records)\n }\n function onData(record){\n if(record){\n data.push(record.toString())\n }\n }\n let stringifier = new stringify.Stringifier(options)\n stringifier.on('data', onData);\n for(let record of records){\n stringifier.write(record) \n }\n stringifier.end()\n stringifier.off('data', onData);\n return data.join('')\n}\n","'use strict';\n\nvar objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isArray = require('isarray');\nvar isDate = require('is-date-object');\nvar whichBoxedPrimitive = require('which-boxed-primitive');\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar whichCollection = require('which-collection');\nvar getIterator = require('es-get-iterator');\nvar getSideChannel = require('side-channel');\nvar whichTypedArray = require('which-typed-array');\nvar assign = require('object.assign');\n\nvar $getTime = callBound('Date.prototype.getTime');\nvar gPO = Object.getPrototypeOf;\nvar $objToString = callBound('Object.prototype.toString');\n\nvar $Set = GetIntrinsic('%Set%', true);\nvar $mapHas = callBound('Map.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSize = callBound('Map.prototype.size', true);\nvar $setAdd = callBound('Set.prototype.add', true);\nvar $setDelete = callBound('Set.prototype.delete', true);\nvar $setHas = callBound('Set.prototype.has', true);\nvar $setSize = callBound('Set.prototype.size', true);\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L401-L414\nfunction setHasEqualElement(set, val1, opts, channel) {\n var i = getIterator(set);\n var result;\n while ((result = i.next()) && !result.done) {\n if (internalDeepEqual(val1, result.value, opts, channel)) { // eslint-disable-line no-use-before-define\n // Remove the matching element to make sure we do not check that again.\n $setDelete(set, result.value);\n return true;\n }\n }\n\n return false;\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L416-L439\nfunction findLooseMatchingPrimitives(prim) {\n if (typeof prim === 'undefined') {\n return null;\n }\n if (typeof prim === 'object') { // Only pass in null as object!\n return void 0;\n }\n if (typeof prim === 'symbol') {\n return false;\n }\n if (typeof prim === 'string' || typeof prim === 'number') {\n // Loose equal entries exist only if the string is possible to convert to a regular number and not NaN.\n return +prim === +prim; // eslint-disable-line no-implicit-coercion\n }\n return true;\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L449-L460\nfunction mapMightHaveLoosePrim(a, b, prim, item, opts, channel) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) {\n return altValue;\n }\n var curB = $mapGet(b, altValue);\n var looseOpts = assign({}, opts, { strict: false });\n if (\n (typeof curB === 'undefined' && !$mapHas(b, altValue))\n // eslint-disable-next-line no-use-before-define\n || !internalDeepEqual(item, curB, looseOpts, channel)\n ) {\n return false;\n }\n // eslint-disable-next-line no-use-before-define\n return !$mapHas(a, altValue) && internalDeepEqual(item, curB, looseOpts, channel);\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L441-L447\nfunction setMightHaveLoosePrim(a, b, prim) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) {\n return altValue;\n }\n\n return $setHas(b, altValue) && !$setHas(a, altValue);\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L518-L533\nfunction mapHasEqualEntry(set, map, key1, item1, opts, channel) {\n var i = getIterator(set);\n var result;\n var key2;\n while ((result = i.next()) && !result.done) {\n key2 = result.value;\n if (\n // eslint-disable-next-line no-use-before-define\n internalDeepEqual(key1, key2, opts, channel)\n // eslint-disable-next-line no-use-before-define\n && internalDeepEqual(item1, $mapGet(map, key2), opts, channel)\n ) {\n $setDelete(set, key2);\n return true;\n }\n }\n\n return false;\n}\n\nfunction internalDeepEqual(actual, expected, options, channel) {\n var opts = options || {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (opts.strict ? is(actual, expected) : actual === expected) {\n return true;\n }\n\n var actualBoxed = whichBoxedPrimitive(actual);\n var expectedBoxed = whichBoxedPrimitive(expected);\n if (actualBoxed !== expectedBoxed) {\n return false;\n }\n\n // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n return opts.strict ? is(actual, expected) : actual == expected; // eslint-disable-line eqeqeq\n }\n\n /*\n * 7.4. For all other Object pairs, including Array objects, equivalence is\n * determined by having the same number of owned properties (as verified\n * with Object.prototype.hasOwnProperty.call), the same set of keys\n * (although not necessarily the same order), equivalent values for every\n * corresponding key, and an identical 'prototype' property. Note: this\n * accounts for both named and indexed properties on Arrays.\n */\n // see https://github.com/nodejs/node/commit/d3aafd02efd3a403d646a3044adcf14e63a88d32 for memos/channel inspiration\n\n var hasActual = channel.has(actual);\n var hasExpected = channel.has(expected);\n var sentinel;\n if (hasActual && hasExpected) {\n if (channel.get(actual) === channel.get(expected)) {\n return true;\n }\n } else {\n sentinel = {};\n }\n if (!hasActual) { channel.set(actual, sentinel); }\n if (!hasExpected) { channel.set(expected, sentinel); }\n\n // eslint-disable-next-line no-use-before-define\n return objEquiv(actual, expected, opts, channel);\n}\n\nfunction isBuffer(x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n return false;\n }\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') {\n return false;\n }\n\n return !!(x.constructor && x.constructor.isBuffer && x.constructor.isBuffer(x));\n}\n\nfunction setEquiv(a, b, opts, channel) {\n if ($setSize(a) !== $setSize(b)) {\n return false;\n }\n var iA = getIterator(a);\n var iB = getIterator(b);\n var resultA;\n var resultB;\n var set;\n while ((resultA = iA.next()) && !resultA.done) {\n if (resultA.value && typeof resultA.value === 'object') {\n if (!set) { set = new $Set(); }\n $setAdd(set, resultA.value);\n } else if (!$setHas(b, resultA.value)) {\n if (opts.strict) { return false; }\n if (!setMightHaveLoosePrim(a, b, resultA.value)) {\n return false;\n }\n if (!set) { set = new $Set(); }\n $setAdd(set, resultA.value);\n }\n }\n if (set) {\n while ((resultB = iB.next()) && !resultB.done) {\n // We have to check if a primitive value is already matching and only if it's not, go hunting for it.\n if (resultB.value && typeof resultB.value === 'object') {\n if (!setHasEqualElement(set, resultB.value, opts.strict, channel)) {\n return false;\n }\n } else if (\n !opts.strict\n && !$setHas(a, resultB.value)\n && !setHasEqualElement(set, resultB.value, opts.strict, channel)\n ) {\n return false;\n }\n }\n return $setSize(set) === 0;\n }\n return true;\n}\n\nfunction mapEquiv(a, b, opts, channel) {\n if ($mapSize(a) !== $mapSize(b)) {\n return false;\n }\n var iA = getIterator(a);\n var iB = getIterator(b);\n var resultA;\n var resultB;\n var set;\n var key;\n var item1;\n var item2;\n while ((resultA = iA.next()) && !resultA.done) {\n key = resultA.value[0];\n item1 = resultA.value[1];\n if (key && typeof key === 'object') {\n if (!set) { set = new $Set(); }\n $setAdd(set, key);\n } else {\n item2 = $mapGet(b, key);\n if ((typeof item2 === 'undefined' && !$mapHas(b, key)) || !internalDeepEqual(item1, item2, opts, channel)) {\n if (opts.strict) {\n return false;\n }\n if (!mapMightHaveLoosePrim(a, b, key, item1, opts, channel)) {\n return false;\n }\n if (!set) { set = new $Set(); }\n $setAdd(set, key);\n }\n }\n }\n\n if (set) {\n while ((resultB = iB.next()) && !resultB.done) {\n key = resultB.value[0];\n item2 = resultB.value[1];\n if (key && typeof key === 'object') {\n if (!mapHasEqualEntry(set, a, key, item2, opts, channel)) {\n return false;\n }\n } else if (\n !opts.strict\n && (!a.has(key) || !internalDeepEqual($mapGet(a, key), item2, opts, channel))\n && !mapHasEqualEntry(set, a, key, item2, assign({}, opts, { strict: false }), channel)\n ) {\n return false;\n }\n }\n return $setSize(set) === 0;\n }\n return true;\n}\n\nfunction objEquiv(a, b, opts, channel) {\n /* eslint max-statements: [2, 100], max-lines-per-function: [2, 120], max-depth: [2, 5] */\n var i, key;\n\n if (typeof a !== typeof b) { return false; }\n if (a == null || b == null) { return false; }\n\n if ($objToString(a) !== $objToString(b)) { return false; }\n\n if (isArguments(a) !== isArguments(b)) { return false; }\n\n var aIsArray = isArray(a);\n var bIsArray = isArray(b);\n if (aIsArray !== bIsArray) { return false; }\n\n // TODO: replace when a cross-realm brand check is available\n var aIsError = a instanceof Error;\n var bIsError = b instanceof Error;\n if (aIsError !== bIsError) { return false; }\n if (aIsError || bIsError) {\n if (a.name !== b.name || a.message !== b.message) { return false; }\n }\n\n var aIsRegex = isRegex(a);\n var bIsRegex = isRegex(b);\n if (aIsRegex !== bIsRegex) { return false; }\n if ((aIsRegex || bIsRegex) && (a.source !== b.source || flags(a) !== flags(b))) {\n return false;\n }\n\n var aIsDate = isDate(a);\n var bIsDate = isDate(b);\n if (aIsDate !== bIsDate) { return false; }\n if (aIsDate || bIsDate) { // && would work too, because both are true or both false here\n if ($getTime(a) !== $getTime(b)) { return false; }\n }\n if (opts.strict && gPO && gPO(a) !== gPO(b)) { return false; }\n\n if (whichTypedArray(a) !== whichTypedArray(b)) {\n return false;\n }\n\n var aIsBuffer = isBuffer(a);\n var bIsBuffer = isBuffer(b);\n if (aIsBuffer !== bIsBuffer) { return false; }\n if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n if (a.length !== b.length) { return false; }\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) { return false; }\n }\n return true;\n }\n\n if (typeof a !== typeof b) { return false; }\n\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) { return false; }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) { return false; } // eslint-disable-line eqeqeq\n }\n\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!internalDeepEqual(a[key], b[key], opts, channel)) { return false; }\n }\n\n var aCollection = whichCollection(a);\n var bCollection = whichCollection(b);\n if (aCollection !== bCollection) {\n return false;\n }\n if (aCollection === 'Set' || bCollection === 'Set') { // aCollection === bCollection\n return setEquiv(a, b, opts, channel);\n }\n if (aCollection === 'Map') { // aCollection === bCollection\n return mapEquiv(a, b, opts, channel);\n }\n\n return true;\n}\n\nmodule.exports = function deepEqual(a, b, opts) {\n return internalDeepEqual(a, b, opts, getSideChannel());\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","let openedDb = _openDatabase();\n\n// The web version uses IndexedDB to store data\nfunction _openDatabase() {\n return new Promise((resolve, reject) => {\n let dbVersion = 9;\n let openRequest = indexedDB.open('actual', dbVersion);\n\n openRequest.onupgradeneeded = function(e) {\n let db = e.target.result;\n\n // Remove old stores\n if (db.objectStoreNames.contains('filesystem')) {\n db.deleteObjectStore('filesystem', { keyPath: 'filepath' });\n }\n if (db.objectStoreNames.contains('messages')) {\n db.deleteObjectStore('messages', { keyPath: 'filepath' });\n }\n\n // Create new stores\n if (!db.objectStoreNames.contains('asyncStorage')) {\n db.createObjectStore('asyncStorage');\n }\n if (!db.objectStoreNames.contains('files')) {\n db.createObjectStore('files', { keyPath: 'filepath' });\n }\n };\n\n openRequest.onblocked = e => console.log('blocked', e);\n\n openRequest.onerror = event => {\n console.log('openRequest error');\n reject(new Error('indexeddb-failure: Could not open IndexedDB'));\n };\n\n openRequest.onsuccess = function(e) {\n let db = e.target.result;\n\n db.onversionchange = () => {\n // TODO: Notify the user somehow\n db.close();\n };\n\n db.onerror = function(event) {\n console.log('Database error: ' + (event.target && event.target.error));\n\n if (event.target && event.target.error) {\n let e = event.target.error;\n if (e.name === 'QuotaExceededError') {\n // Don't try to get the sized used -- too brittle. Is there\n // a better way to do it?\n //\n // async function run() {\n // let transaction = db.transaction(['asyncStorage'], 'readonly');\n // let objectStore = transaction.objectStore('filesystem');\n\n // let files = await new Promise((resolve, reject) => {\n // let req = objectStore.getAll();\n // req.onerror = e => reject(e);\n // req.onsuccess = e => resolve(e.target.result);\n // });\n\n // console.log('files', files.length);\n // for (let file of files) {\n // console.log(file.filepath, file.contents.length);\n // }\n\n // transaction = db.transaction(['files'], 'readonly');\n // objectStore = transaction.objectStore('messages');\n\n // let messages = await new Promise((resolve, reject) => {\n // let req = objectStore.getAll();\n // req.onerror = e => reject(e);\n // req.onsuccess = e => resolve(e.target.result);\n // });\n\n // console.log('messages', messages.length);\n // console.log('message bytes', JSON.stringify(messages).length);\n // }\n\n throw new Error('indexeddb-quota-error');\n }\n }\n };\n resolve(db);\n };\n });\n}\n\nfunction getStore(db, name) {\n let trans = db.transaction([name], 'readwrite');\n return { trans, store: trans.objectStore(name) };\n}\n\nasync function get(store, key, mapper = x => x) {\n return new Promise((resolve, reject) => {\n let req = store.get(key);\n req.onsuccess = e => {\n resolve(mapper(req.result));\n };\n req.onerror = e => reject(e);\n });\n}\n\nasync function set(store, item) {\n return new Promise((resolve, reject) => {\n let req = store.put(item);\n req.onsuccess = e => resolve();\n req.onerror = e => reject(e);\n });\n}\n\nasync function del(store, key) {\n return new Promise((resolve, reject) => {\n let req = store.delete(key);\n req.onsuccess = e => resolve();\n req.onerror = e => reject(e);\n });\n}\n\nfunction getDatabase() {\n return openedDb;\n}\n\nfunction openDatabase() {\n if (openedDb == null) {\n openedDb = _openDatabase();\n }\n return openedDb;\n}\n\nfunction closeDatabase() {\n if (openedDb) {\n let promise = openedDb.then(db => {\n db.close();\n });\n openedDb = null;\n }\n}\n\nif (process.env.NODE_ENV === 'development') {\n self.addEventListener('message', e => {\n if (e.data.type === '__actual:shutdown') {\n closeDatabase();\n }\n });\n}\n\nmodule.exports = {\n getDatabase,\n openDatabase,\n closeDatabase,\n getStore,\n get,\n set,\n del\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar constants_1 = require(\"./constants\");\nvar encoding_1 = require(\"./encoding\");\nvar S_IFMT = constants_1.constants.S_IFMT, S_IFDIR = constants_1.constants.S_IFDIR, S_IFREG = constants_1.constants.S_IFREG, S_IFBLK = constants_1.constants.S_IFBLK, S_IFCHR = constants_1.constants.S_IFCHR, S_IFLNK = constants_1.constants.S_IFLNK, S_IFIFO = constants_1.constants.S_IFIFO, S_IFSOCK = constants_1.constants.S_IFSOCK;\n/**\n * A directory entry, like `fs.Dirent`.\n */\nvar Dirent = /** @class */ (function () {\n function Dirent() {\n this.name = '';\n this.mode = 0;\n }\n Dirent.build = function (link, encoding) {\n var dirent = new Dirent();\n var mode = link.getNode().mode;\n dirent.name = encoding_1.strToEncoding(link.getName(), encoding);\n dirent.mode = mode;\n return dirent;\n };\n Dirent.prototype._checkModeProperty = function (property) {\n return (this.mode & S_IFMT) === property;\n };\n Dirent.prototype.isDirectory = function () {\n return this._checkModeProperty(S_IFDIR);\n };\n Dirent.prototype.isFile = function () {\n return this._checkModeProperty(S_IFREG);\n };\n Dirent.prototype.isBlockDevice = function () {\n return this._checkModeProperty(S_IFBLK);\n };\n Dirent.prototype.isCharacterDevice = function () {\n return this._checkModeProperty(S_IFCHR);\n };\n Dirent.prototype.isSymbolicLink = function () {\n return this._checkModeProperty(S_IFLNK);\n };\n Dirent.prototype.isFIFO = function () {\n return this._checkModeProperty(S_IFIFO);\n };\n Dirent.prototype.isSocket = function () {\n return this._checkModeProperty(S_IFSOCK);\n };\n return Dirent;\n}());\nexports.Dirent = Dirent;\nexports.default = Dirent;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar buffer_1 = require(\"./internal/buffer\");\nvar errors = require(\"./internal/errors\");\nexports.ENCODING_UTF8 = 'utf8';\nfunction assertEncoding(encoding) {\n if (encoding && !buffer_1.Buffer.isEncoding(encoding))\n throw new errors.TypeError('ERR_INVALID_OPT_VALUE_ENCODING', encoding);\n}\nexports.assertEncoding = assertEncoding;\nfunction strToEncoding(str, encoding) {\n if (!encoding || encoding === exports.ENCODING_UTF8)\n return str; // UTF-8\n if (encoding === 'buffer')\n return new buffer_1.Buffer(str); // `buffer` encoding\n return new buffer_1.Buffer(str).toString(encoding); // Custom encoding\n}\nexports.strToEncoding = strToEncoding;\n","\"use strict\";\n// The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar assert = require(\"assert\");\nvar util = require(\"util\");\nvar kCode = typeof Symbol === 'undefined' ? '_kCode' : Symbol('code');\nvar messages = {}; // new Map();\nfunction makeNodeError(Base) {\n return /** @class */ (function (_super) {\n __extends(NodeError, _super);\n function NodeError(key) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var _this = _super.call(this, message(key, args)) || this;\n _this.code = key;\n _this[kCode] = key;\n _this.name = _super.prototype.name + \" [\" + _this[kCode] + \"]\";\n return _this;\n }\n return NodeError;\n }(Base));\n}\nvar AssertionError = /** @class */ (function (_super) {\n __extends(AssertionError, _super);\n function AssertionError(options) {\n var _this = this;\n if (typeof options !== 'object' || options === null) {\n throw new exports.TypeError('ERR_INVALID_ARG_TYPE', 'options', 'object');\n }\n if (options.message) {\n _this = _super.call(this, options.message) || this;\n }\n else {\n _this = _super.call(this, util.inspect(options.actual).slice(0, 128) + \" \" +\n (options.operator + \" \" + util.inspect(options.expected).slice(0, 128))) || this;\n }\n _this.generatedMessage = !options.message;\n _this.name = 'AssertionError [ERR_ASSERTION]';\n _this.code = 'ERR_ASSERTION';\n _this.actual = options.actual;\n _this.expected = options.expected;\n _this.operator = options.operator;\n exports.Error.captureStackTrace(_this, options.stackStartFunction);\n return _this;\n }\n return AssertionError;\n}(global.Error));\nexports.AssertionError = AssertionError;\nfunction message(key, args) {\n assert.strictEqual(typeof key, 'string');\n // const msg = messages.get(key);\n var msg = messages[key];\n assert(msg, \"An invalid error message key was used: \" + key + \".\");\n var fmt;\n if (typeof msg === 'function') {\n fmt = msg;\n }\n else {\n fmt = util.format;\n if (args === undefined || args.length === 0)\n return msg;\n args.unshift(msg);\n }\n return String(fmt.apply(null, args));\n}\nexports.message = message;\n// Utility function for registering the error codes. Only used here. Exported\n// *only* to allow for testing.\nfunction E(sym, val) {\n messages[sym] = typeof val === 'function' ? val : String(val);\n}\nexports.E = E;\nexports.Error = makeNodeError(global.Error);\nexports.TypeError = makeNodeError(global.TypeError);\nexports.RangeError = makeNodeError(global.RangeError);\n// To declare an error message, use the E(sym, val) function above. The sym\n// must be an upper case string. The val can be either a function or a string.\n// The return value of the function must be a string.\n// Examples:\n// E('EXAMPLE_KEY1', 'This is the error value');\n// E('EXAMPLE_KEY2', (a, b) => return `${a} ${b}`);\n//\n// Once an error code has been assigned, the code itself MUST NOT change and\n// any given error code must never be reused to identify a different error.\n//\n// Any error code added here should also be added to the documentation\n//\n// Note: Please try to keep these in alphabetical order\nE('ERR_ARG_NOT_ITERABLE', '%s must be iterable');\nE('ERR_ASSERTION', '%s');\nE('ERR_BUFFER_OUT_OF_BOUNDS', bufferOutOfBounds);\nE('ERR_CHILD_CLOSED_BEFORE_REPLY', 'Child closed before reply received');\nE('ERR_CONSOLE_WRITABLE_STREAM', 'Console expects a writable stream instance for %s');\nE('ERR_CPU_USAGE', 'Unable to obtain cpu usage %s');\nE('ERR_DNS_SET_SERVERS_FAILED', function (err, servers) { return \"c-ares failed to set servers: \\\"\" + err + \"\\\" [\" + servers + \"]\"; });\nE('ERR_FALSY_VALUE_REJECTION', 'Promise was rejected with falsy value');\nE('ERR_ENCODING_NOT_SUPPORTED', function (enc) { return \"The \\\"\" + enc + \"\\\" encoding is not supported\"; });\nE('ERR_ENCODING_INVALID_ENCODED_DATA', function (enc) { return \"The encoded data was not valid for encoding \" + enc; });\nE('ERR_HTTP_HEADERS_SENT', 'Cannot render headers after they are sent to the client');\nE('ERR_HTTP_INVALID_STATUS_CODE', 'Invalid status code: %s');\nE('ERR_HTTP_TRAILER_INVALID', 'Trailers are invalid with this transfer encoding');\nE('ERR_INDEX_OUT_OF_RANGE', 'Index out of range');\nE('ERR_INVALID_ARG_TYPE', invalidArgType);\nE('ERR_INVALID_ARRAY_LENGTH', function (name, len, actual) {\n assert.strictEqual(typeof actual, 'number');\n return \"The array \\\"\" + name + \"\\\" (length \" + actual + \") must be of length \" + len + \".\";\n});\nE('ERR_INVALID_BUFFER_SIZE', 'Buffer size must be a multiple of %s');\nE('ERR_INVALID_CALLBACK', 'Callback must be a function');\nE('ERR_INVALID_CHAR', 'Invalid character in %s');\nE('ERR_INVALID_CURSOR_POS', 'Cannot set cursor row without setting its column');\nE('ERR_INVALID_FD', '\"fd\" must be a positive integer: %s');\nE('ERR_INVALID_FILE_URL_HOST', 'File URL host must be \"localhost\" or empty on %s');\nE('ERR_INVALID_FILE_URL_PATH', 'File URL path %s');\nE('ERR_INVALID_HANDLE_TYPE', 'This handle type cannot be sent');\nE('ERR_INVALID_IP_ADDRESS', 'Invalid IP address: %s');\nE('ERR_INVALID_OPT_VALUE', function (name, value) {\n return \"The value \\\"\" + String(value) + \"\\\" is invalid for option \\\"\" + name + \"\\\"\";\n});\nE('ERR_INVALID_OPT_VALUE_ENCODING', function (value) { return \"The value \\\"\" + String(value) + \"\\\" is invalid for option \\\"encoding\\\"\"; });\nE('ERR_INVALID_REPL_EVAL_CONFIG', 'Cannot specify both \"breakEvalOnSigint\" and \"eval\" for REPL');\nE('ERR_INVALID_SYNC_FORK_INPUT', 'Asynchronous forks do not support Buffer, Uint8Array or string input: %s');\nE('ERR_INVALID_THIS', 'Value of \"this\" must be of type %s');\nE('ERR_INVALID_TUPLE', '%s must be an iterable %s tuple');\nE('ERR_INVALID_URL', 'Invalid URL: %s');\nE('ERR_INVALID_URL_SCHEME', function (expected) { return \"The URL must be \" + oneOf(expected, 'scheme'); });\nE('ERR_IPC_CHANNEL_CLOSED', 'Channel closed');\nE('ERR_IPC_DISCONNECTED', 'IPC channel is already disconnected');\nE('ERR_IPC_ONE_PIPE', 'Child process can have only one IPC pipe');\nE('ERR_IPC_SYNC_FORK', 'IPC cannot be used with synchronous forks');\nE('ERR_MISSING_ARGS', missingArgs);\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\nE('ERR_NAPI_CONS_FUNCTION', 'Constructor must be a function');\nE('ERR_NAPI_CONS_PROTOTYPE_OBJECT', 'Constructor.prototype must be an object');\nE('ERR_NO_CRYPTO', 'Node.js is not compiled with OpenSSL crypto support');\nE('ERR_NO_LONGER_SUPPORTED', '%s is no longer supported');\nE('ERR_PARSE_HISTORY_DATA', 'Could not parse history data in %s');\nE('ERR_SOCKET_ALREADY_BOUND', 'Socket is already bound');\nE('ERR_SOCKET_BAD_PORT', 'Port should be > 0 and < 65536');\nE('ERR_SOCKET_BAD_TYPE', 'Bad socket type specified. Valid types are: udp4, udp6');\nE('ERR_SOCKET_CANNOT_SEND', 'Unable to send data');\nE('ERR_SOCKET_CLOSED', 'Socket is closed');\nE('ERR_SOCKET_DGRAM_NOT_RUNNING', 'Not running');\nE('ERR_STDERR_CLOSE', 'process.stderr cannot be closed');\nE('ERR_STDOUT_CLOSE', 'process.stdout cannot be closed');\nE('ERR_STREAM_WRAP', 'Stream has StringDecoder set or is in objectMode');\nE('ERR_TLS_CERT_ALTNAME_INVALID', \"Hostname/IP does not match certificate's altnames: %s\");\nE('ERR_TLS_DH_PARAM_SIZE', function (size) { return \"DH parameter size \" + size + \" is less than 2048\"; });\nE('ERR_TLS_HANDSHAKE_TIMEOUT', 'TLS handshake timeout');\nE('ERR_TLS_RENEGOTIATION_FAILED', 'Failed to renegotiate');\nE('ERR_TLS_REQUIRED_SERVER_NAME', '\"servername\" is required parameter for Server.addContext');\nE('ERR_TLS_SESSION_ATTACK', 'TSL session renegotiation attack detected');\nE('ERR_TRANSFORM_ALREADY_TRANSFORMING', 'Calling transform done when still transforming');\nE('ERR_TRANSFORM_WITH_LENGTH_0', 'Calling transform done when writableState.length != 0');\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s');\nE('ERR_UNKNOWN_SIGNAL', 'Unknown signal: %s');\nE('ERR_UNKNOWN_STDIN_TYPE', 'Unknown stdin file type');\nE('ERR_UNKNOWN_STREAM_TYPE', 'Unknown stream file type');\nE('ERR_V8BREAKITERATOR', 'Full ICU data not installed. ' + 'See https://github.com/nodejs/node/wiki/Intl');\nfunction invalidArgType(name, expected, actual) {\n assert(name, 'name is required');\n // determiner: 'must be' or 'must not be'\n var determiner;\n if (expected.includes('not ')) {\n determiner = 'must not be';\n expected = expected.split('not ')[1];\n }\n else {\n determiner = 'must be';\n }\n var msg;\n if (Array.isArray(name)) {\n var names = name.map(function (val) { return \"\\\"\" + val + \"\\\"\"; }).join(', ');\n msg = \"The \" + names + \" arguments \" + determiner + \" \" + oneOf(expected, 'type');\n }\n else if (name.includes(' argument')) {\n // for the case like 'first argument'\n msg = \"The \" + name + \" \" + determiner + \" \" + oneOf(expected, 'type');\n }\n else {\n var type = name.includes('.') ? 'property' : 'argument';\n msg = \"The \\\"\" + name + \"\\\" \" + type + \" \" + determiner + \" \" + oneOf(expected, 'type');\n }\n // if actual value received, output it\n if (arguments.length >= 3) {\n msg += \". Received type \" + (actual !== null ? typeof actual : 'null');\n }\n return msg;\n}\nfunction missingArgs() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n assert(args.length > 0, 'At least one arg needs to be specified');\n var msg = 'The ';\n var len = args.length;\n args = args.map(function (a) { return \"\\\"\" + a + \"\\\"\"; });\n switch (len) {\n case 1:\n msg += args[0] + \" argument\";\n break;\n case 2:\n msg += args[0] + \" and \" + args[1] + \" arguments\";\n break;\n default:\n msg += args.slice(0, len - 1).join(', ');\n msg += \", and \" + args[len - 1] + \" arguments\";\n break;\n }\n return msg + \" must be specified\";\n}\nfunction oneOf(expected, thing) {\n assert(expected, 'expected is required');\n assert(typeof thing === 'string', 'thing is required');\n if (Array.isArray(expected)) {\n var len = expected.length;\n assert(len > 0, 'At least one expected value needs to be specified');\n // tslint:disable-next-line\n expected = expected.map(function (i) { return String(i); });\n if (len > 2) {\n return \"one of \" + thing + \" \" + expected.slice(0, len - 1).join(', ') + \", or \" + expected[len - 1];\n }\n else if (len === 2) {\n return \"one of \" + thing + \" \" + expected[0] + \" or \" + expected[1];\n }\n else {\n return \"of \" + thing + \" \" + expected[0];\n }\n }\n else {\n return \"of \" + thing + \" \" + String(expected);\n }\n}\nfunction bufferOutOfBounds(name, isWriting) {\n if (isWriting) {\n return 'Attempt to write outside buffer bounds';\n }\n else {\n return \"\\\"\" + name + \"\\\" is outside of buffer bounds\";\n }\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","\"use strict\";\n// Here we mock the global `process` variable in case we are not in Node's environment.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Looks to return a `process` object, if one is available.\n *\n * The global `process` is returned if defined;\n * otherwise `require('process')` is attempted.\n *\n * If that fails, `undefined` is returned.\n *\n * @return {IProcess | undefined}\n */\nvar maybeReturnProcess = function () {\n if (typeof process !== 'undefined') {\n return process;\n }\n try {\n return require('process');\n }\n catch (_a) {\n return undefined;\n }\n};\nfunction createProcess() {\n var p = maybeReturnProcess() || {};\n if (!p.getuid)\n p.getuid = function () { return 0; };\n if (!p.getgid)\n p.getgid = function () { return 0; };\n if (!p.cwd)\n p.cwd = function () { return '/'; };\n if (!p.nextTick)\n p.nextTick = require('./setImmediate').default;\n if (!p.emitWarning)\n p.emitWarning = function (message, type) {\n // tslint:disable-next-line:no-console\n console.warn(\"\" + type + (type ? ': ' : '') + message);\n };\n if (!p.env)\n p.env = {};\n return p;\n}\nexports.createProcess = createProcess;\nexports.default = createProcess();\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar _setImmediate;\nif (typeof setImmediate === 'function')\n _setImmediate = setImmediate.bind(global);\nelse\n _setImmediate = setTimeout.bind(global);\nexports.default = _setImmediate;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","import encryption from '../encryption';\nlet SyncPb = require('./proto/sync_pb');\n\nasync function randomString() {\n return (await encryption.randomBytes(12)).toString();\n}\n\nexport default async function makeTestMessage(keyId) {\n let messagePb = new SyncPb.Message();\n messagePb.setDataset(await randomString());\n messagePb.setRow(await randomString());\n messagePb.setColumn(await randomString());\n messagePb.setValue(await randomString());\n let binaryMsg = messagePb.serializeBinary();\n\n return await encryption.encrypt(binaryMsg, keyId);\n}\n","import * as cloudStorage from '../cloud-storage';\nimport * as db from '../db';\nimport * as prefs from '../prefs';\nimport asyncStorage from '../../platform/server/asyncStorage';\nimport { captureException } from '../../platform/exceptions';\nimport { runMutator } from '../mutators';\nconst connection = require('../../platform/server/connection');\n\nexport default async function resetSync(keyState) {\n if (!keyState) {\n // If we aren't resetting the key, make sure our key is up-to-date\n // so we don't accidentally upload a file encrypted with the wrong\n // key (or not encrypted at all)\n let { valid, error } = await cloudStorage.checkKey();\n if (error) {\n return { error };\n } else if (!valid) {\n return { error: { reason: 'file-has-new-key' } };\n }\n }\n\n let { error } = await cloudStorage.resetSyncState(keyState);\n if (error) {\n return { error };\n }\n\n await runMutator(async () => {\n // TOOD: We could automatically generate the list of tables to\n // cleanup by looking at the schema\n //\n // Be VERY careful here since we are bulk deleting data. It should\n // never delete any data that doesn't have `tombstone = 1`\n await db.execQuery(`\n DELETE FROM messages_crdt;\n DELETE FROM messages_clock;\n DELETE FROM transactions WHERE tombstone = 1;\n DELETE FROM accounts WHERE tombstone = 1;\n DELETE FROM payees WHERE tombstone = 1;\n DELETE FROM categories WHERE tombstone = 1;\n DELETE FROM category_groups WHERE tombstone = 1;\n DELETE FROM schedules WHERE tombstone = 1;\n DELETE FROM rules WHERE tombstone = 1;\n ANALYZE;\n VACUUM;\n `);\n await db.loadClock();\n });\n\n await prefs.savePrefs({\n groupId: null,\n lastSyncedTimestamp: null,\n lastUploaded: null\n });\n\n if (keyState) {\n let { key } = keyState;\n let { cloudFileId } = prefs.getPrefs();\n\n // The key has changed, we need to update our local data to\n // store the new key\n\n // Persist key in async storage\n let keys = JSON.parse((await asyncStorage.getItem(`encrypt-keys`)) || '{}');\n keys[cloudFileId] = key.serialize();\n await asyncStorage.setItem('encrypt-keys', JSON.stringify(keys));\n\n // Save the key id in prefs\n await prefs.savePrefs({ encryptKeyId: key.getId() });\n }\n\n // Finally, upload the file to make it the \"true\" version that all\n // other clients need to pull down to get back in sync\n try {\n await cloudStorage.upload();\n } catch (e) {\n if (e.reason) {\n return { error: e };\n }\n captureException(e);\n return { error: { reason: 'upload-failure' } };\n } finally {\n connection.send('prefs-updated');\n }\n\n return {};\n}\n","module.exports = {\r\n /* The local file header */\r\n LOCHDR : 30, // LOC header size\r\n LOCSIG : 0x04034b50, // \"PK\\003\\004\"\r\n LOCVER : 4,\t// version needed to extract\r\n LOCFLG : 6, // general purpose bit flag\r\n LOCHOW : 8, // compression method\r\n LOCTIM : 10, // modification time (2 bytes time, 2 bytes date)\r\n LOCCRC : 14, // uncompressed file crc-32 value\r\n LOCSIZ : 18, // compressed size\r\n LOCLEN : 22, // uncompressed size\r\n LOCNAM : 26, // filename length\r\n LOCEXT : 28, // extra field length\r\n\r\n /* The Data descriptor */\r\n EXTSIG : 0x08074b50, // \"PK\\007\\008\"\r\n EXTHDR : 16, // EXT header size\r\n EXTCRC : 4, // uncompressed file crc-32 value\r\n EXTSIZ : 8, // compressed size\r\n EXTLEN : 12, // uncompressed size\r\n\r\n /* The central directory file header */\r\n CENHDR : 46, // CEN header size\r\n CENSIG : 0x02014b50, // \"PK\\001\\002\"\r\n CENVEM : 4, // version made by\r\n CENVER : 6, // version needed to extract\r\n CENFLG : 8, // encrypt, decrypt flags\r\n CENHOW : 10, // compression method\r\n CENTIM : 12, // modification time (2 bytes time, 2 bytes date)\r\n CENCRC : 16, // uncompressed file crc-32 value\r\n CENSIZ : 20, // compressed size\r\n CENLEN : 24, // uncompressed size\r\n CENNAM : 28, // filename length\r\n CENEXT : 30, // extra field length\r\n CENCOM : 32, // file comment length\r\n CENDSK : 34, // volume number start\r\n CENATT : 36, // internal file attributes\r\n CENATX : 38, // external file attributes (host system dependent)\r\n CENOFF : 42, // LOC header offset\r\n\r\n /* The entries in the end of central directory */\r\n ENDHDR : 22, // END header size\r\n ENDSIG : 0x06054b50, // \"PK\\005\\006\"\r\n ENDSUB : 8, // number of entries on this disk\r\n ENDTOT : 10, // total number of entries\r\n ENDSIZ : 12, // central directory size in bytes\r\n ENDOFF : 16, // offset of first CEN header\r\n ENDCOM : 20, // zip file comment length\r\n\r\n /* Compression methods */\r\n STORED : 0, // no compression\r\n SHRUNK : 1, // shrunk\r\n REDUCED1 : 2, // reduced with compression factor 1\r\n REDUCED2 : 3, // reduced with compression factor 2\r\n REDUCED3 : 4, // reduced with compression factor 3\r\n REDUCED4 : 5, // reduced with compression factor 4\r\n IMPLODED : 6, // imploded\r\n // 7 reserved\r\n DEFLATED : 8, // deflated\r\n ENHANCED_DEFLATED: 9, // enhanced deflated\r\n PKWARE : 10,// PKWare DCL imploded\r\n // 11 reserved\r\n BZIP2 : 12, // compressed using BZIP2\r\n // 13 reserved\r\n LZMA : 14, // LZMA\r\n // 15-17 reserved\r\n IBM_TERSE : 18, // compressed using IBM TERSE\r\n IBM_LZ77 : 19, //IBM LZ77 z\r\n\r\n /* General purpose bit flag */\r\n FLG_ENC : 0, // encripted file\r\n FLG_COMP1 : 1, // compression option\r\n FLG_COMP2 : 2, // compression option\r\n FLG_DESC : 4, // data descriptor\r\n FLG_ENH : 8, // enhanced deflation\r\n FLG_STR : 16, // strong encryption\r\n FLG_LNG : 1024, // language encoding\r\n FLG_MSK : 4096, // mask header values\r\n\r\n /* Load type */\r\n FILE : 0,\r\n BUFFER : 1,\r\n NONE : 2,\r\n\r\n /* 4.5 Extensible data fields */\r\n EF_ID : 0,\r\n EF_SIZE : 2,\r\n\r\n /* Header IDs */\r\n ID_ZIP64 : 0x0001,\r\n ID_AVINFO : 0x0007,\r\n ID_PFS : 0x0008,\r\n ID_OS2 : 0x0009,\r\n ID_NTFS : 0x000a,\r\n ID_OPENVMS : 0x000c,\r\n ID_UNIX : 0x000d,\r\n ID_FORK : 0x000e,\r\n ID_PATCH : 0x000f,\r\n ID_X509_PKCS7 : 0x0014,\r\n ID_X509_CERTID_F : 0x0015,\r\n ID_X509_CERTID_C : 0x0016,\r\n ID_STRONGENC : 0x0017,\r\n ID_RECORD_MGT : 0x0018,\r\n ID_X509_PKCS7_RL : 0x0019,\r\n ID_IBM1 : 0x0065,\r\n ID_IBM2 : 0x0066,\r\n ID_POSZIP : 0x4690,\r\n\r\n EF_ZIP64_OR_32 : 0xffffffff,\r\n EF_ZIP64_OR_16 : 0xffff,\r\n EF_ZIP64_SUNCOMP : 0,\r\n EF_ZIP64_SCOMP : 8,\r\n EF_ZIP64_RHO : 16,\r\n EF_ZIP64_DSN : 24\r\n};\r\n","module.exports = {\r\n /* Header error messages */\r\n \"INVALID_LOC\" : \"Invalid LOC header (bad signature)\",\r\n \"INVALID_CEN\" : \"Invalid CEN header (bad signature)\",\r\n \"INVALID_END\" : \"Invalid END header (bad signature)\",\r\n\r\n /* ZipEntry error messages*/\r\n \"NO_DATA\" : \"Nothing to decompress\",\r\n \"BAD_CRC\" : \"CRC32 checksum failed\",\r\n \"FILE_IN_THE_WAY\" : \"There is a file in the way: %s\",\r\n \"UNKNOWN_METHOD\" : \"Invalid/unsupported compression method\",\r\n\r\n /* Inflater error messages */\r\n \"AVAIL_DATA\" : \"inflate::Available inflate data did not terminate\",\r\n \"INVALID_DISTANCE\" : \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\r\n \"TO_MANY_CODES\" : \"inflate::Dynamic block code description: too many length or distance codes\",\r\n \"INVALID_REPEAT_LEN\" : \"inflate::Dynamic block code description: repeat more than specified lengths\",\r\n \"INVALID_REPEAT_FIRST\" : \"inflate::Dynamic block code description: repeat lengths with no first length\",\r\n \"INCOMPLETE_CODES\" : \"inflate::Dynamic block code description: code lengths codes incomplete\",\r\n \"INVALID_DYN_DISTANCE\": \"inflate::Dynamic block code description: invalid distance code lengths\",\r\n \"INVALID_CODES_LEN\": \"inflate::Dynamic block code description: invalid literal/length code lengths\",\r\n \"INVALID_STORE_BLOCK\" : \"inflate::Stored block length did not match one's complement\",\r\n \"INVALID_BLOCK_TYPE\" : \"inflate::Invalid block type (type == 3)\",\r\n\r\n /* ADM-ZIP error messages */\r\n \"CANT_EXTRACT_FILE\" : \"Could not extract the file\",\r\n \"CANT_OVERRIDE\" : \"Target file already exists\",\r\n \"NO_ZIP\" : \"No zip file was loaded\",\r\n \"NO_ENTRY\" : \"Entry doesn't exist\",\r\n \"DIRECTORY_CONTENT_ERROR\" : \"A directory cannot have content\",\r\n \"FILE_NOT_FOUND\" : \"File not found: %s\",\r\n \"NOT_IMPLEMENTED\" : \"Not implemented\",\r\n \"INVALID_FILENAME\" : \"Invalid filename\",\r\n \"INVALID_FORMAT\" : \"Invalid or unsupported zip format. No END header found\"\r\n};","var Utils = require(\"./util\"),\n Headers = require(\"./headers\"),\n Constants = Utils.Constants,\n Methods = require(\"./methods\");\n\nmodule.exports = function (/*Buffer*/input) {\n\n var _entryHeader = new Headers.EntryHeader(),\n _entryName = Buffer.alloc(0),\n _comment = Buffer.alloc(0),\n _isDirectory = false,\n uncompressedData = null,\n _extra = Buffer.alloc(0);\n\n function getCompressedDataFromZip() {\n if (!input || !Buffer.isBuffer(input)) {\n return Buffer.alloc(0);\n }\n _entryHeader.loadDataHeaderFromBinary(input);\n return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize)\n }\n\n function crc32OK(data) {\n // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written\n if ((_entryHeader.flags & 0x8) !== 0x8) {\n if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {\n return false;\n }\n } else {\n // @TODO: load and check data descriptor header\n // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure\n // (optionally preceded by a 4-byte signature) immediately after the compressed data:\n }\n return true;\n }\n\n function decompress(/*Boolean*/async, /*Function*/callback, /*String*/pass) {\n if(typeof callback === 'undefined' && typeof async === 'string') {\n pass=async;\n async=void 0;\n }\n if (_isDirectory) {\n if (async && callback) {\n callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.\n }\n return Buffer.alloc(0);\n }\n\n var compressedData = getCompressedDataFromZip();\n \n if (compressedData.length === 0) {\n if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error.\n return compressedData;\n }\n\n var data = Buffer.alloc(_entryHeader.size);\n\n switch (_entryHeader.method) {\n case Utils.Constants.STORED:\n compressedData.copy(data);\n if (!crc32OK(data)) {\n if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error\n return Utils.Errors.BAD_CRC;\n } else {//si added otherwise did not seem to return data.\n if (async && callback) callback(data);\n return data;\n }\n case Utils.Constants.DEFLATED:\n var inflater = new Methods.Inflater(compressedData);\n if (!async) {\n var result = inflater.inflate(data);\n result.copy(data, 0);\n if (!crc32OK(data)) {\n console.warn(Utils.Errors.BAD_CRC + \" \" + _entryName.toString())\n }\n return data;\n } else {\n inflater.inflateAsync(function(result) {\n result.copy(data, 0);\n if (!crc32OK(data)) {\n if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error\n } else { //si added otherwise did not seem to return data.\n if (callback) callback(data);\n }\n })\n }\n break;\n default:\n if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);\n return Utils.Errors.UNKNOWN_METHOD;\n }\n }\n\n function compress(/*Boolean*/async, /*Function*/callback) {\n if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n // no data set or the data wasn't changed to require recompression\n if (async && callback) callback(getCompressedDataFromZip());\n return getCompressedDataFromZip();\n }\n\n if (uncompressedData.length && !_isDirectory) {\n var compressedData;\n // Local file header\n switch (_entryHeader.method) {\n case Utils.Constants.STORED:\n _entryHeader.compressedSize = _entryHeader.size;\n\n compressedData = Buffer.alloc(uncompressedData.length);\n uncompressedData.copy(compressedData);\n\n if (async && callback) callback(compressedData);\n return compressedData;\n default:\n case Utils.Constants.DEFLATED:\n\n var deflater = new Methods.Deflater(uncompressedData);\n if (!async) {\n var deflated = deflater.deflate();\n _entryHeader.compressedSize = deflated.length;\n return deflated;\n } else {\n deflater.deflateAsync(function(data) {\n compressedData = Buffer.alloc(data.length);\n _entryHeader.compressedSize = data.length;\n data.copy(compressedData);\n callback && callback(compressedData);\n })\n }\n deflater = null;\n break;\n }\n } else {\n if (async && callback) {\n callback(Buffer.alloc(0));\n } else {\n return Buffer.alloc(0);\n }\n }\n }\n\n function readUInt64LE(buffer, offset) {\n return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n }\n\n function parseExtra(data) {\n var offset = 0;\n var signature, size, part;\n while(offset= Constants.EF_ZIP64_SCOMP) {\n size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n if(_entryHeader.size === Constants.EF_ZIP64_OR_32) {\n _entryHeader.size = size;\n }\n }\n if(data.length >= Constants.EF_ZIP64_RHO) {\n compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n if(_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n _entryHeader.compressedSize = compressedSize;\n }\n }\n if(data.length >= Constants.EF_ZIP64_DSN) {\n offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n if(_entryHeader.offset === Constants.EF_ZIP64_OR_32) {\n _entryHeader.offset = offset;\n }\n }\n if(data.length >= Constants.EF_ZIP64_DSN+4) {\n diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n if(_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n _entryHeader.diskNumStart = diskNumStart;\n }\n }\n }\n\n\n return {\n get entryName () { return _entryName.toString(); },\n get rawEntryName() { return _entryName; },\n set entryName (val) {\n _entryName = Utils.toBuffer(val);\n var lastChar = _entryName[_entryName.length - 1];\n _isDirectory = (lastChar === 47) || (lastChar === 92);\n _entryHeader.fileNameLength = _entryName.length;\n },\n\n get extra () { return _extra; },\n set extra (val) {\n _extra = val;\n _entryHeader.extraLength = val.length;\n parseExtra(val);\n },\n\n get comment () { return _comment.toString(); },\n set comment (val) {\n _comment = Utils.toBuffer(val);\n _entryHeader.commentLength = _comment.length;\n },\n\n get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split(\"/\").pop() : n.split(\"/\").pop(); },\n get isDirectory () { return _isDirectory },\n\n getCompressedData : function() {\n return compress(false, null)\n },\n\n getCompressedDataAsync : function(/*Function*/callback) {\n compress(true, callback)\n },\n\n setData : function(value) {\n uncompressedData = Utils.toBuffer(value);\n if (!_isDirectory && uncompressedData.length) {\n _entryHeader.size = uncompressedData.length;\n _entryHeader.method = Utils.Constants.DEFLATED;\n _entryHeader.crc = Utils.crc32(value);\n _entryHeader.changed = true;\n } else { // folders and blank files should be stored\n _entryHeader.method = Utils.Constants.STORED;\n }\n },\n\n getData : function(pass) {\n if (_entryHeader.changed) {\n\t\t\t\treturn uncompressedData;\n\t\t\t} else {\n\t\t\t\treturn decompress(false, null, pass);\n }\n },\n\n getDataAsync : function(/*Function*/callback, pass) {\n\t\t\tif (_entryHeader.changed) {\n\t\t\t\tcallback(uncompressedData)\n\t\t\t} else {\n\t\t\t\tdecompress(true, callback, pass)\n }\n },\n\n set attr(attr) { _entryHeader.attr = attr; },\n get attr() { return _entryHeader.attr; },\n\n set header(/*Buffer*/data) {\n _entryHeader.loadFromBinary(data);\n },\n\n get header() {\n return _entryHeader;\n },\n\n packHeader : function() {\n var header = _entryHeader.entryHeaderToBinary();\n // add\n _entryName.copy(header, Utils.Constants.CENHDR);\n if (_entryHeader.extraLength) {\n _extra.copy(header, Utils.Constants.CENHDR + _entryName.length)\n }\n if (_entryHeader.commentLength) {\n _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length);\n }\n return header;\n },\n\n toString : function() {\n return '{\\n' +\n '\\t\"entryName\" : \"' + _entryName.toString() + \"\\\",\\n\" +\n '\\t\"name\" : \"' + (_isDirectory ? _entryName.toString().replace(/\\/$/, '').split(\"/\").pop() : _entryName.toString().split(\"/\").pop()) + \"\\\",\\n\" +\n '\\t\"comment\" : \"' + _comment.toString() + \"\\\",\\n\" +\n '\\t\"isDirectory\" : ' + _isDirectory + \",\\n\" +\n '\\t\"header\" : ' + _entryHeader.toString().replace(/\\t/mg, \"\\t\\t\").replace(/}/mg, \"\\t}\") + \",\\n\" +\n '\\t\"compressedData\" : <' + (input && input.length + \" bytes buffer\" || \"null\") + \">\\n\" +\n '\\t\"data\" : <' + (uncompressedData && uncompressedData.length + \" bytes buffer\" || \"null\") + \">\\n\" +\n '}';\n }\n }\n};\n","exports.EntryHeader = require(\"./entryHeader\");\r\nexports.MainHeader = require(\"./mainHeader\");\r\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","var charenc = {\n // UTF-8 encoding\n utf8: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n }\n },\n\n // Binary encoding\n bin: {\n // Convert a string to a byte array\n stringToBytes: function(str) {\n for (var bytes = [], i = 0; i < str.length; i++)\n bytes.push(str.charCodeAt(i) & 0xFF);\n return bytes;\n },\n\n // Convert a byte array to a string\n bytesToString: function(bytes) {\n for (var str = [], i = 0; i < bytes.length; i++)\n str.push(String.fromCharCode(bytes[i]));\n return str.join('');\n }\n }\n};\n\nmodule.exports = charenc;\n","import toInteger from '../_lib/toInteger/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be subtracted\n * @returns {Date} the new date with the weeks subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * var result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport default function subWeeks(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addWeeks(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addYears from '../addYears/index.js'\n\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * var result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport default function subYears(dirtyDate, dirtyAmount) {\n if (arguments.length < 2) {\n throw new TypeError(\n '2 arguments required, but only ' + arguments.length + ' present'\n )\n }\n\n var amount = toInteger(dirtyAmount)\n return addYears(dirtyDate, -amount)\n}\n","/**\n * helper to wait for all callbacks to complete; similar to `Promise.all`\n * exposed to metrics object for unit tests\n * @param {Array} requests\n * @param {Function} handler\n * @param {Function} callback\n */\nexports.async_all = function(requests, handler, callback) {\n var total = requests.length,\n errors = null,\n results = [],\n done = function (err, result) {\n if (err) {\n // errors are `null` unless there is an error, which allows for promisification\n errors = errors || [];\n errors.push(err);\n }\n results.push(result);\n if (--total === 0) {\n callback(errors, results)\n }\n };\n\n if (total === 0) {\n callback(errors, results);\n } else {\n for(var i = 0, l = requests.length; i < l; i++) {\n handler(requests[i], done);\n }\n }\n};\n\n/**\n * Validate type of time property, and convert to Unix timestamp if necessary\n * @param {Date|number} time - value to check\n * @returns {number} Unix timestamp\n */\nexports.ensure_timestamp = function(time) {\n if (!(time instanceof Date || typeof time === \"number\")) {\n throw new Error(\"`time` property must be a Date or Unix timestamp and is only required for `import` endpoint\");\n }\n return time instanceof Date ? Math.floor(time.getTime() / 1000) : time;\n};\n","/**\n * Mixin with profile-related helpers (for people and groups)\n */\n\nconst {ensure_timestamp} = require('./utils');\n\nfunction merge_modifiers(data, modifiers) {\n if (modifiers) {\n if (modifiers.$ignore_alias) {\n data.$ignore_alias = modifiers.$ignore_alias;\n }\n if (modifiers.$ignore_time) {\n data.$ignore_time = modifiers.$ignore_time;\n }\n if (modifiers.hasOwnProperty(\"$ip\")) {\n data.$ip = modifiers.$ip;\n }\n if (modifiers.hasOwnProperty(\"$time\")) {\n data.$time = ensure_timestamp(modifiers.$time);\n }\n }\n return data;\n};\nexports.merge_modifiers = merge_modifiers;\n\nexports.ProfileHelpers = (Base = Object) => class extends Base {\n get token() {\n return this.mixpanel.token;\n }\n\n get config() {\n return this.mixpanel.config;\n }\n\n _set(prop, to, modifiers, callback, {identifiers, set_once = false}) {\n let $set = {};\n\n if (typeof(prop) === 'object') {\n if (typeof(to) === 'object') {\n callback = modifiers;\n modifiers = to;\n } else {\n callback = to;\n }\n $set = prop;\n } else {\n $set[prop] = to;\n if (typeof(modifiers) === 'function' || !modifiers) {\n callback = modifiers;\n }\n }\n\n let data = {\n '$token': this.token,\n ...identifiers,\n };\n\n const set_key = set_once ? \"$set_once\" : \"$set\";\n data[set_key] = $set;\n\n if ('ip' in $set) {\n data.$ip = $set.ip;\n delete $set.ip;\n }\n\n if ($set.$ignore_time) {\n data.$ignore_time = $set.$ignore_time;\n delete $set.$ignore_time;\n }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.config.debug) {\n console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n }\n\n _delete_profile({identifiers, modifiers, callback}){\n let data = {\n '$delete': '',\n '$token': this.token,\n ...identifiers,\n };\n\n if (typeof(modifiers) === 'function') { callback = modifiers; }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.config.debug) {\n console.log(`Deleting profile ${JSON.stringify(identifiers)}`);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n }\n\n _remove({identifiers, data, modifiers, callback}) {\n let $remove = {};\n\n if (typeof(data) !== 'object' || Array.isArray(data)) {\n if (this.config.debug) {\n console.error(\"Invalid value passed to #remove - data must be an object with scalar values\");\n }\n return;\n }\n\n for (const [key, val] of Object.entries(data)) {\n if (typeof(val) === 'string' || typeof(val) === 'number') {\n $remove[key] = val;\n } else {\n if (this.config.debug) {\n console.error(\"Invalid argument passed to #remove - values must be scalar\");\n console.error(\"Passed \" + key + ':', val);\n }\n return;\n }\n }\n\n if (Object.keys($remove).length === 0) {\n return;\n }\n\n data = {\n '$remove': $remove,\n '$token': this.token,\n ...identifiers\n };\n\n if (typeof(modifiers) === 'function') {\n callback = modifiers;\n }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.config.debug) {\n console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n }\n\n _union({identifiers, data, modifiers, callback}) {\n let $union = {};\n\n if (typeof(data) !== 'object' || Array.isArray(data)) {\n if (this.config.debug) {\n console.error(\"Invalid value passed to #union - data must be an object with scalar or array values\");\n }\n return;\n }\n\n for (const [key, val] of Object.entries(data)) {\n if (Array.isArray(val)) {\n var merge_values = val.filter(function(v) {\n return typeof(v) === 'string' || typeof(v) === 'number';\n });\n if (merge_values.length > 0) {\n $union[key] = merge_values;\n }\n } else if (typeof(val) === 'string' || typeof(val) === 'number') {\n $union[key] = [val];\n } else {\n if (this.config.debug) {\n console.error(\"Invalid argument passed to #union - values must be a scalar value or array\");\n console.error(\"Passed \" + key + ':', val);\n }\n }\n }\n\n if (Object.keys($union).length === 0) {\n return;\n }\n\n data = {\n '$union': $union,\n '$token': this.token,\n ...identifiers,\n };\n\n if (typeof(modifiers) === 'function') {\n callback = modifiers;\n }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.config.debug) {\n console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n }\n\n _unset({identifiers, prop, modifiers, callback}){\n let $unset = [];\n\n if (Array.isArray(prop)) {\n $unset = prop;\n } else if (typeof(prop) === 'string') {\n $unset = [prop];\n } else {\n if (this.config.debug) {\n console.error(\"Invalid argument passed to #unset - must be a string or array\");\n console.error(\"Passed: \" + prop);\n }\n return;\n }\n\n let data = {\n '$unset': $unset,\n '$token': this.token,\n ...identifiers,\n };\n\n if (typeof(modifiers) === 'function') {\n callback = modifiers;\n }\n\n data = merge_modifiers(data, modifiers);\n\n if (this.config.debug) {\n console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n console.log(data);\n }\n\n this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n }\n};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.hasIndices) {\n\t\tresult += 'd';\n\t}\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function getPolyfill() {\n\tif (supportsDescriptors && (/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar strValue = String.prototype.valueOf;\nvar tryStringObject = function tryStringObject(value) {\n\ttry {\n\t\tstrValue.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar strClass = '[object String]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isString(value) {\n\tif (typeof value === 'string') {\n\t\treturn true;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass;\n};\n","'use strict';\n\nvar $Map = typeof Map === 'function' && Map.prototype ? Map : null;\nvar $Set = typeof Set === 'function' && Set.prototype ? Set : null;\n\nvar exported;\n\nif (!$Map) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isMap(x) {\n\t\t// `Map` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $Map ? Map.prototype.has : null;\nvar $setHas = $Set ? Set.prototype.has : null;\nif (!exported && !$mapHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isMap(x) {\n\t\t// `Map` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isMap(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$mapHas.call(x);\n\t\tif ($setHas) {\n\t\t\ttry {\n\t\t\t\t$setHas.call(x);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $Map; // core-js workaround, pre-v2.5.0\n\t} catch (e) {}\n\treturn false;\n};\n","'use strict';\n\nvar $Map = typeof Map === 'function' && Map.prototype ? Map : null;\nvar $Set = typeof Set === 'function' && Set.prototype ? Set : null;\n\nvar exported;\n\nif (!$Set) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isSet(x) {\n\t\t// `Set` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $Map ? Map.prototype.has : null;\nvar $setHas = $Set ? Set.prototype.has : null;\nif (!exported && !$setHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isSet(x) {\n\t\t// `Set` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isSet(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$setHas.call(x);\n\t\tif ($mapHas) {\n\t\t\ttry {\n\t\t\t\t$mapHas.call(x);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $Set; // core-js workaround, pre-v2.5.0\n\t} catch (e) {}\n\treturn false;\n};\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = require('has-symbols/shams')();\nvar callBound = require('call-bind/callBound');\nvar toObject = Object;\nvar $push = callBound('Array.prototype.push');\nvar $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');\nvar originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms, value, key;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tvar getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);\n\t\tif (getSymbols) {\n\t\t\tsyms = getSymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tkey = syms[i];\n\t\t\t\tif ($propIsEnumerable(source, key)) {\n\t\t\t\t\t$push(props, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tkey = props[i];\n\t\t\tvalue = source[key];\n\t\t\tif ($propIsEnumerable(source, key)) {\n\t\t\t\tobjTarget[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn objTarget;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t/*\n\t * v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t * note: this does not detect the bug unless there's 20 characters\n\t */\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t/*\n\t * Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t * which is 72% slower than our shim, and Firefox 40's native implementation.\n\t */\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n\treturn false;\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","exports.require = function () {\n if (typeof process === \"object\" && process.versions && process.versions[\"electron\"]) {\n try {\n const originalFs = require(\"original-fs\");\n if (Object.keys(originalFs).length > 0) {\n return originalFs;\n }\n } catch (e) {}\n }\n return require(\"fs\");\n};\n","module.exports = {\n /* The local file header */\n LOCHDR : 30, // LOC header size\n LOCSIG : 0x04034b50, // \"PK\\003\\004\"\n LOCVER : 4,\t// version needed to extract\n LOCFLG : 6, // general purpose bit flag\n LOCHOW : 8, // compression method\n LOCTIM : 10, // modification time (2 bytes time, 2 bytes date)\n LOCCRC : 14, // uncompressed file crc-32 value\n LOCSIZ : 18, // compressed size\n LOCLEN : 22, // uncompressed size\n LOCNAM : 26, // filename length\n LOCEXT : 28, // extra field length\n\n /* The Data descriptor */\n EXTSIG : 0x08074b50, // \"PK\\007\\008\"\n EXTHDR : 16, // EXT header size\n EXTCRC : 4, // uncompressed file crc-32 value\n EXTSIZ : 8, // compressed size\n EXTLEN : 12, // uncompressed size\n\n /* The central directory file header */\n CENHDR : 46, // CEN header size\n CENSIG : 0x02014b50, // \"PK\\001\\002\"\n CENVEM : 4, // version made by\n CENVER : 6, // version needed to extract\n CENFLG : 8, // encrypt, decrypt flags\n CENHOW : 10, // compression method\n CENTIM : 12, // modification time (2 bytes time, 2 bytes date)\n CENCRC : 16, // uncompressed file crc-32 value\n CENSIZ : 20, // compressed size\n CENLEN : 24, // uncompressed size\n CENNAM : 28, // filename length\n CENEXT : 30, // extra field length\n CENCOM : 32, // file comment length\n CENDSK : 34, // volume number start\n CENATT : 36, // internal file attributes\n CENATX : 38, // external file attributes (host system dependent)\n CENOFF : 42, // LOC header offset\n\n /* The entries in the end of central directory */\n ENDHDR : 22, // END header size\n ENDSIG : 0x06054b50, // \"PK\\005\\006\"\n ENDSUB : 8, // number of entries on this disk\n ENDTOT : 10, // total number of entries\n ENDSIZ : 12, // central directory size in bytes\n ENDOFF : 16, // offset of first CEN header\n ENDCOM : 20, // zip file comment length\n\n END64HDR : 20, // zip64 END header size\n END64SIG : 0x07064b50, // zip64 Locator signature, \"PK\\006\\007\"\n END64START : 4, // number of the disk with the start of the zip64\n END64OFF : 8, // relative offset of the zip64 end of central directory\n END64NUMDISKS : 16, // total number of disks\n\n ZIP64SIG : 0x06064b50, // zip64 signature, \"PK\\006\\006\"\n ZIP64HDR : 56, // zip64 record minimum size\n ZIP64LEAD : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE\n ZIP64SIZE : 4, // zip64 size of the central directory record\n ZIP64VEM : 12, // zip64 version made by\n ZIP64VER : 14, // zip64 version needed to extract\n ZIP64DSK : 16, // zip64 number of this disk\n ZIP64DSKDIR : 20, // number of the disk with the start of the record directory\n ZIP64SUB : 24, // number of entries on this disk\n ZIP64TOT : 32, // total number of entries\n ZIP64SIZB : 40, // zip64 central directory size in bytes\n ZIP64OFF : 48, // offset of start of central directory with respect to the starting disk number\n ZIP64EXTRA : 56, // extensible data sector\n\n /* Compression methods */\n STORED : 0, // no compression\n SHRUNK : 1, // shrunk\n REDUCED1 : 2, // reduced with compression factor 1\n REDUCED2 : 3, // reduced with compression factor 2\n REDUCED3 : 4, // reduced with compression factor 3\n REDUCED4 : 5, // reduced with compression factor 4\n IMPLODED : 6, // imploded\n // 7 reserved for Tokenizing compression algorithm\n DEFLATED : 8, // deflated\n ENHANCED_DEFLATED: 9, // enhanced deflated\n PKWARE : 10,// PKWare DCL imploded\n // 11 reserved by PKWARE\n BZIP2 : 12, // compressed using BZIP2\n // 13 reserved by PKWARE\n LZMA : 14, // LZMA\n // 15-17 reserved by PKWARE\n IBM_TERSE : 18, // compressed using IBM TERSE\n IBM_LZ77 : 19, // IBM LZ77 z\n AES_ENCRYPT : 99, // WinZIP AES encryption method\n\n /* General purpose bit flag */\n // values can obtained with expression 2**bitnr\n FLG_ENC : 1, // Bit 0: encrypted file\n FLG_COMP1 : 2, // Bit 1, compression option\n FLG_COMP2 : 4, // Bit 2, compression option\n FLG_DESC : 8, // Bit 3, data descriptor\n FLG_ENH : 16, // Bit 4, enhanced deflating\n FLG_PATCH : 32, // Bit 5, indicates that the file is compressed patched data.\n FLG_STR : 64, // Bit 6, strong encryption (patented)\n // Bits 7-10: Currently unused.\n FLG_EFS : 2048, // Bit 11: Language encoding flag (EFS)\n // Bit 12: Reserved by PKWARE for enhanced compression.\n // Bit 13: encrypted the Central Directory (patented).\n // Bits 14-15: Reserved by PKWARE.\n FLG_MSK : 4096, // mask header values\n\n /* Load type */\n FILE : 2,\n BUFFER : 1,\n NONE : 0,\n\n /* 4.5 Extensible data fields */\n EF_ID : 0,\n EF_SIZE : 2,\n\n /* Header IDs */\n ID_ZIP64 : 0x0001,\n ID_AVINFO : 0x0007,\n ID_PFS : 0x0008,\n ID_OS2 : 0x0009,\n ID_NTFS : 0x000a,\n ID_OPENVMS : 0x000c,\n ID_UNIX : 0x000d,\n ID_FORK : 0x000e,\n ID_PATCH : 0x000f,\n ID_X509_PKCS7 : 0x0014,\n ID_X509_CERTID_F : 0x0015,\n ID_X509_CERTID_C : 0x0016,\n ID_STRONGENC : 0x0017,\n ID_RECORD_MGT : 0x0018,\n ID_X509_PKCS7_RL : 0x0019,\n ID_IBM1 : 0x0065,\n ID_IBM2 : 0x0066,\n ID_POSZIP : 0x4690,\n\n EF_ZIP64_OR_32 : 0xffffffff,\n EF_ZIP64_OR_16 : 0xffff,\n EF_ZIP64_SUNCOMP : 0,\n EF_ZIP64_SCOMP : 8,\n EF_ZIP64_RHO : 16,\n EF_ZIP64_DSN : 24\n};\n","var Utils = require(\"./util\"),\n Headers = require(\"./headers\"),\n Constants = Utils.Constants,\n Methods = require(\"./methods\");\n\nmodule.exports = function (/*Buffer*/ input) {\n var _entryHeader = new Headers.EntryHeader(),\n _entryName = Buffer.alloc(0),\n _comment = Buffer.alloc(0),\n _isDirectory = false,\n uncompressedData = null,\n _extra = Buffer.alloc(0);\n\n function getCompressedDataFromZip() {\n if (!input || !Buffer.isBuffer(input)) {\n return Buffer.alloc(0);\n }\n _entryHeader.loadDataHeaderFromBinary(input);\n return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);\n }\n\n function crc32OK(data) {\n // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written\n if ((_entryHeader.flags & 0x8) !== 0x8) {\n if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {\n return false;\n }\n } else {\n // @TODO: load and check data descriptor header\n // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure\n // (optionally preceded by a 4-byte signature) immediately after the compressed data:\n }\n return true;\n }\n\n function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {\n if (typeof callback === \"undefined\" && typeof async === \"string\") {\n pass = async;\n async = void 0;\n }\n if (_isDirectory) {\n if (async && callback) {\n callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.\n }\n return Buffer.alloc(0);\n }\n\n var compressedData = getCompressedDataFromZip();\n\n if (compressedData.length === 0) {\n // File is empty, nothing to decompress.\n if (async && callback) callback(compressedData);\n return compressedData;\n }\n\n if (_entryHeader.encripted) {\n if (\"string\" !== typeof pass && !Buffer.isBuffer(pass)) {\n throw new Error(\"ADM-ZIP: Incompatible password parameter\");\n }\n compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass);\n }\n\n var data = Buffer.alloc(_entryHeader.size);\n\n switch (_entryHeader.method) {\n case Utils.Constants.STORED:\n compressedData.copy(data);\n if (!crc32OK(data)) {\n if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error\n throw new Error(Utils.Errors.BAD_CRC);\n } else {\n //si added otherwise did not seem to return data.\n if (async && callback) callback(data);\n return data;\n }\n case Utils.Constants.DEFLATED:\n var inflater = new Methods.Inflater(compressedData);\n if (!async) {\n const result = inflater.inflate(data);\n result.copy(data, 0);\n if (!crc32OK(data)) {\n throw new Error(Utils.Errors.BAD_CRC + \" \" + _entryName.toString());\n }\n return data;\n } else {\n inflater.inflateAsync(function (result) {\n result.copy(result, 0);\n if (callback) {\n if (!crc32OK(result)) {\n callback(result, Utils.Errors.BAD_CRC); //si added error\n } else {\n callback(result);\n }\n }\n });\n }\n break;\n default:\n if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);\n throw new Error(Utils.Errors.UNKNOWN_METHOD);\n }\n }\n\n function compress(/*Boolean*/ async, /*Function*/ callback) {\n if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n // no data set or the data wasn't changed to require recompression\n if (async && callback) callback(getCompressedDataFromZip());\n return getCompressedDataFromZip();\n }\n\n if (uncompressedData.length && !_isDirectory) {\n var compressedData;\n // Local file header\n switch (_entryHeader.method) {\n case Utils.Constants.STORED:\n _entryHeader.compressedSize = _entryHeader.size;\n\n compressedData = Buffer.alloc(uncompressedData.length);\n uncompressedData.copy(compressedData);\n\n if (async && callback) callback(compressedData);\n return compressedData;\n default:\n case Utils.Constants.DEFLATED:\n var deflater = new Methods.Deflater(uncompressedData);\n if (!async) {\n var deflated = deflater.deflate();\n _entryHeader.compressedSize = deflated.length;\n return deflated;\n } else {\n deflater.deflateAsync(function (data) {\n compressedData = Buffer.alloc(data.length);\n _entryHeader.compressedSize = data.length;\n data.copy(compressedData);\n callback && callback(compressedData);\n });\n }\n deflater = null;\n break;\n }\n } else if (async && callback) {\n callback(Buffer.alloc(0));\n } else {\n return Buffer.alloc(0);\n }\n }\n\n function readUInt64LE(buffer, offset) {\n return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n }\n\n function parseExtra(data) {\n var offset = 0;\n var signature, size, part;\n while (offset < data.length) {\n signature = data.readUInt16LE(offset);\n offset += 2;\n size = data.readUInt16LE(offset);\n offset += 2;\n part = data.slice(offset, offset + size);\n offset += size;\n if (Constants.ID_ZIP64 === signature) {\n parseZip64ExtendedInformation(part);\n }\n }\n }\n\n //Override header field values with values from the ZIP64 extra field\n function parseZip64ExtendedInformation(data) {\n var size, compressedSize, offset, diskNumStart;\n\n if (data.length >= Constants.EF_ZIP64_SCOMP) {\n size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {\n _entryHeader.size = size;\n }\n }\n if (data.length >= Constants.EF_ZIP64_RHO) {\n compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n _entryHeader.compressedSize = compressedSize;\n }\n }\n if (data.length >= Constants.EF_ZIP64_DSN) {\n offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {\n _entryHeader.offset = offset;\n }\n }\n if (data.length >= Constants.EF_ZIP64_DSN + 4) {\n diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n _entryHeader.diskNumStart = diskNumStart;\n }\n }\n }\n\n return {\n get entryName() {\n return _entryName.toString();\n },\n get rawEntryName() {\n return _entryName;\n },\n set entryName(val) {\n _entryName = Utils.toBuffer(val);\n var lastChar = _entryName[_entryName.length - 1];\n _isDirectory = lastChar === 47 || lastChar === 92;\n _entryHeader.fileNameLength = _entryName.length;\n },\n\n get extra() {\n return _extra;\n },\n set extra(val) {\n _extra = val;\n _entryHeader.extraLength = val.length;\n parseExtra(val);\n },\n\n get comment() {\n return _comment.toString();\n },\n set comment(val) {\n _comment = Utils.toBuffer(val);\n _entryHeader.commentLength = _comment.length;\n },\n\n get name() {\n var n = _entryName.toString();\n return _isDirectory\n ? n\n .substr(n.length - 1)\n .split(\"/\")\n .pop()\n : n.split(\"/\").pop();\n },\n get isDirectory() {\n return _isDirectory;\n },\n\n getCompressedData: function () {\n return compress(false, null);\n },\n\n getCompressedDataAsync: function (/*Function*/ callback) {\n compress(true, callback);\n },\n\n setData: function (value) {\n uncompressedData = Utils.toBuffer(value);\n if (!_isDirectory && uncompressedData.length) {\n _entryHeader.size = uncompressedData.length;\n _entryHeader.method = Utils.Constants.DEFLATED;\n _entryHeader.crc = Utils.crc32(value);\n _entryHeader.changed = true;\n } else {\n // folders and blank files should be stored\n _entryHeader.method = Utils.Constants.STORED;\n }\n },\n\n getData: function (pass) {\n if (_entryHeader.changed) {\n return uncompressedData;\n } else {\n return decompress(false, null, pass);\n }\n },\n\n getDataAsync: function (/*Function*/ callback, pass) {\n if (_entryHeader.changed) {\n callback(uncompressedData);\n } else {\n decompress(true, callback, pass);\n }\n },\n\n set attr(attr) {\n _entryHeader.attr = attr;\n },\n get attr() {\n return _entryHeader.attr;\n },\n\n set header(/*Buffer*/ data) {\n _entryHeader.loadFromBinary(data);\n },\n\n get header() {\n return _entryHeader;\n },\n\n packHeader: function () {\n // 1. create header (buffer)\n var header = _entryHeader.entryHeaderToBinary();\n var addpos = Utils.Constants.CENHDR;\n // 2. add file name\n _entryName.copy(header, addpos);\n addpos += _entryName.length;\n // 3. add extra data\n if (_entryHeader.extraLength) {\n _extra.copy(header, addpos);\n addpos += _entryHeader.extraLength;\n }\n // 4. add file comment\n if (_entryHeader.commentLength) {\n _comment.copy(header, addpos);\n }\n return header;\n },\n\n toJSON: function () {\n const bytes = function (nr) {\n return \"<\" + ((nr && nr.length + \" bytes buffer\") || \"null\") + \">\";\n };\n\n return {\n entryName: this.entryName,\n name: this.name,\n comment: this.comment,\n isDirectory: this.isDirectory,\n header: _entryHeader.toJSON(),\n compressedData: bytes(input),\n data: bytes(uncompressedData)\n };\n },\n\n toString: function () {\n return JSON.stringify(this.toJSON(), null, \"\\t\");\n }\n };\n};\n","exports.EntryHeader = require(\"./entryHeader\");\nexports.MainHeader = require(\"./mainHeader\");\n","const q = require('./app/query');\nconst injected = require('./injected');\n\nfunction send(name, args) {\n return injected.send(name, args);\n}\n\nasync function runImport(name, func) {\n await send('api/start-import', { budgetName: name });\n try {\n await func();\n } catch (e) {\n await send('api/abort-import');\n throw e;\n }\n await send('api/finish-import');\n}\n\nasync function loadBudget(budgetId) {\n return send('api/load-budget', { id: budgetId });\n}\n\nasync function batchBudgetUpdates(func) {\n await send('api/batch-budget-start');\n try {\n await func();\n } finally {\n await send('api/batch-budget-end');\n }\n}\n\nfunction runQuery(query) {\n return send('api/query', { query: query.serialize() });\n}\n\nfunction getBudgetMonths() {\n return send('api/budget-months');\n}\n\nfunction getBudgetMonth(month) {\n return send('api/budget-month', { month });\n}\n\nfunction setBudgetAmount(month, categoryId, value) {\n return send('api/budget-set-amount', { month, categoryId, amount: value });\n}\n\nfunction setBudgetCarryover(month, categoryId, flag) {\n return send('api/budget-set-carryover', { month, categoryId, flag });\n}\n\nfunction addTransactions(accountId, transactions) {\n return send('api/transactions-add', { accountId, transactions });\n}\n\nfunction importTransactions(accountId, transactions) {\n return send('api/transactions-import', { accountId, transactions });\n}\n\nfunction getTransactions(accountId, startDate, endDate) {\n return send('api/transactions-get', { accountId, startDate, endDate });\n}\n\nfunction filterTransactions(accountId, text) {\n return send('api/transactions-filter', { accountId, text });\n}\n\nfunction updateTransaction(id, fields) {\n return send('api/transaction-update', { id, fields });\n}\n\nfunction deleteTransaction(id) {\n return send('api/transaction-delete', { id });\n}\n\nfunction getAccounts() {\n return send('api/accounts-get');\n}\n\nfunction createAccount(account, initialBalance) {\n return send('api/account-create', { account, initialBalance });\n}\n\nfunction updateAccount(id, fields) {\n return send('api/account-update', { id, fields });\n}\n\nfunction closeAccount(id, transferAccountId, transferCategoryId) {\n return send('api/account-close', {\n id,\n transferAccountId,\n transferCategoryId\n });\n}\n\nfunction reopenAccount(id) {\n return send('api/account-reopen', { id });\n}\n\nfunction deleteAccount(id) {\n return send('api/account-delete', { id });\n}\n\nfunction getCategoryGroups() {\n return send('api/categories-get', { grouped: true });\n}\n\nfunction createCategoryGroup(group) {\n return send('api/category-group-create', { group });\n}\n\nfunction updateCategoryGroup(id, fields) {\n return send('api/category-group-update', { id, fields });\n}\n\nfunction deleteCategoryGroup(id, transferCategoryId) {\n return send('api/category-group-delete', { id, transferCategoryId });\n}\n\nfunction getCategories() {\n return send('api/categories-get', { grouped: false });\n}\n\nfunction createCategory(category) {\n return send('api/category-create', { category });\n}\n\nfunction updateCategory(id, fields) {\n return send('api/category-update', { id, fields });\n}\n\nfunction deleteCategory(id, transferCategoryId) {\n return send('api/category-delete', { id, transferCategoryId });\n}\n\nfunction getPayees() {\n return send('api/payees-get');\n}\n\nfunction createPayee(payee) {\n return send('api/payee-create', { payee });\n}\n\nfunction updatePayee(id, fields) {\n return send('api/payee-update', { id, fields });\n}\n\nfunction deletePayee(id) {\n return send('api/payee-delete', { id });\n}\n\nfunction getPayeeRules(payeeId) {\n return send('api/payee-rules-get', { payeeId });\n}\n\nfunction createPayeeRule(payeeId, rule) {\n return send('api/payee-rule-create', { payee_id: payeeId, rule });\n}\n\nfunction updatePayeeRule(id, fields) {\n return send('api/payee-rule-update', { id, fields });\n}\n\nfunction deletePayeeRule(id) {\n return send('api/payee-rule-delete', { id });\n}\n\nmodule.exports = {\n runImport,\n\n runQuery,\n q,\n\n loadBudget,\n batchBudgetUpdates,\n getBudgetMonths,\n getBudgetMonth,\n setBudgetAmount,\n setBudgetCarryover,\n\n addTransactions,\n importTransactions,\n filterTransactions,\n getTransactions,\n updateTransaction,\n deleteTransaction,\n\n getAccounts,\n createAccount,\n updateAccount,\n closeAccount,\n reopenAccount,\n deleteAccount,\n\n getCategories,\n createCategoryGroup,\n updateCategoryGroup,\n deleteCategoryGroup,\n createCategory,\n updateCategory,\n deleteCategory,\n\n getPayees,\n createPayee,\n updatePayee,\n deletePayee,\n getPayeeRules,\n createPayeeRule,\n deletePayeeRule,\n updatePayeeRule\n};\n","\n// We are modularizing this manually because the current modularize setting in Emscripten has some issues:\n// https://github.com/kripken/emscripten/issues/5820\n// In addition, When you use emcc's modularization, it still expects to export a global object called `Module`,\n// which is able to be used/called before the WASM is loaded.\n// The modularization below exports a promise that loads and resolves to the actual sql.js module.\n// That way, this module can't be used before the WASM is finished loading.\n\n// We are going to define a function that a user will call to start loading initializing our Sql.js library\n// However, that function might be called multiple times, and on subsequent calls, we don't actually want it to instantiate a new instance of the Module\n// Instead, we want to return the previously loaded module\n\n// TODO: Make this not declare a global if used in the browser\nvar initSqlJsPromise = undefined;\n\nvar initSqlJs = function (moduleConfig) {\n\n if (initSqlJsPromise){\n return initSqlJsPromise;\n }\n // If we're here, we've never called this function before\n initSqlJsPromise = new Promise(function (resolveModule, reject) {\n\n // We are modularizing this manually because the current modularize setting in Emscripten has some issues:\n // https://github.com/kripken/emscripten/issues/5820\n\n // The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add\n // properties to it, like `preRun`, `postRun`, etc\n // We are using that to get notified when the WASM has finished loading.\n // Only then will we return our promise\n\n // If they passed in a moduleConfig object, use that\n // Otherwise, initialize Module to the empty object\n var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {};\n\n // EMCC only allows for a single onAbort function (not an array of functions)\n // So if the user defined their own onAbort function, we remember it and call it\n var originalOnAbortFunction = Module['onAbort'];\n Module['onAbort'] = function (errorThatCausedAbort) {\n reject(new Error(errorThatCausedAbort));\n if (originalOnAbortFunction){\n originalOnAbortFunction(errorThatCausedAbort);\n }\n };\n\n Module['postRun'] = Module['postRun'] || [];\n Module['postRun'].push(function () {\n // When Emscripted calls postRun, this promise resolves with the built Module\n resolveModule(Module);\n });\n\n // There is a section of code in the emcc-generated code below that looks like this:\n // (Note that this is lowercase `module`)\n // if (typeof module !== 'undefined') {\n // module['exports'] = Module;\n // }\n // When that runs, it's going to overwrite our own modularization export efforts in shell-post.js!\n // The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags,\n // but that carries with it additional unnecessary baggage/bugs we don't want either.\n // So, we have three options:\n // 1) We undefine `module`\n // 2) We remember what `module['exports']` was at the beginning of this function and we restore it later\n // 3) We write a script to remove those lines of code as part of the Make process.\n //\n // Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward\n // of the options, and has the side effect of reducing emcc's efforts to modify the module if its output were to change in the future.\n // That's a nice side effect since we're handling the modularization efforts ourselves\n module = undefined;\n\n // The emcc-generated code and shell-post.js code goes below,\n // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort\n\nvar Module;Module||(Module=typeof Module !== 'undefined' ? Module : {});null;\nModule.onRuntimeInitialized=function(){function a(h,n){this.Qa=h;this.db=n;this.Pa=1;this.wb=[]}function b(h,n){this.db=n;n=d(h)+1;this.hb=aa(n);if(null===this.hb)throw Error(\"Unable to allocate memory for the SQL string\");p(h,u,this.hb,n);this.sb=this.hb;this.eb=this.Mb=null}function c(h,{filename:n=!1}={}){!1===n?(this.filename=\"dbfile_\"+(4294967295*Math.random()>>>0),this.Xc=!0,null!=h&&w.zb(\"/\",this.filename,h,!0,!0)):this.filename=h;this.handleError(g(this.filename,e));this.db=z(e,\"i32\");Cb(this.db);\nthis.nb={};this.Xa={}}var e=C(4),f=Module.cwrap,g=f(\"sqlite3_open\",\"number\",[\"string\",\"number\"]),k=f(\"sqlite3_close_v2\",\"number\",[\"number\"]),l=f(\"sqlite3_exec\",\"number\",[\"number\",\"string\",\"number\",\"number\",\"number\"]),q=f(\"sqlite3_changes\",\"number\",[\"number\"]),m=f(\"sqlite3_prepare_v2\",\"number\",[\"number\",\"string\",\"number\",\"number\",\"number\"]),r=f(\"sqlite3_sql\",\"string\",[\"number\"]),x=f(\"sqlite3_normalized_sql\",\"string\",[\"number\"]),B=f(\"sqlite3_prepare_v2\",\"number\",[\"number\",\"number\",\"number\",\"number\",\n\"number\"]),E=f(\"sqlite3_bind_text\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]),A=f(\"sqlite3_bind_blob\",\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"]),J=f(\"sqlite3_bind_double\",\"number\",[\"number\",\"number\",\"number\"]),Z=f(\"sqlite3_bind_int\",\"number\",[\"number\",\"number\",\"number\"]),U=f(\"sqlite3_bind_parameter_index\",\"number\",[\"number\",\"string\"]),Ka=f(\"sqlite3_step\",\"number\",[\"number\"]),G=f(\"sqlite3_errmsg\",\"string\",[\"number\"]),Db=f(\"sqlite3_column_count\",\"number\",[\"number\"]),Eb=f(\"sqlite3_data_count\",\n\"number\",[\"number\"]),Fb=f(\"sqlite3_column_double\",\"number\",[\"number\",\"number\"]),Gb=f(\"sqlite3_column_text\",\"string\",[\"number\",\"number\"]),Hb=f(\"sqlite3_column_blob\",\"number\",[\"number\",\"number\"]),Ib=f(\"sqlite3_column_bytes\",\"number\",[\"number\",\"number\"]),Jb=f(\"sqlite3_column_type\",\"number\",[\"number\",\"number\"]),Kb=f(\"sqlite3_column_name\",\"string\",[\"number\",\"number\"]),Lb=f(\"sqlite3_reset\",\"number\",[\"number\"]),Mb=f(\"sqlite3_clear_bindings\",\"number\",[\"number\"]),Nb=f(\"sqlite3_finalize\",\"number\",[\"number\"]),\nOb=f(\"sqlite3_create_function_v2\",\"number\",\"number string number number number number number number number\".split(\" \")),Pb=f(\"sqlite3_value_type\",\"number\",[\"number\"]),Qb=f(\"sqlite3_value_bytes\",\"number\",[\"number\"]),Rb=f(\"sqlite3_value_text\",\"string\",[\"number\"]),Sb=f(\"sqlite3_value_blob\",\"number\",[\"number\"]),Tb=f(\"sqlite3_value_double\",\"number\",[\"number\"]),Ub=f(\"sqlite3_result_double\",\"\",[\"number\",\"number\"]),db=f(\"sqlite3_result_null\",\"\",[\"number\"]),Vb=f(\"sqlite3_result_text\",\"\",[\"number\",\"string\",\n\"number\",\"number\"]),Wb=f(\"sqlite3_result_blob\",\"\",[\"number\",\"number\",\"number\",\"number\"]),Xb=f(\"sqlite3_result_int\",\"\",[\"number\",\"number\"]),eb=f(\"sqlite3_result_error\",\"\",[\"number\",\"string\",\"number\"]),Cb=f(\"RegisterExtensionFunctions\",\"number\",[\"number\"]);a.prototype.bind=function(h){if(!this.Qa)throw\"Statement closed\";this.reset();return Array.isArray(h)?this.vc(h):null!=h&&\"object\"===typeof h?this.wc(h):!0};a.prototype.step=function(){if(!this.Qa)throw\"Statement closed\";this.Pa=1;var h=Ka(this.Qa);\nswitch(h){case 100:return!0;case 101:return!1;default:throw this.db.handleError(h);}};a.prototype.Pc=function(h){null==h&&(h=this.Pa,this.Pa+=1);return Fb(this.Qa,h)};a.prototype.Qc=function(h){null==h&&(h=this.Pa,this.Pa+=1);return Gb(this.Qa,h)};a.prototype.getBlob=function(h){null==h&&(h=this.Pa,this.Pa+=1);var n=Ib(this.Qa,h);h=Hb(this.Qa,h);for(var t=new Uint8Array(n),v=0;v{let n=la(function(y,N){y=ra.get(y);return h.lock(y,N)?0:5},\"iii\"),t=la(function(y,N){y=ra.get(y);h.unlock(y,N);return 0},\"iii\"),v=la(function(y,N){y=F(y);ra.set(N,y)},\"vii\");Module._register_for_idb(n,t,v)};Module.cleanup_file=h=>{let n=[...ra.entries()].find(t=>t[1]===h);ra.delete(n[0])};Module.reset_filesystem=()=>{w.root=null;w.lc()}};var ma={},K;for(K in Module)Module.hasOwnProperty(K)&&(ma[K]=Module[K]);\nvar na=\"./this.program\",oa=\"object\"===typeof window,pa=\"function\"===typeof importScripts,qa=\"object\"===typeof process&&\"object\"===typeof process.versions&&\"string\"===typeof process.versions.node,L=\"\",sa,ta,ua,va,wa;\nif(qa)L=pa?require(\"path\").dirname(L)+\"/\":__dirname+\"/\",sa=function(a,b){va||(va=require(\"fs\"));wa||(wa=require(\"path\"));a=wa.normalize(a);return va.readFileSync(a,b?null:\"utf8\")},ua=function(a){a=sa(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a},ta=function(a,b,c){va||(va=require(\"fs\"));wa||(wa=require(\"path\"));a=wa.normalize(a);va.readFile(a,function(e,f){e?c(e):b(f.buffer)})},1>0]=0;break;case \"i8\":D[a>>0]=0;break;case \"i16\":Ca[a>>1]=0;break;case \"i32\":Q[a>>2]=0;break;case \"i64\":R=[0,(T=0,1<=+Math.abs(T)?0>>0:~~+Math.ceil((T-+(~~T>>>0))/4294967296)>>>0:0)];Q[a>>2]=R[0];Q[a+4>>2]=R[1];break;case \"float\":Da[a>>2]=0;break;case \"double\":Ea[a>>3]=0;break;default:P(\"invalid type for setValue: \"+b)}}\nfunction z(a,b){b=b||\"i8\";\"*\"===b.charAt(b.length-1)&&(b=\"i32\");switch(b){case \"i1\":return D[a>>0];case \"i8\":return D[a>>0];case \"i16\":return Ca[a>>1];case \"i32\":return Q[a>>2];case \"i64\":return Q[a>>2];case \"float\":return Da[a>>2];case \"double\":return Ea[a>>3];default:P(\"invalid type for getValue: \"+b)}return null}var Fa,Ga=!1;function assert(a,b){a||P(\"Assertion failed: \"+b)}function Ha(a){var b=Module[\"_\"+a];assert(b,\"Cannot call unknown function \"+a+\", make sure it is exported\");return b}\nfunction Ia(a,b,c,e){var f={string:function(m){var r=0;if(null!==m&&void 0!==m&&0!==m){var x=(m.length<<2)+1;r=C(x);p(m,u,r,x)}return r},array:function(m){var r=C(m.length);D.set(m,r);return r}},g=Ha(a),k=[];a=0;if(e)for(var l=0;l=e);)++c;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e}function F(a,b){return a?Na(u,a,b):\"\"}\nfunction p(a,b,c,e){if(!(0=k){var l=a.charCodeAt(++g);k=65536+((k&1023)<<10)|l&1023}if(127>=k){if(c>=e)break;b[c++]=k}else{if(2047>=k){if(c+1>=e)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=e)break;b[c++]=224|k>>12}else{if(c+3>=e)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-f}\nfunction d(a){for(var b=0,c=0;c=e&&(e=65536+((e&1023)<<10)|a.charCodeAt(++c)&1023);127>=e?++b:b=2047>=e?b+2:65535>=e?b+3:b+4}return b}function Oa(a){var b=d(a)+1,c=aa(b);c&&p(a,D,c,b);return c}var Pa,D,u,Ca,Q,Da,Ea;\nfunction Qa(){var a=Fa.buffer;Pa=a;Module.HEAP8=D=new Int8Array(a);Module.HEAP16=Ca=new Int16Array(a);Module.HEAP32=Q=new Int32Array(a);Module.HEAPU8=u=new Uint8Array(a);Module.HEAPU16=new Uint16Array(a);Module.HEAPU32=new Uint32Array(a);Module.HEAPF32=Da=new Float32Array(a);Module.HEAPF64=Ea=new Float64Array(a)}var O,Ra=[],Sa=[],Ta=[];function Ua(){var a=Module.preRun.shift();Ra.unshift(a)}var Va=0,Wa=null,Xa=null;\nfunction Ya(){Va++;Module.monitorRunDependencies&&Module.monitorRunDependencies(Va)}function Za(){Va--;Module.monitorRunDependencies&&Module.monitorRunDependencies(Va);if(0==Va&&(null!==Wa&&(clearInterval(Wa),Wa=null),Xa)){var a=Xa;Xa=null;a()}}Module.preloadedImages={};Module.preloadedAudios={};function P(a){if(Module.onAbort)Module.onAbort(a);M(a);Ga=!0;throw new WebAssembly.RuntimeError(\"abort(\"+a+\"). Build with -s ASSERTIONS=1 for more info.\");}\nfunction $a(){return V.startsWith(\"data:application/octet-stream;base64,\")}var V;V=\"sql-wasm.wasm\";if(!$a()){var ab=V;V=Module.locateFile?Module.locateFile(ab,L):L+ab}function bb(){var a=V;try{if(a==V&&Ba)return new Uint8Array(Ba);if(ua)return ua(a);throw\"both async and sync fetching of the wasm failed\";}catch(b){P(b)}}\nfunction cb(){if(!Ba&&(oa||pa)){if(\"function\"===typeof fetch&&!V.startsWith(\"file://\"))return fetch(V,{credentials:\"same-origin\"}).then(function(a){if(!a.ok)throw\"failed to load wasm binary file at '\"+V+\"'\";return a.arrayBuffer()}).catch(function(){return bb()});if(ta)return new Promise(function(a,b){ta(V,function(c){a(new Uint8Array(c))},b)})}return Promise.resolve().then(function(){return bb()})}var T,R;\nfunction gb(a){for(;0>2]=60*g;Q[lb()>>2]=Number(b!=f);c=a(c);e=a(e);c=Oa(c);e=Oa(e);f>2]=c,Q[mb()+4>>2]=e):(Q[mb()>>2]=e,Q[mb()+4>>2]=c)}}var jb;\nfunction nb(a,b){for(var c=0,e=a.length-1;0<=e;e--){var f=a[e];\".\"===f?a.splice(e,1):\"..\"===f?(a.splice(e,1),c++):c&&(a.splice(e,1),c--)}if(b)for(;c;c--)a.unshift(\"..\");return a}function ob(a){var b=\"/\"===a.charAt(0),c=\"/\"===a.substr(-1);(a=nb(a.split(\"/\").filter(function(e){return!!e}),!b).join(\"/\"))||b||(a=\".\");a&&c&&(a+=\"/\");return(b?\"/\":\"\")+a}\nfunction pb(a){var b=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return\".\";b&&(b=b.substr(0,b.length-1));return a+b}function W(a){if(\"/\"===a)return\"/\";a=ob(a);a=a.replace(/\\/$/,\"\");var b=a.lastIndexOf(\"/\");return-1===b?a:a.substr(b+1)}function qb(a,b){return ob(a+\"/\"+b)}\nfunction rb(){if(\"object\"===typeof crypto&&\"function\"===typeof crypto.getRandomValues){var a=new Uint8Array(1);return function(){crypto.getRandomValues(a);return a[0]}}if(qa)try{var b=require(\"crypto\");return function(){return b.randomBytes(1)[0]}}catch(c){}return function(){P(\"randomDevice\")}}\nfunction sb(){for(var a=\"\",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:w.cwd();if(\"string\"!==typeof b)throw new TypeError(\"Arguments to path.resolve must be strings\");if(!b)return\"\";a=b+\"/\"+a;b=\"/\"===b.charAt(0)}a=nb(a.split(\"/\").filter(function(e){return!!e}),!b).join(\"/\");return(b?\"/\":\"\")+a||\".\"}\nfunction tb(a,b){function c(k){for(var l=0;lq?[]:k.slice(l,q-l+1)}a=sb(a).substr(1);b=sb(b).substr(1);a=c(a.split(\"/\"));b=c(b.split(\"/\"));for(var e=Math.min(a.length,b.length),f=e,g=0;g=b||(b=Math.max(b,c*(1048576>c?2:1.125)>>>0),0!=c&&(b=Math.max(b,256)),c=a.Na,a.Na=new Uint8Array(b),0=\na.node.Ra)return 0;a=Math.min(a.node.Ra-f,e);if(8b)throw new w.ErrnoError(28);return b},allocate:function(a,b,c){X.Zb(a.node,b+c);a.node.Ra=Math.max(a.node.Ra,b+c)},mmap:function(a,b,c,e,f,g){if(0!==b)throw new w.ErrnoError(28);if(!w.isFile(a.node.mode))throw new w.ErrnoError(43);a=a.node.Na;if(g&2||a.buffer!==Pa){if(0>>0)%w.Ua.length},ec:function(a){var b=w.Gb(a.parent.id,a.name);a.cb=w.Ua[b];w.Ua[b]=a},fc:function(a){var b=\nw.Gb(a.parent.id,a.name);if(w.Ua[b]===a)w.Ua[b]=a.cb;else for(b=w.Ua[b];b;){if(b.cb===a){b.cb=a.cb;break}b=b.cb}},lookupNode:function(a,b){var c=w.Vc(a);if(c)throw new w.ErrnoError(c,a);for(c=w.Ua[w.Gb(a.id,b)];c;c=c.cb){var e=c.name;if(c.parent.id===a.id&&e===b)return c}return w.lookup(a,b)},createNode:function(a,b,c,e){a=new w.FSNode(a,b,c,e);w.ec(a);return a},Ab:function(a){w.fc(a)},isRoot:function(a){return a===a.parent},ab:function(a){return!!a.lb},isFile:function(a){return 32768===(a&61440)},\nisDir:function(a){return 16384===(a&61440)},fb:function(a){return 40960===(a&61440)},pb:function(a){return 8192===(a&61440)},Rc:function(a){return 24576===(a&61440)},isFIFO:function(a){return 4096===(a&61440)},isSocket:function(a){return 49152===(a&49152)},Mc:{r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},Yc:function(a){var b=w.Mc[a];if(\"undefined\"===typeof b)throw Error(\"Unknown file open mode: \"+a);return b},$b:function(a){var b=[\"r\",\"w\",\"rw\"][a&3];a&512&&(b+=\"w\");return b},Za:function(a,b){if(w.hc)return 0;\nif(!b.includes(\"r\")||a.mode&292){if(b.includes(\"w\")&&!(a.mode&146)||b.includes(\"x\")&&!(a.mode&73))return 2}else return 2;return 0},Vc:function(a){var b=w.Za(a,\"x\");return b?b:a.node_ops.lookup?0:2},Lb:function(a,b){try{return w.lookupNode(a,b),20}catch(c){}return w.Za(a,\"wx\")},qb:function(a,b,c){try{var e=w.lookupNode(a,b)}catch(f){return f.Oa}if(a=w.Za(a,\"wx\"))return a;if(c){if(!w.isDir(e.mode))return 54;if(w.isRoot(e)||w.Ya(e)===w.cwd())return 10}else if(w.isDir(e.mode))return 31;return 0},Wc:function(a,\nb){return a?w.fb(a.mode)?32:w.isDir(a.mode)&&(\"r\"!==w.$b(b)||b&512)?31:w.Za(a,w.$b(b)):44},oc:4096,$c:function(a,b){b=b||w.oc;for(a=a||0;a<=b;a++)if(!w.streams[a])return a;throw new w.ErrnoError(33);},$a:function(a){return w.streams[a]},Jc:function(a,b,c){w.ub||(w.ub=function(){},w.ub.prototype={object:{get:function(){return this.node},set:function(g){this.node=g}}});var e=new w.ub,f;for(f in a)e[f]=a[f];a=e;b=w.$c(b,c);a.fd=b;return w.streams[b]=a},Dc:function(a){w.streams[a]=null},Cc:{open:function(a){a.stream_ops=\nw.Oc(a.node.rdev).stream_ops;a.stream_ops.open&&a.stream_ops.open(a)},llseek:function(){throw new w.ErrnoError(70);}},Kb:function(a){return a>>8},sd:function(a){return a&255},bb:function(a,b){return a<<8|b},Qb:function(a,b){w.Xb[a]={stream_ops:b}},Oc:function(a){return w.Xb[a]},bc:function(a){var b=[];for(a=[a];a.length;){var c=a.pop();b.push(c);a.push.apply(a,c.mb)}return b},mc:function(a,b){function c(k){w.tb--;return b(k)}function e(k){if(k){if(!e.Kc)return e.Kc=!0,c(k)}else++g>=f.length&&c(null)}\n\"function\"===typeof a&&(b=a,a=!1);w.tb++;1b)throw new w.ErrnoError(28);a=\"string\"===typeof a?w.lookupPath(a,{Ta:!0}).node:\na;if(!a.node_ops.setattr)throw new w.ErrnoError(63);if(w.isDir(a.mode))throw new w.ErrnoError(31);if(!w.isFile(a.mode))throw new w.ErrnoError(28);var c=w.Za(a,\"w\");if(c)throw new w.ErrnoError(c);a.node_ops.setattr(a,{size:b,timestamp:Date.now()})},Nc:function(a,b){a=w.$a(a);if(!a)throw new w.ErrnoError(8);if(0===(a.flags&2097155))throw new w.ErrnoError(28);w.truncate(a.node,b)},kd:function(a,b,c){a=w.lookupPath(a,{Ta:!0}).node;a.node_ops.setattr(a,{timestamp:Math.max(b,c)})},open:function(a,b,c,e,\nf){if(\"\"===a)throw new w.ErrnoError(44);b=\"string\"===typeof b?w.Yc(b):b;c=b&64?(\"undefined\"===typeof c?438:c)&4095|32768:0;if(\"object\"===typeof a)var g=a;else{a=ob(a);try{g=w.lookupPath(a,{Ta:!(b&131072)}).node}catch(l){}}var k=!1;if(b&64)if(g){if(b&128)throw new w.ErrnoError(20);}else g=w.mknod(a,c,0),k=!0;if(!g)throw new w.ErrnoError(44);w.pb(g.mode)&&(b&=-513);if(b&65536&&!w.isDir(g.mode))throw new w.ErrnoError(54);if(!k&&(c=w.Wc(g,b)))throw new w.ErrnoError(c);b&512&&w.truncate(g,0);b&=-131713;\ne=w.Jc({node:g,path:w.Ya(g),flags:b,seekable:!0,position:0,stream_ops:g.stream_ops,jd:[],error:!1},e,f);e.stream_ops.open&&e.stream_ops.open(e);!Module.logReadFiles||b&1||(w.Ob||(w.Ob={}),a in w.Ob||(w.Ob[a]=1,M(\"FS.trackingDelegate error on read file: \"+a)));try{w.Sa.onOpenFile&&(f=0,1!==(b&2097155)&&(f|=w.nc.kc.qc),0!==(b&2097155)&&(f|=w.nc.kc.rc),w.Sa.onOpenFile(a,f))}catch(l){M(\"FS.trackingDelegate['onOpenFile']('\"+a+\"', flags) threw an exception: \"+l.message)}return e},close:function(a){if(w.kb(a))throw new w.ErrnoError(8);\na.Fb&&(a.Fb=null);try{a.stream_ops.close&&a.stream_ops.close(a)}catch(b){throw b;}finally{w.Dc(a.fd)}a.fd=null},kb:function(a){return null===a.fd},llseek:function(a,b,c){if(w.kb(a))throw new w.ErrnoError(8);if(!a.seekable||!a.stream_ops.llseek)throw new w.ErrnoError(70);if(0!=c&&1!=c&&2!=c)throw new w.ErrnoError(28);a.position=a.stream_ops.llseek(a,b,c);a.jd=[];return a.position},read:function(a,b,c,e,f){if(0>e||0>f)throw new w.ErrnoError(28);if(w.kb(a))throw new w.ErrnoError(8);if(1===(a.flags&2097155))throw new w.ErrnoError(8);\nif(w.isDir(a.node.mode))throw new w.ErrnoError(31);if(!a.stream_ops.read)throw new w.ErrnoError(28);var g=\"undefined\"!==typeof f;if(!g)f=a.position;else if(!a.seekable)throw new w.ErrnoError(70);b=a.stream_ops.read(a,b,c,e,f);g||(a.position+=b);return b},write:function(a,b,c,e,f,g){if(0>e||0>f)throw new w.ErrnoError(28);if(w.kb(a))throw new w.ErrnoError(8);if(0===(a.flags&2097155))throw new w.ErrnoError(8);if(w.isDir(a.node.mode))throw new w.ErrnoError(31);if(!a.stream_ops.write)throw new w.ErrnoError(28);\na.seekable&&a.flags&1024&&w.llseek(a,0,2);var k=\"undefined\"!==typeof f;if(!k)f=a.position;else if(!a.seekable)throw new w.ErrnoError(70);b=a.stream_ops.write(a,b,c,e,f,g);k||(a.position+=b);try{if(a.path&&w.Sa.onWriteToFile)w.Sa.onWriteToFile(a.path)}catch(l){M(\"FS.trackingDelegate['onWriteToFile']('\"+a.path+\"') threw an exception: \"+l.message)}return b},allocate:function(a,b,c){if(w.kb(a))throw new w.ErrnoError(8);if(0>b||0>=c)throw new w.ErrnoError(28);if(0===(a.flags&2097155))throw new w.ErrnoError(8);\nif(!w.isFile(a.node.mode)&&!w.isDir(a.node.mode))throw new w.ErrnoError(43);if(!a.stream_ops.allocate)throw new w.ErrnoError(138);a.stream_ops.allocate(a,b,c)},mmap:function(a,b,c,e,f,g){if(0!==(f&2)&&0===(g&2)&&2!==(a.flags&2097155))throw new w.ErrnoError(2);if(1===(a.flags&2097155))throw new w.ErrnoError(2);if(!a.stream_ops.mmap)throw new w.ErrnoError(43);return a.stream_ops.mmap(a,b,c,e,f,g)},msync:function(a,b,c,e,f){return a&&a.stream_ops.msync?a.stream_ops.msync(a,b,c,e,f):0},ud:function(){return 0},\nic:function(a,b,c){if(!a.stream_ops.ic)throw new w.ErrnoError(59);return a.stream_ops.ic(a,b,c)},readFile:function(a,b){b=b||{};b.flags=b.flags||0;b.encoding=b.encoding||\"binary\";if(\"utf8\"!==b.encoding&&\"binary\"!==b.encoding)throw Error('Invalid encoding type \"'+b.encoding+'\"');var c,e=w.open(a,b.flags);a=w.stat(a).size;var f=new Uint8Array(a);w.read(e,f,0,a,0);\"utf8\"===b.encoding?c=Na(f,0):\"binary\"===b.encoding&&(c=f);w.close(e);return c},writeFile:function(a,b,c){c=c||{};c.flags=c.flags||577;a=\nw.open(a,c.flags,c.mode);if(\"string\"===typeof b){var e=new Uint8Array(d(b)+1);b=p(b,e,0,e.length);w.write(a,e,0,b,void 0,c.Bc)}else if(ArrayBuffer.isView(b))w.write(a,b,0,b.byteLength,void 0,c.Bc);else throw Error(\"Unsupported data type\");w.close(a)},cwd:function(){return w.Wb},chdir:function(a){a=w.lookupPath(a,{Ta:!0});if(null===a.node)throw new w.ErrnoError(44);if(!w.isDir(a.node.mode))throw new w.ErrnoError(54);var b=w.Za(a.node,\"x\");if(b)throw new w.ErrnoError(b);w.Wb=a.path},Fc:function(){w.mkdir(\"/tmp\");\nw.mkdir(\"/home\");w.mkdir(\"/home/web_user\")},Ec:function(){w.mkdir(\"/dev\");w.Qb(w.bb(1,3),{read:function(){return 0},write:function(b,c,e,f){return f}});w.rb(\"/dev/null\",w.bb(1,3));vb(w.bb(5,0),xb);vb(w.bb(6,0),yb);w.rb(\"/dev/tty\",w.bb(5,0));w.rb(\"/dev/tty1\",w.bb(6,0));var a=rb();w.Wa(\"/dev\",\"random\",a);w.Wa(\"/dev\",\"urandom\",a);w.mkdir(\"/dev/shm\");w.mkdir(\"/dev/shm/tmp\")},Hc:function(){w.mkdir(\"/proc\");var a=w.mkdir(\"/proc/self\");w.mkdir(\"/proc/self/fd\");w.mount({mount:function(){var b=w.createNode(a,\n\"fd\",16895,73);b.node_ops={lookup:function(c,e){var f=w.$a(+e);if(!f)throw new w.ErrnoError(8);c={parent:null,mount:{jc:\"fake\"},node_ops:{readlink:function(){return f.path}}};return c.parent=c}};return b}},{},\"/proc/self/fd\")},Ic:function(){Module.stdin?w.Wa(\"/dev\",\"stdin\",Module.stdin):w.symlink(\"/dev/tty\",\"/dev/stdin\");Module.stdout?w.Wa(\"/dev\",\"stdout\",null,Module.stdout):w.symlink(\"/dev/tty\",\"/dev/stdout\");Module.stderr?w.Wa(\"/dev\",\"stderr\",null,Module.stderr):w.symlink(\"/dev/tty1\",\"/dev/stderr\");\nw.open(\"/dev/stdin\",0);w.open(\"/dev/stdout\",1);w.open(\"/dev/stderr\",1)},Yb:function(){w.ErrnoError||(w.ErrnoError=function(a,b){this.node=b;this.hd=function(c){this.Oa=c};this.hd(a);this.message=\"FS error\"},w.ErrnoError.prototype=Error(),w.ErrnoError.prototype.constructor=w.ErrnoError,[44].forEach(function(a){w.Db[a]=new w.ErrnoError(a);w.Db[a].stack=\"\"}))},lc:function(){w.Yb();w.Ua=Array(4096);w.mount(X,{},\"/\");w.Fc();w.Ec();w.Hc();w.Lc={MEMFS:X}},jb:function(a,b,c){w.jb.Hb=\n!0;w.Yb();Module.stdin=a||Module.stdin;Module.stdout=b||Module.stdout;Module.stderr=c||Module.stderr;w.Ic()},wd:function(){w.jb.Hb=!1;var a=Module._fflush;a&&a(0);for(a=0;athis.length-1||0>m)){var r=m%this.chunkSize;return this.dc(m/this.chunkSize|0)[r]}};g.prototype.pc=function(m){this.dc=m};g.prototype.Ub=function(){var m=new XMLHttpRequest;m.open(\"HEAD\",c,!1);m.send(null);if(!(200<=m.status&&300>m.status||304===m.status))throw Error(\"Couldn't load \"+\nc+\". Status: \"+m.status);var r=Number(m.getResponseHeader(\"Content-length\")),x,B=(x=m.getResponseHeader(\"Accept-Ranges\"))&&\"bytes\"===x;m=(x=m.getResponseHeader(\"Content-Encoding\"))&&\"gzip\"===x;var E=1048576;B||(E=r);var A=this;A.pc(function(J){var Z=J*E,U=(J+1)*E-1;U=Math.min(U,r-1);if(\"undefined\"===typeof A.ob[J]){var Ka=A.ob;if(Z>U)throw Error(\"invalid range (\"+Z+\", \"+U+\") or no bytes requested!\");if(U>r-1)throw Error(\"only \"+r+\" bytes available! programmer error!\");var G=new XMLHttpRequest;G.open(\"GET\",\nc,!1);r!==E&&G.setRequestHeader(\"Range\",\"bytes=\"+Z+\"-\"+U);\"undefined\"!=typeof Uint8Array&&(G.responseType=\"arraybuffer\");G.overrideMimeType&&G.overrideMimeType(\"text/plain; charset=x-user-defined\");G.send(null);if(!(200<=G.status&&300>G.status||304===G.status))throw Error(\"Couldn't load \"+c+\". Status: \"+G.status);Z=void 0!==G.response?new Uint8Array(G.response||[]):ba(G.responseText||\"\",!0);Ka[J]=Z}if(\"undefined\"===typeof A.ob[J])throw Error(\"doXHR failed!\");return A.ob[J]});if(m||!r)E=r=1,E=r=this.dc(0).length,\nxa(\"LazyFiles on gzip forces download of the whole file when length is accessed\");this.tc=r;this.sc=E;this.Jb=!0};if(\"undefined\"!==typeof XMLHttpRequest){if(!pa)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var k=new g;Object.defineProperties(k,{length:{get:function(){this.Jb||this.Ub();return this.tc}},chunkSize:{get:function(){this.Jb||this.Ub();return this.sc}}});k={Ib:!1,Na:k}}else k={Ib:!1,url:c};var l=w.Gc(a,b,k,e,\nf);k.Na?l.Na=k.Na:k.url&&(l.Na=null,l.url=k.url);Object.defineProperties(l,{Ra:{get:function(){return this.Na.length}}});var q={};Object.keys(l.stream_ops).forEach(function(m){var r=l.stream_ops[m];q[m]=function(){w.ac(l);return r.apply(null,arguments)}});q.read=function(m,r,x,B,E){w.ac(l);m=m.node.Na;if(E>=m.length)return 0;B=Math.min(m.length-E,B);if(m.slice)for(var A=0;A>2]=e.dev;Q[c+4>>2]=0;Q[c+8>>2]=e.ino;Q[c+12>>2]=e.mode;Q[c+16>>2]=e.nlink;Q[c+20>>2]=e.uid;Q[c+24>>2]=e.gid;Q[c+28>>2]=e.rdev;Q[c+32>>2]=0;R=[e.size>>>0,(T=e.size,1<=+Math.abs(T)?0>>0:~~+Math.ceil((T-+(~~T>>>0))/4294967296)>>>0:0)];Q[c+40>>2]=R[0];Q[c+44>>2]=R[1];Q[c+48>>2]=4096;Q[c+52>>2]=e.blocks;Q[c+56>>2]=e.atime.getTime()/1E3|0;Q[c+60>>\n2]=0;Q[c+64>>2]=e.mtime.getTime()/1E3|0;Q[c+68>>2]=0;Q[c+72>>2]=e.ctime.getTime()/1E3|0;Q[c+76>>2]=0;R=[e.ino>>>0,(T=e.ino,1<=+Math.abs(T)?0>>0:~~+Math.ceil((T-+(~~T>>>0))/4294967296)>>>0:0)];Q[c+80>>2]=R[0];Q[c+84>>2]=R[1];return 0}var bc=void 0;function cc(){bc+=4;return Q[bc-4>>2]}function Y(a){a=w.$a(a);if(!a)throw new w.ErrnoError(8);return a}var dc;dc=qa?function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:function(){return performance.now()};\nvar ec={};function fc(){if(!gc){var a={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:(\"object\"===typeof navigator&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",_:na||\"./this.program\"},b;for(b in ec)void 0===ec[b]?delete a[b]:a[b]=ec[b];var c=[];for(b in a)c.push(b+\"=\"+a[b]);gc=c}return gc}var gc;\nfunction hc(a,b,c,e){a||(a=this);this.parent=a;this.mount=a.mount;this.lb=null;this.id=w.Zc++;this.name=b;this.mode=c;this.node_ops={};this.stream_ops={};this.rdev=e}Object.defineProperties(hc.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}},Sc:{get:function(){return w.isDir(this.mode)}},Ib:{get:function(){return w.pb(this.mode)}}});\nw.FSNode=hc;w.lc();var Zb;function ba(a,b){var c=Array(d(a)+1);a=p(a,c,0,c.length);b&&(c.length=a);return c}\nvar jc={a:function(a,b,c,e){P(\"Assertion failed: \"+F(a)+\", at: \"+[b?F(b):\"unknown filename\",c,e?F(e):\"unknown function\"])},u:function(a,b){ib();a=new Date(1E3*Q[a>>2]);Q[b>>2]=a.getSeconds();Q[b+4>>2]=a.getMinutes();Q[b+8>>2]=a.getHours();Q[b+12>>2]=a.getDate();Q[b+16>>2]=a.getMonth();Q[b+20>>2]=a.getFullYear()-1900;Q[b+24>>2]=a.getDay();var c=new Date(a.getFullYear(),0,1);Q[b+28>>2]=(a.getTime()-c.getTime())/864E5|0;Q[b+36>>2]=-(60*a.getTimezoneOffset());var e=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();\nc=c.getTimezoneOffset();a=(e!=c&&a.getTimezoneOffset()==Math.min(c,e))|0;Q[b+32>>2]=a;a=Q[mb()+(a?4:0)>>2];Q[b+40>>2]=a;return b},m:function(a,b){try{a=F(a);if(b&-8)var c=-28;else{var e;(e=w.lookupPath(a,{Ta:!0}).node)?(a=\"\",b&4&&(a+=\"r\"),b&2&&(a+=\"w\"),b&1&&(a+=\"x\"),c=a&&w.Za(e,a)?-2:0):c=-44}return c}catch(f){return\"undefined\"!==typeof w&&f instanceof w.ErrnoError||P(f),-f.Oa}},A:function(a,b){try{return a=F(a),w.chmod(a,b),0}catch(c){return\"undefined\"!==typeof w&&c instanceof w.ErrnoError||P(c),\n-c.Oa}},H:function(a,b,c){try{return a=F(a),w.chown(a,b,c),0}catch(e){return\"undefined\"!==typeof w&&e instanceof w.ErrnoError||P(e),-e.Oa}},B:function(a,b){try{return w.fchmod(a,b),0}catch(c){return\"undefined\"!==typeof w&&c instanceof w.ErrnoError||P(c),-c.Oa}},I:function(a,b,c){try{return w.fchown(a,b,c),0}catch(e){return\"undefined\"!==typeof w&&e instanceof w.ErrnoError||P(e),-e.Oa}},b:function(a,b,c){bc=c;try{var e=Y(a);switch(b){case 0:var f=cc();return 0>f?-28:w.open(e.path,e.flags,0,f).fd;case 1:case 2:return 0;\ncase 3:return e.flags;case 4:return f=cc(),e.flags|=f,0;case 12:return f=cc(),Ca[f+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return Q[ic()>>2]=28,-1;default:return-28}}catch(g){return\"undefined\"!==typeof w&&g instanceof w.ErrnoError||P(g),-g.Oa}},E:function(a,b){try{var c=Y(a);return ac(w.stat,c.path,b)}catch(e){return\"undefined\"!==typeof w&&e instanceof w.ErrnoError||P(e),-e.Oa}},n:function(a,b,c){try{return w.Nc(a,c),0}catch(e){return\"undefined\"!==typeof w&&e instanceof\nw.ErrnoError||P(e),-e.Oa}},l:function(a,b){try{if(0===b)return-28;var c=w.cwd();if(b=c)var e=-28;else{var f=w.readlink(a),g=Math.min(c,d(f)),k=D[b+g];p(f,u,b,c+1);D[b+g]=k;e=g}return e}catch(l){return\"undefined\"!==\ntypeof w&&l instanceof w.ErrnoError||P(l),-l.Oa}},F:function(a){try{return a=F(a),w.rmdir(a),0}catch(b){return\"undefined\"!==typeof w&&b instanceof w.ErrnoError||P(b),-b.Oa}},e:function(a,b){try{return a=F(a),ac(w.stat,a,b)}catch(c){return\"undefined\"!==typeof w&&c instanceof w.ErrnoError||P(c),-c.Oa}},i:function(a){try{return a=F(a),w.unlink(a),0}catch(b){return\"undefined\"!==typeof w&&b instanceof w.ErrnoError||P(b),-b.Oa}},v:function(){return 2147483648},p:function(a,b,c){u.copyWithin(a,b,b+c)},c:function(a){var b=\nu.length;a>>>=0;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(a,e);0>>16);Qa();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},t:function(a){for(var b=dc();dc()-b>2]=g;for(g=0;g>0]=e.charCodeAt(g);D[f>>0]=0;c+=e.length+1});return 0}catch(e){return\"undefined\"!==\ntypeof w&&e instanceof w.ErrnoError||P(e),e.Oa}},s:function(a,b){try{var c=fc();Q[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});Q[b>>2]=e;return 0}catch(f){return\"undefined\"!==typeof w&&f instanceof w.ErrnoError||P(f),f.Oa}},f:function(a){try{var b=Y(a);w.close(b);return 0}catch(c){return\"undefined\"!==typeof w&&c instanceof w.ErrnoError||P(c),c.Oa}},q:function(a,b){try{var c=Y(a),e=c.tty?2:w.isDir(c.mode)?3:w.fb(c.mode)?7:4;D[b>>0]=e;return 0}catch(f){return\"undefined\"!==typeof w&&\nf instanceof w.ErrnoError||P(f),f.Oa}},j:function(a,b,c,e){try{a:{for(var f=Y(a),g=a=0;g>2],l=w.read(f,D,Q[b+8*g>>2],k,void 0);if(0>l){var q=-1;break a}a+=l;if(l>2]=q;return 0}catch(m){return\"undefined\"!==typeof w&&m instanceof w.ErrnoError||P(m),m.Oa}},o:function(a,b,c,e,f){try{var g=Y(a);a=4294967296*c+(b>>>0);if(-9007199254740992>=a||9007199254740992<=a)return-61;w.llseek(g,a,e);R=[g.position>>>0,(T=g.position,1<=+Math.abs(T)?0>>0:~~+Math.ceil((T-+(~~T>>>0))/4294967296)>>>0:0)];Q[f>>2]=R[0];Q[f+4>>2]=R[1];g.Fb&&0===a&&0===e&&(g.Fb=null);return 0}catch(k){return\"undefined\"!==typeof w&&k instanceof w.ErrnoError||P(k),k.Oa}},k:function(a){try{var b=Y(a);return b.stream_ops&&b.stream_ops.fsync?-b.stream_ops.fsync(b):0}catch(c){return\"undefined\"!==typeof w&&c instanceof w.ErrnoError||P(c),c.Oa}},g:function(a,b,c,e){try{a:{for(var f=Y(a),g=a=0;g>2],Q[b+(8*g+4)>>2],\nvoid 0);if(0>k){var l=-1;break a}a+=k}l=a}Q[e>>2]=l;return 0}catch(q){return\"undefined\"!==typeof w&&q instanceof w.ErrnoError||P(q),q.Oa}},h:function(a){var b=Date.now();Q[a>>2]=b/1E3|0;Q[a+4>>2]=b%1E3*1E3|0;return 0},K:function(a){var b=Date.now()/1E3|0;a&&(Q[a>>2]=b);return b},D:function(a,b){if(b){var c=b+8;b=1E3*Q[c>>2];b+=Q[c+4>>2]/1E3}else b=Date.now();a=F(a);try{w.kd(a,b,b);var e=0}catch(f){if(!(f instanceof w.ErrnoError)){b:{e=Error();if(!e.stack){try{throw Error();}catch(g){e=g}if(!e.stack){e=\n\"(no stack trace available)\";break b}}e=e.stack.toString()}Module.extraStackTrace&&(e+=\"\\n\"+Module.extraStackTrace());e=hb(e);throw f+\" : \"+e;}e=f.Oa;Q[ic()>>2]=e;e=-1}return e}};\n(function(){function a(f){Module.asm=f.exports;Fa=Module.asm.L;Qa();O=Module.asm.Da;Sa.unshift(Module.asm.M);Za()}function b(f){a(f.instance)}function c(f){return cb().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){M(\"failed to asynchronously prepare wasm: \"+g);P(g)})}var e={a:jc};Ya();if(Module.instantiateWasm)try{return Module.instantiateWasm(e,a)}catch(f){return M(\"Module.instantiateWasm callback failed with error: \"+f),!1}(function(){return Ba||\"function\"!==typeof WebAssembly.instantiateStreaming||\n$a()||V.startsWith(\"file://\")||\"function\"!==typeof fetch?c(b):fetch(V,{credentials:\"same-origin\"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){M(\"wasm streaming compile failed: \"+g);M(\"falling back to ArrayBuffer instantiation\");return c(b)})})})();return{}})();Module.___wasm_call_ctors=function(){return(Module.___wasm_call_ctors=Module.asm.M).apply(null,arguments)};Module._sqlite3_vfs_find=function(){return(Module._sqlite3_vfs_find=Module.asm.N).apply(null,arguments)};\nModule._sqlite3_free=function(){return(Module._sqlite3_free=Module.asm.O).apply(null,arguments)};var ic=Module.___errno_location=function(){return(ic=Module.___errno_location=Module.asm.P).apply(null,arguments)};Module._sqlite3_finalize=function(){return(Module._sqlite3_finalize=Module.asm.Q).apply(null,arguments)};Module._sqlite3_reset=function(){return(Module._sqlite3_reset=Module.asm.R).apply(null,arguments)};\nModule._sqlite3_clear_bindings=function(){return(Module._sqlite3_clear_bindings=Module.asm.S).apply(null,arguments)};Module._sqlite3_value_blob=function(){return(Module._sqlite3_value_blob=Module.asm.T).apply(null,arguments)};Module._sqlite3_value_text=function(){return(Module._sqlite3_value_text=Module.asm.U).apply(null,arguments)};Module._sqlite3_value_bytes=function(){return(Module._sqlite3_value_bytes=Module.asm.V).apply(null,arguments)};\nModule._sqlite3_value_double=function(){return(Module._sqlite3_value_double=Module.asm.W).apply(null,arguments)};Module._sqlite3_value_int=function(){return(Module._sqlite3_value_int=Module.asm.X).apply(null,arguments)};Module._sqlite3_value_type=function(){return(Module._sqlite3_value_type=Module.asm.Y).apply(null,arguments)};Module._sqlite3_result_blob=function(){return(Module._sqlite3_result_blob=Module.asm.Z).apply(null,arguments)};\nModule._sqlite3_result_double=function(){return(Module._sqlite3_result_double=Module.asm._).apply(null,arguments)};Module._sqlite3_result_error=function(){return(Module._sqlite3_result_error=Module.asm.$).apply(null,arguments)};Module._sqlite3_result_int=function(){return(Module._sqlite3_result_int=Module.asm.aa).apply(null,arguments)};Module._sqlite3_result_int64=function(){return(Module._sqlite3_result_int64=Module.asm.ba).apply(null,arguments)};\nModule._sqlite3_result_null=function(){return(Module._sqlite3_result_null=Module.asm.ca).apply(null,arguments)};Module._sqlite3_result_text=function(){return(Module._sqlite3_result_text=Module.asm.da).apply(null,arguments)};Module._sqlite3_step=function(){return(Module._sqlite3_step=Module.asm.ea).apply(null,arguments)};Module._sqlite3_column_count=function(){return(Module._sqlite3_column_count=Module.asm.fa).apply(null,arguments)};\nModule._sqlite3_data_count=function(){return(Module._sqlite3_data_count=Module.asm.ga).apply(null,arguments)};Module._sqlite3_column_blob=function(){return(Module._sqlite3_column_blob=Module.asm.ha).apply(null,arguments)};Module._sqlite3_column_bytes=function(){return(Module._sqlite3_column_bytes=Module.asm.ia).apply(null,arguments)};Module._sqlite3_column_double=function(){return(Module._sqlite3_column_double=Module.asm.ja).apply(null,arguments)};\nModule._sqlite3_column_text=function(){return(Module._sqlite3_column_text=Module.asm.ka).apply(null,arguments)};Module._sqlite3_column_type=function(){return(Module._sqlite3_column_type=Module.asm.la).apply(null,arguments)};Module._sqlite3_column_name=function(){return(Module._sqlite3_column_name=Module.asm.ma).apply(null,arguments)};Module._sqlite3_bind_blob=function(){return(Module._sqlite3_bind_blob=Module.asm.na).apply(null,arguments)};\nModule._sqlite3_bind_double=function(){return(Module._sqlite3_bind_double=Module.asm.oa).apply(null,arguments)};Module._sqlite3_bind_int=function(){return(Module._sqlite3_bind_int=Module.asm.pa).apply(null,arguments)};Module._sqlite3_bind_text=function(){return(Module._sqlite3_bind_text=Module.asm.qa).apply(null,arguments)};Module._sqlite3_bind_parameter_index=function(){return(Module._sqlite3_bind_parameter_index=Module.asm.ra).apply(null,arguments)};\nModule._sqlite3_sql=function(){return(Module._sqlite3_sql=Module.asm.sa).apply(null,arguments)};Module._sqlite3_normalized_sql=function(){return(Module._sqlite3_normalized_sql=Module.asm.ta).apply(null,arguments)};Module._sqlite3_errmsg=function(){return(Module._sqlite3_errmsg=Module.asm.ua).apply(null,arguments)};Module._sqlite3_exec=function(){return(Module._sqlite3_exec=Module.asm.va).apply(null,arguments)};\nModule._sqlite3_prepare_v2=function(){return(Module._sqlite3_prepare_v2=Module.asm.wa).apply(null,arguments)};Module._sqlite3_changes=function(){return(Module._sqlite3_changes=Module.asm.xa).apply(null,arguments)};Module._sqlite3_close_v2=function(){return(Module._sqlite3_close_v2=Module.asm.ya).apply(null,arguments)};Module._sqlite3_create_function_v2=function(){return(Module._sqlite3_create_function_v2=Module.asm.za).apply(null,arguments)};\nModule._sqlite3_open=function(){return(Module._sqlite3_open=Module.asm.Aa).apply(null,arguments)};var aa=Module._malloc=function(){return(aa=Module._malloc=Module.asm.Ba).apply(null,arguments)},da=Module._free=function(){return(da=Module._free=Module.asm.Ca).apply(null,arguments)};Module._RegisterExtensionFunctions=function(){return(Module._RegisterExtensionFunctions=Module.asm.Ea).apply(null,arguments)};\nModule._register_for_idb=function(){return(Module._register_for_idb=Module.asm.Fa).apply(null,arguments)};\nvar mb=Module.__get_tzname=function(){return(mb=Module.__get_tzname=Module.asm.Ga).apply(null,arguments)},lb=Module.__get_daylight=function(){return(lb=Module.__get_daylight=Module.asm.Ha).apply(null,arguments)},kb=Module.__get_timezone=function(){return(kb=Module.__get_timezone=Module.asm.Ia).apply(null,arguments)},ha=Module.stackSave=function(){return(ha=Module.stackSave=Module.asm.Ja).apply(null,arguments)},ja=Module.stackRestore=function(){return(ja=Module.stackRestore=Module.asm.Ka).apply(null,\narguments)},C=Module.stackAlloc=function(){return(C=Module.stackAlloc=Module.asm.La).apply(null,arguments)},Ab=Module._memalign=function(){return(Ab=Module._memalign=Module.asm.Ma).apply(null,arguments)};Module.cwrap=function(a,b,c,e){c=c||[];var f=c.every(function(g){return\"number\"===g});return\"string\"!==b&&f&&!e?Ha(a):function(){return Ia(a,b,c,arguments)}};Module.UTF8ToString=F;Module.FS=w;Module.stackSave=ha;Module.stackRestore=ja;Module.stackAlloc=C;var kc;Xa=function lc(){kc||mc();kc||(Xa=lc)};\nfunction mc(){function a(){if(!kc&&(kc=!0,Module.calledRun=!0,!Ga)){Module.noFSInit||w.jb.Hb||w.jb();w.hc=!1;gb(Sa);if(Module.onRuntimeInitialized)Module.onRuntimeInitialized();if(Module.postRun)for(\"function\"==typeof Module.postRun&&(Module.postRun=[Module.postRun]);Module.postRun.length;){var b=Module.postRun.shift();Ta.unshift(b)}gb(Ta)}}if(!(0Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV2(str, seed) {\n var\n l = str.length,\n h = seed ^ l,\n i = 0,\n k;\n\n while (l >= 4) {\n k =\n ((str.charCodeAt(i) & 0xff)) |\n ((str.charCodeAt(++i) & 0xff) << 8) |\n ((str.charCodeAt(++i) & 0xff) << 16) |\n ((str.charCodeAt(++i) & 0xff) << 24);\n\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n k ^= k >>> 24;\n k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n l -= 4;\n ++i;\n }\n\n switch (l) {\n case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n case 1: h ^= (str.charCodeAt(i) & 0xff);\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n }\n\n h ^= h >>> 13;\n h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n h ^= h >>> 15;\n\n return h >>> 0;\n };\n\n /**\n * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n *\n * @author Gary Court\n * @see http://github.com/garycourt/murmurhash-js\n * @author Austin Appleby\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} key ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n */\n function MurmurHashV3(key, seed) {\n var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\n remainder = key.length & 3; // key.length % 4\n bytes = key.length - remainder;\n h1 = seed;\n c1 = 0xcc9e2d51;\n c2 = 0x1b873593;\n i = 0;\n\n while (i < bytes) {\n k1 =\n ((key.charCodeAt(i) & 0xff)) |\n ((key.charCodeAt(++i) & 0xff) << 8) |\n ((key.charCodeAt(++i) & 0xff) << 16) |\n ((key.charCodeAt(++i) & 0xff) << 24);\n ++i;\n\n k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n h1 ^= k1;\n h1 = (h1 << 13) | (h1 >>> 19);\n h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n }\n\n k1 = 0;\n\n switch (remainder) {\n case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n case 1: k1 ^= (key.charCodeAt(i) & 0xff);\n\n k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n k1 = (k1 << 15) | (k1 >>> 17);\n k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= k1;\n }\n\n h1 ^= key.length;\n\n h1 ^= h1 >>> 16;\n h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n h1 ^= h1 >>> 13;\n h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n h1 ^= h1 >>> 16;\n\n return h1 >>> 0;\n }\n\n var murmur = MurmurHashV3;\n murmur.v2 = MurmurHashV2;\n murmur.v3 = MurmurHashV3;\n\n if (typeof(module) != 'undefined') {\n module.exports = murmur;\n } else {\n var _previousRoot = _global.murmur;\n murmur.noConflict = function() {\n _global.murmur = _previousRoot;\n return murmur;\n }\n _global.murmur = murmur;\n }\n}());\n","(function(){\r\n var crypt = require('crypt'),\r\n utf8 = require('charenc').utf8,\r\n isBuffer = require('is-buffer'),\r\n bin = require('charenc').bin,\r\n\r\n // The core\r\n md5 = function (message, options) {\r\n // Convert to byte array\r\n if (message.constructor == String)\r\n if (options && options.encoding === 'binary')\r\n message = bin.stringToBytes(message);\r\n else\r\n message = utf8.stringToBytes(message);\r\n else if (isBuffer(message))\r\n message = Array.prototype.slice.call(message, 0);\r\n else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n message = message.toString();\r\n // else, assume byte array already\r\n\r\n var m = crypt.bytesToWords(message),\r\n l = message.length * 8,\r\n a = 1732584193,\r\n b = -271733879,\r\n c = -1732584194,\r\n d = 271733878;\r\n\r\n // Swap endian\r\n for (var i = 0; i < m.length; i++) {\r\n m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n ((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;\r\n }\r\n\r\n // Padding\r\n m[l >>> 5] |= 0x80 << (l % 32);\r\n m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n // Method shortcuts\r\n var FF = md5._ff,\r\n GG = md5._gg,\r\n HH = md5._hh,\r\n II = md5._ii;\r\n\r\n for (var i = 0; i < m.length; i += 16) {\r\n\r\n var aa = a,\r\n bb = b,\r\n cc = c,\r\n dd = d;\r\n\r\n a = FF(a, b, c, d, m[i+ 0], 7, -680876936);\r\n d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n c = FF(c, d, a, b, m[i+ 2], 17, 606105819);\r\n b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n a = FF(a, b, c, d, m[i+ 4], 7, -176418897);\r\n d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);\r\n c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);\r\n d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n a = FF(a, b, c, d, m[i+12], 7, 1804603682);\r\n d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n b = FF(b, c, d, a, m[i+15], 22, 1236535329);\r\n\r\n a = GG(a, b, c, d, m[i+ 1], 5, -165796510);\r\n d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);\r\n c = GG(c, d, a, b, m[i+11], 14, 643717713);\r\n b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n a = GG(a, b, c, d, m[i+ 5], 5, -701558691);\r\n d = GG(d, a, b, c, m[i+10], 9, 38016083);\r\n c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n a = GG(a, b, c, d, m[i+ 9], 5, 568446438);\r\n d = GG(d, a, b, c, m[i+14], 9, -1019803690);\r\n c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);\r\n a = GG(a, b, c, d, m[i+13], 5, -1444681467);\r\n d = GG(d, a, b, c, m[i+ 2], 9, -51403784);\r\n c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);\r\n b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n a = HH(a, b, c, d, m[i+ 5], 4, -378558);\r\n d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n c = HH(c, d, a, b, m[i+11], 16, 1839030562);\r\n b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);\r\n d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);\r\n c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n a = HH(a, b, c, d, m[i+13], 4, 681279174);\r\n d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n b = HH(b, c, d, a, m[i+ 6], 23, 76029189);\r\n a = HH(a, b, c, d, m[i+ 9], 4, -640364487);\r\n d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n c = HH(c, d, a, b, m[i+15], 16, 530742520);\r\n b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n a = II(a, b, c, d, m[i+ 0], 6, -198630844);\r\n d = II(d, a, b, c, m[i+ 7], 10, 1126891415);\r\n c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n a = II(a, b, c, d, m[i+12], 6, 1700485571);\r\n d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n a = II(a, b, c, d, m[i+ 8], 6, 1873313359);\r\n d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n b = II(b, c, d, a, m[i+13], 21, 1309151649);\r\n a = II(a, b, c, d, m[i+ 4], 6, -145523070);\r\n d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n c = II(c, d, a, b, m[i+ 2], 15, 718787259);\r\n b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n a = (a + aa) >>> 0;\r\n b = (b + bb) >>> 0;\r\n c = (c + cc) >>> 0;\r\n d = (d + dd) >>> 0;\r\n }\r\n\r\n return crypt.endian([a, b, c, d]);\r\n };\r\n\r\n // Auxiliary functions\r\n md5._ff = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._gg = function (a, b, c, d, x, s, t) {\r\n var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._hh = function (a, b, c, d, x, s, t) {\r\n var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n md5._ii = function (a, b, c, d, x, s, t) {\r\n var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n return ((n << s) | (n >>> (32 - s))) + b;\r\n };\r\n\r\n // Package private blocksize\r\n md5._blocksize = 16;\r\n md5._digestsize = 16;\r\n\r\n module.exports = function (message, options) {\r\n if (message === undefined || message === null)\r\n throw new Error('Illegal argument ' + message);\r\n\r\n var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n return options && options.asBytes ? digestbytes :\r\n options && options.asString ? bin.bytesToString(digestbytes) :\r\n crypt.bytesToHex(digestbytes);\r\n };\r\n\r\n})();\r\n","// Utilities\nconst lowerCase = require('./lower-case');\nconst specials = require('./specials');\n\nlet character =\n '[0-9\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376-\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4-\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58-\\u0C59\\u0C60-\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0-\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A-\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]';\nlet regex = new RegExp(\n `(?:(?:(\\\\s?(?:^|[.\\\\(\\\\)!?;:\"-])\\\\s*)(${character}))|(${character}))(${character}*[’']*${character}*)`,\n 'g'\n);\n\nlet convertToRegExp = specials =>\n specials.map(s => [new RegExp(`\\\\b${s}\\\\b`, 'gi'), s]);\n\nfunction parseMatch(match) {\n const firstCharacter = match[0];\n\n // test first character\n if (/\\s/.test(firstCharacter)) {\n // if whitespace - trim and return\n return match.substr(1);\n }\n if (/[()]/.test(firstCharacter)) {\n // if parens - this shouldn't be replaced\n return null;\n }\n\n return match;\n}\n\nmodule.exports = (str, options = {}) => {\n str = str\n .toLowerCase()\n .replace(regex, (m, lead = '', forced, lower, rest) => {\n const parsedMatch = parseMatch(m);\n if (!parsedMatch) {\n return m;\n }\n if (!forced) {\n const fullLower = lower + rest;\n\n if (lowerCase.has(fullLower)) {\n return parsedMatch;\n }\n }\n\n return lead + (lower || forced).toUpperCase() + rest;\n });\n\n const customSpecials = options.special || [];\n const replace = [...specials, ...customSpecials];\n const replaceRegExp = convertToRegExp(replace);\n\n replaceRegExp.forEach(([pattern, s]) => {\n str = str.replace(pattern, s);\n });\n\n return str;\n};\n","import { addSyncListener, applyMessages } from './index';\nimport Timestamp from '../timestamp';\n\nfunction migrateParentIds(oldValues, newValues) {\n newValues.forEach((items, table) => {\n if (table === 'transactions') {\n let old = oldValues.get(table);\n let toApply = [];\n\n items.forEach(newValue => {\n if (\n newValue.isChild === 1 &&\n newValue.parent_id == null &&\n newValue.id.includes('/')\n ) {\n let parentId = newValue.id.split('/')[0];\n\n toApply.push({\n dataset: 'transactions',\n row: newValue.id,\n column: 'parent_id',\n value: parentId,\n timestamp: Timestamp.send()\n });\n }\n });\n\n if (toApply.length > 0) {\n applyMessages(toApply);\n }\n }\n });\n}\n\nlet _unlisten = null;\nexport function listen() {\n unlisten();\n _unlisten = addSyncListener(migrateParentIds);\n}\n\nexport function unlisten() {\n if (_unlisten) {\n _unlisten();\n _unlisten = null;\n }\n}\n","\nconst parse = require('.')\n\nmodule.exports = function(data, options={}){\n if(typeof data === 'string'){\n data = Buffer.from(data)\n }\n const records = options && options.objname ? {} : []\n const parser = new parse.Parser(options)\n parser.push = function(record){\n if(record === null){\n return\n }\n if(options.objname === undefined)\n records.push(record)\n else{\n records[record[0]] = record[1]\n }\n }\n const err1 = parser.__parse(data, false)\n if(err1 !== undefined) throw err1\n const err2 = parser.__parse(undefined, true)\n if(err2 !== undefined) throw err2\n return records\n}\n","import { addTransactions } from './accounts/sync';\nimport {\n transactionModel,\n accountModel,\n categoryModel,\n categoryGroupModel,\n payeeModel,\n payeeRuleModel\n} from './api-models';\nimport {\n ungroupTransactions,\n updateTransaction,\n deleteTransaction\n} from '../shared/transactions';\nimport * as db from './db';\nimport * as sheet from './sheet';\nimport * as prefs from './prefs';\nimport * as monthUtils from '../shared/months';\nimport * as update from './update';\nimport * as cloudStorage from './cloud-storage';\nimport { setSyncingMode, batchMessages } from './sync';\nimport { groupById, cleanUUID } from '../shared/util';\nimport { getClock } from './timestamp';\nimport { runMutator } from './mutators';\nimport { integerToAmount } from '../shared/util';\nimport { runQuery as aqlQuery } from './aql/schema/run-query';\nimport q from '../shared/query';\n\nconst { resolveName } = require('./spreadsheet/util');\nconst connection = require('../platform/server/connection');\n\nlet IMPORT_MODE = false;\n\n// This is duplicate from main.js...\nfunction APIError(msg, meta) {\n return { type: 'APIError', message: msg, meta };\n}\n\n// The API is different in two ways: we never want undo enabled, and\n// we also need to notify the UI manually if stuff has changed (if\n// they are connecting to an already running instance, the UI should\n// update). The wrapper handles that.\nfunction withMutation(handler) {\n return args => {\n return runMutator(\n async () => {\n let latestTimestamp = getClock().timestamp.toString();\n let result = await handler(args);\n\n let rows = await db.all(\n 'SELECT DISTINCT dataset FROM messages_crdt WHERE timestamp > ?',\n [latestTimestamp]\n );\n\n // Only send the sync event if anybody else is connected\n if (connection.getNumClients() > 1) {\n connection.send('sync-event', {\n type: 'success',\n tables: rows.map(row => row.dataset)\n });\n }\n\n return result;\n },\n { undoDisabled: true }\n );\n };\n}\n\nlet handlers = {};\n\nasync function validateMonth(month) {\n if (!month.match(/^\\d{4}-\\d{2}$/)) {\n throw APIError('Invalid month format, use YYYY-MM: ' + month);\n }\n\n if (!IMPORT_MODE) {\n let { start, end } = await handlers['get-budget-bounds']();\n let range = monthUtils.range(start, end);\n if (!range.includes(month)) {\n throw APIError('No budget exists for month: ' + month);\n }\n }\n}\n\nasync function validateExpenseCategory(debug, id) {\n if (id == null) {\n throw APIError(`${debug}: category id is required`);\n }\n\n let row = await db.first('SELECT is_income FROM categories WHERE id = ?', [\n id\n ]);\n\n if (!row) {\n throw APIError(`${debug}: category \"${id}\" does not exist`);\n }\n\n if (row.is_income !== 0) {\n throw APIError(`${debug}: category \"${id}\" is not an expense category`);\n }\n}\n\nlet batchPromise = null;\n\nhandlers['api/batch-budget-start'] = async function() {\n if (batchPromise) {\n throw APIError('Cannot start a batch process: batch already started');\n }\n\n // If we are importing, all we need to do is start a raw database\n // transaction. Updating spreadsheet cells doesn't go through the\n // syncing layer in that case.\n if (IMPORT_MODE) {\n db.asyncTransaction(() => {\n return new Promise((resolve, reject) => {\n batchPromise = { resolve, reject };\n });\n });\n } else {\n batchMessages(() => {\n return new Promise((resolve, reject) => {\n batchPromise = { resolve, reject };\n });\n });\n }\n};\n\nhandlers['api/batch-budget-end'] = async function() {\n if (!batchPromise) {\n throw APIError('Cannot end a batch process: no batch started');\n }\n\n batchPromise.resolve();\n batchPromise = null;\n};\n\nhandlers['api/load-budget'] = async function({ id }) {\n let { id: currentId } = prefs.getPrefs() || {};\n\n if (currentId !== id) {\n connection.send('start-load');\n let { error } = await handlers['load-budget']({ id });\n\n if (!error) {\n connection.send('finish-load');\n } else {\n connection.send('show-budgets');\n\n if (error === 'out-of-sync-migrations' || error === 'out-of-sync-data') {\n throw new Error(\n 'This budget cannot be loaded with this version of the app.'\n );\n } else if (error === 'budget-not-found') {\n throw new Error(\n 'Budget \"' +\n id +\n '\" not found. Check the id of your budget in the \"Advanced\" section of the settings page.'\n );\n } else {\n throw new Error('We had an unknown problem opening \"' + id + '\".');\n }\n }\n }\n};\n\nhandlers['api/start-import'] = async function({ budgetName }) {\n // Notify UI to close budget\n await handlers['close-budget']();\n\n // Create the budget\n await handlers['create-budget']({ budgetName, avoidUpload: true });\n\n // Clear out the default expense categories\n await db.runQuery('DELETE FROM categories WHERE is_income = 0');\n await db.runQuery('DELETE FROM category_groups WHERE is_income = 0');\n\n // Turn syncing off\n setSyncingMode('import');\n\n connection.send('start-import');\n IMPORT_MODE = true;\n};\n\nhandlers['api/finish-import'] = async function() {\n sheet.get().markCacheDirty();\n\n // We always need to fully reload the app. Importing doesn't touch\n // the spreadsheet, but we can't just recreate the spreadsheet\n // either; there is other internal state that isn't created\n let { id } = prefs.getPrefs();\n await handlers['close-budget']();\n await handlers['load-budget']({ id });\n\n await handlers['get-budget-bounds']();\n await sheet.waitOnSpreadsheet();\n\n await cloudStorage.upload().catch(err => {});\n\n connection.send('finish-import');\n IMPORT_MODE = false;\n};\n\nhandlers['api/abort-import'] = async function() {\n if (IMPORT_MODE) {\n let { id } = prefs.getPrefs();\n\n await handlers['close-budget']();\n await handlers['delete-budget']({ id });\n connection.send('show-budgets');\n }\n\n IMPORT_MODE = false;\n};\n\nhandlers['api/query'] = async function({ query }) {\n return aqlQuery(query);\n};\n\nhandlers['api/budget-months'] = async function() {\n let { start, end } = await handlers['get-budget-bounds']();\n return monthUtils.range(start, end);\n};\n\nhandlers['api/budget-month'] = async function({ month }) {\n await validateMonth(month);\n\n let groups = await db.getCategoriesGrouped();\n let sheetName = monthUtils.sheetForMonth(month);\n\n function value(name) {\n let v = sheet.get().getCellValue(sheetName, name);\n return v === '' ? 0 : v;\n }\n\n // This is duplicated from main.js because the return format is\n // different (for now)\n return {\n month,\n incomeAvailable: value('available-funds'),\n lastMonthOverspent: value('last-month-overspent'),\n forNextMonth: value('buffered'),\n totalBudgeted: value('total-budgeted'),\n toBudget: value('to-budget'),\n\n fromLastMonth: value('from-last-month'),\n totalIncome: value('total-income'),\n totalSpent: value('total-spent'),\n totalBalance: value('total-leftover'),\n\n categoryGroups: groups.map(group => {\n if (group.is_income) {\n return {\n ...categoryGroupModel.toExternal(group),\n received: value('total-income'),\n\n categories: group.categories.map(cat => ({\n ...categoryModel.toExternal(cat),\n received: value(`sum-amount-${cat.id}`)\n }))\n };\n }\n\n return {\n ...categoryGroupModel.toExternal(group),\n budgeted: value(`group-budget-${group.id}`),\n spent: value(`group-sum-amount-${group.id}`),\n balance: value(`group-leftover-${group.id}`),\n\n categories: group.categories.map(cat => ({\n ...categoryModel.toExternal(cat),\n budgeted: value(`budget-${cat.id}`),\n spent: value(`sum-amount-${cat.id}`),\n balance: value(`leftover-${cat.id}`),\n carryover: value(`carryover-${cat.id}`)\n }))\n };\n })\n };\n};\n\nhandlers['api/budget-set-amount'] = withMutation(async function({\n month,\n categoryId,\n amount\n}) {\n return handlers['budget/budget-amount']({\n month,\n category: categoryId,\n amount\n });\n});\n\nhandlers['api/budget-set-carryover'] = withMutation(async function({\n month,\n categoryId,\n flag\n}) {\n await validateMonth(month);\n await validateExpenseCategory('budget-set-carryover', categoryId);\n return handlers['budget/set-carryover']({\n startMonth: month,\n category: categoryId,\n flag\n });\n});\n\nhandlers['api/transactions-export'] = async function({\n transactions,\n categoryGroups,\n payees\n}) {\n return handlers['transactions-export']({\n transactions,\n categoryGroups,\n payees\n });\n};\n\nhandlers['api/transactions-import'] = withMutation(async function({\n accountId,\n transactions\n}) {\n return handlers['transactions-import']({ accountId, transactions });\n});\n\nhandlers['api/transactions-add'] = withMutation(async function({\n accountId,\n transactions\n}) {\n await addTransactions(accountId, transactions, { runTransfers: false });\n return 'ok';\n});\n\nhandlers['api/transactions-get'] = async function({\n accountId,\n startDate,\n endDate\n}) {\n let { data } = await aqlQuery(\n q('transactions')\n .filter({\n $and: [\n accountId && { account: accountId },\n startDate && { date: { $gte: startDate } },\n endDate && { date: { $lte: endDate } }\n ].filter(Boolean)\n })\n .select('*')\n .options({ splits: 'grouped' })\n );\n return data;\n};\n\nhandlers['api/transactions-filter'] = async function({ text, accountId }) {\n throw new Error('`filterTransactions` is deprecated, use `runQuery` instead');\n};\n\nhandlers['api/transaction-update'] = withMutation(async function({\n id,\n fields\n}) {\n let { data } = await aqlQuery(\n q('transactions')\n .filter({ id })\n .select('*')\n .options({ splits: 'grouped' })\n );\n let transactions = ungroupTransactions(data);\n\n if (transactions.length === 0) {\n return [];\n }\n\n let { diff } = updateTransaction(transactions, fields);\n return handlers['transactions-batch-update'](diff);\n});\n\nhandlers['api/transaction-delete'] = withMutation(async function({ id }) {\n let { data } = await aqlQuery(\n q('transactions')\n .filter({ id })\n .select('*')\n .options({ splits: 'grouped' })\n );\n let transactions = ungroupTransactions(data);\n\n if (transactions.length === 0) {\n return [];\n }\n\n let { diff } = deleteTransaction(transactions, id);\n return handlers['transactions-batch-update'](diff);\n});\n\nhandlers['api/accounts-get'] = async function() {\n let accounts = await db.getAccounts();\n return accounts.map(account => accountModel.toExternal(account));\n};\n\nhandlers['api/account-create'] = withMutation(async function({\n account,\n initialBalance = null\n}) {\n return handlers['account-create']({\n name: account.name,\n type: account.type,\n offBudget: account.offbudget,\n closed: account.closed,\n // Current the API expects an amount but it really should expect\n // an integer\n balance: initialBalance != null ? integerToAmount(initialBalance) : null\n });\n});\n\nhandlers['api/account-update'] = withMutation(async function({ id, fields }) {\n return db.updateAccount({ id, ...accountModel.fromExternal(fields) });\n});\n\nhandlers['api/account-close'] = withMutation(async function({\n id,\n transferAccountId,\n transferCategoryId\n}) {\n return handlers['account-close']({\n id,\n transferAccountId,\n categoryId: transferCategoryId\n });\n});\n\nhandlers['api/account-reopen'] = withMutation(async function({ id }) {\n return handlers['account-reopen']({ id });\n});\n\nhandlers['api/account-delete'] = withMutation(async function({ id }) {\n return handlers['account-close']({ id, forced: true });\n});\n\nhandlers['api/categories-get'] = async function({ grouped } = {}) {\n let result = await handlers['get-categories']();\n return grouped\n ? result.grouped.map(categoryGroupModel.toExternal)\n : result.list.map(categoryModel.toExternal);\n};\n\nhandlers['api/category-group-create'] = withMutation(async function({ group }) {\n return handlers['category-group-create']({ name: group.name });\n});\n\nhandlers['api/category-group-update'] = withMutation(async function({\n id,\n fields\n}) {\n return handlers['category-group-update']({\n id,\n ...categoryGroupModel.fromExternal(fields)\n });\n});\n\nhandlers['api/category-group-delete'] = withMutation(async function({\n id,\n transferCategoryId\n}) {\n return handlers['category-group-delete']({\n id,\n transferId: transferCategoryId\n });\n});\n\nhandlers['api/category-create'] = withMutation(async function({ category }) {\n return handlers['category-create']({\n name: category.name,\n groupId: category.group_id,\n isIncome: category.is_income\n });\n});\n\nhandlers['api/category-update'] = withMutation(async function({ id, fields }) {\n return handlers['category-update']({\n id,\n ...categoryModel.fromExternal(fields)\n });\n});\n\nhandlers['api/category-delete'] = withMutation(async function({\n id,\n transferCategoryId\n}) {\n return handlers['category-delete']({\n id,\n transferId: transferCategoryId\n });\n});\n\nhandlers['api/payees-get'] = async function() {\n let payees = await handlers['payees-get']();\n return payees.map(payeeModel.toExternal);\n};\n\nhandlers['api/payee-create'] = withMutation(async function({ payee }) {\n return handlers['payee-create']({ name: payee.name });\n});\n\nhandlers['api/payee-update'] = withMutation(async function({ id, fields }) {\n return handlers['payees-batch-change']({\n updated: [{ id, ...payeeModel.fromExternal(fields) }]\n });\n});\n\nhandlers['api/payee-delete'] = withMutation(async function({ id }) {\n return handlers['payees-batch-change']({ deleted: [{ id }] });\n});\n\nhandlers['api/payee-rules-get'] = async function({ payeeId }) {\n let rules = await handlers['payees-get-rules']({ id: payeeId });\n return rules.map(payeeRuleModel.toExternal);\n};\n\nhandlers['api/payee-rule-create'] = withMutation(async function({\n payee_id,\n rule\n}) {\n return handlers['payees-add-rule']({\n payee_id,\n type: rule.type,\n value: rule.value || null\n });\n});\n\nhandlers['api/payee-rule-update'] = withMutation(async function({\n id,\n fields\n}) {\n return handlers['payees-update-rule']({\n id,\n ...payeeRuleModel.fromExternal(fields)\n });\n});\n\nhandlers['api/payee-rule-delete'] = withMutation(async function({ id }) {\n return handlers['payees-delete-rule']({ id });\n});\n\nexport default function(serverHandlers) {\n handlers = Object.assign({}, serverHandlers, handlers);\n return handlers;\n}\n","import * as monthUtils from '../shared/months';\nimport * as sheet from '../server/sheet';\nimport * as budget from '../server/budget/base';\nimport * as db from '../server/db';\nimport * as prefs from '../server/prefs';\nimport * as budgetActions from '../server/budget/actions';\nimport { runQuery as aqlQuery } from '../server/aql/schema/run-query';\nimport { batchMessages, setSyncingMode } from '../server/sync';\nimport { runHandler, runMutator } from '../server/mutators';\nimport { addTransactions } from '../server/accounts/sync';\nimport q from '../shared/query';\n\nfunction pickRandom(list) {\n return list[((Math.random() * list.length) | 0) % list.length];\n}\n\nfunction number(start, end) {\n return start + (end - start) * Math.random();\n}\n\nfunction integer(start, end) {\n return number(start, end) | 0;\n}\n\nfunction findMin(items, field) {\n let item = items[0];\n for (let i = 0; i < items.length; i++) {\n if (items[i][field] < item[field]) {\n item = items[i];\n }\n }\n return item;\n}\n\nfunction getStartingBalanceCat(categories) {\n return categories.find(c => c.name === 'Starting Balances').id;\n}\n\nfunction extractCommonThings(payees, groups) {\n let incomePayee = payees.find(p => p.name === 'Deposit');\n let expensePayees = payees.filter(\n p => p.name !== 'Deposit' && p.name !== 'Starting Balance'\n );\n let expenseGroup = groups.find(g => g.is_income === 0);\n let incomeGroup = groups.find(g => g.is_income === 1);\n let categories = expenseGroup.categories.filter(\n c =>\n [\n 'Food',\n 'Restaurants',\n 'Entertainment',\n 'Clothing',\n 'General',\n 'Gift',\n 'Medical'\n ].indexOf(c.name) !== -1\n );\n\n return {\n incomePayee,\n expensePayees: expensePayees.filter(p => !p.bill),\n incomeGroup,\n expenseCategories: categories,\n billCategories: groups.find(g => g.name === 'Bills').categories,\n billPayees: expensePayees.filter(p => p.bill)\n };\n}\n\nasync function fillPrimaryChecking(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories,\n billCategories,\n billPayees\n } = extractCommonThings(payees, groups);\n let numTransactions = integer(100, 200);\n\n let transactions = [];\n for (let i = 0; i < numTransactions; i++) {\n let payee;\n if (Math.random() < 0.09) {\n payee = incomePayee;\n } else {\n payee = pickRandom(expensePayees);\n }\n\n let category;\n if (payee.name === 'Deposit') {\n category = incomeGroup.categories.find(c => c.name === 'Income');\n } else {\n category = pickRandom(expenseCategories);\n }\n\n let amount;\n if (payee.name === 'Deposit') {\n amount = integer(50000, 70000);\n } else {\n amount = integer(0, Math.random() < 0.05 ? -8000 : -700);\n }\n\n let transaction = {\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subDays(monthUtils.currentDay(), (i / 3) | 0),\n category: category.id\n };\n transactions.push(transaction);\n\n if (Math.random() < 0.2) {\n let a = (transaction.amount / 3) | 0;\n let pick = () =>\n payee === incomePayee\n ? incomeGroup.categories.find(c => c.name === 'Income').id\n : pickRandom(expenseCategories).id;\n transaction.subtransactions = [\n { amount: a, category: pick() },\n { amount: a, category: pick() },\n {\n amount: transaction.amount - a * 2,\n category: pick()\n }\n ];\n }\n }\n\n let earliestMonth = monthUtils.monthFromDate(\n transactions[transactions.length - 1].date\n );\n let months = monthUtils.rangeInclusive(\n earliestMonth,\n monthUtils.currentMonth()\n );\n let currentDay = monthUtils.currentDay();\n for (let month of months) {\n let date = monthUtils.addDays(month, '12');\n if (monthUtils.isBefore(date, currentDay)) {\n transactions.push({\n amount: -10000,\n payee: billPayees.find(p => p.name.toLowerCase().includes('power')).id,\n account: account.id,\n date,\n category: billCategories.find(c => c.name === 'Power').id\n });\n }\n\n date = monthUtils.addDays(month, '18');\n if (monthUtils.isBefore(date, currentDay)) {\n transactions.push({\n amount: -9000,\n payee: billPayees.find(p => p.name.toLowerCase().includes('water')).id,\n account: account.id,\n date,\n category: billCategories.find(c => c.name === 'Water').id\n });\n }\n\n date = monthUtils.addDays(month, '2');\n if (monthUtils.isBefore(date, currentDay)) {\n transactions.push({\n amount: -120000,\n payee: billPayees.find(p => p.name.toLowerCase().includes('housy')).id,\n account: account.id,\n date,\n category: billCategories.find(c => c.name === 'Mortgage').id\n });\n }\n\n date = monthUtils.addDays(month, '20');\n if (monthUtils.isBefore(date, currentDay)) {\n transactions.push({\n amount: -6000,\n payee: billPayees.find(p => p.name.toLowerCase().includes('internet'))\n .id,\n account: account.id,\n date,\n category: billCategories.find(c => c.name === 'Internet').id\n });\n }\n\n date = monthUtils.addDays(month, '23');\n if (monthUtils.isBefore(date, currentDay)) {\n transactions.push({\n amount: -7500,\n payee: billPayees.find(p => p.name.toLowerCase().includes('t-mobile'))\n .id,\n account: account.id,\n date,\n category: billCategories.find(c => c.name === 'Cell').id\n });\n }\n }\n\n let earliestDate = null;\n transactions.forEach(t => {\n if (earliestDate == null || t.date < earliestDate) {\n earliestDate = t.date;\n }\n });\n\n transactions.unshift({\n amount: 100000,\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date: earliestDate,\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n });\n\n return addTransactions(account.id, transactions);\n}\n\nasync function fillChecking(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories\n } = extractCommonThings(payees, groups);\n let numTransactions = integer(20, 40);\n\n let transactions = [];\n for (let i = 0; i < numTransactions; i++) {\n let payee;\n if (Math.random() < 0.04) {\n payee = incomePayee;\n } else {\n payee = pickRandom(expensePayees);\n }\n\n let category;\n if (payee.name === 'Deposit') {\n category = incomeGroup.categories.find(c => c.name === 'Income');\n } else {\n category = pickRandom(expenseCategories);\n }\n\n let amount =\n payee.name === 'Deposit' ? integer(50000, 70000) : integer(0, -10000);\n\n transactions.push({\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subDays(monthUtils.currentDay(), (i * 2) | 0),\n category: category.id\n });\n }\n\n transactions.unshift({\n amount: integer(90000, 120000),\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date: transactions[transactions.length - 1].date,\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n });\n\n await handlers['transactions-batch-update']({\n added: transactions,\n fastMode: true\n });\n}\n\nasync function fillInvestment(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories\n } = extractCommonThings(payees, groups);\n\n let numTransactions = integer(10, 30);\n\n let transactions = [];\n for (let i = 0; i < numTransactions; i++) {\n let payee = incomePayee;\n let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n let amount = integer(10000, 20000);\n\n transactions.push({\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subDays(monthUtils.currentDay(), integer(10, 360)),\n category: category.id\n });\n }\n\n transactions.unshift({\n amount: integer(10000, 20000),\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date: findMin(transactions, 'date').date,\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n });\n\n await handlers['transactions-batch-update']({\n added: transactions,\n fastMode: true\n });\n}\n\nasync function fillSavings(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories\n } = extractCommonThings(payees, groups);\n\n let numTransactions = integer(15, 40);\n\n let transactions = [];\n for (let i = 0; i < numTransactions; i++) {\n let payee;\n if (Math.random() < 0.3) {\n payee = incomePayee;\n } else {\n payee = pickRandom(expensePayees);\n }\n let category =\n payee === incomePayee\n ? incomeGroup.categories.find(c => c.name === 'Income')\n : pickRandom(expenseCategories);\n let amount =\n payee === incomePayee ? integer(10000, 80000) : integer(-10000, -2000);\n\n transactions.push({\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subDays(monthUtils.currentDay(), (i * 5) | 0),\n category: category.id\n });\n }\n\n transactions.unshift({\n amount: 30000,\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date: transactions[transactions.length - 1].date,\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n });\n\n await handlers['transactions-batch-update']({\n added: transactions,\n fastMode: true\n });\n}\n\nasync function fillMortgage(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories\n } = extractCommonThings(payees, groups);\n\n let numTransactions = integer(7, 10);\n let amount = integer(100000, 200000);\n let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n let transactions = [\n {\n amount: integer(-3000, -3500) * 100 * 100,\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date:\n monthUtils.subMonths(monthUtils.currentDay(), numTransactions) + '-02',\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n }\n ];\n for (let i = 0; i < numTransactions; i++) {\n let payee = incomePayee;\n\n transactions.push({\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subMonths(monthUtils.currentDay(), i) + '-02',\n category: category.id,\n starting_balance_flag: true\n });\n }\n\n await handlers['transactions-batch-update']({\n added: transactions,\n fastMode: true\n });\n}\n\nasync function fillOther(handlers, account, payees, groups) {\n let {\n incomePayee,\n expensePayees,\n incomeGroup,\n expenseCategories\n } = extractCommonThings(payees, groups);\n\n let numTransactions = integer(3, 6);\n let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n let transactions = [\n {\n amount: integer(3250, 3700) * 100 * 100,\n payee: payees.find(p => p.name === 'Starting Balance').id,\n account: account.id,\n date:\n monthUtils.subMonths(monthUtils.currentDay(), numTransactions) + '-02',\n category: getStartingBalanceCat(incomeGroup.categories),\n starting_balance_flag: true\n }\n ];\n for (let i = 0; i < numTransactions; i++) {\n let payee = incomePayee;\n let amount = integer(4, 9) * 100 * 100;\n\n transactions.push({\n amount,\n payee: payee.id,\n account: account.id,\n date: monthUtils.subMonths(monthUtils.currentDay(), i) + '-02',\n category: category.id\n });\n }\n\n await handlers['transactions-batch-update']({\n added: transactions,\n fastMode: true\n });\n}\n\nasync function createBudget(accounts, payees, groups) {\n let primaryAccount = accounts.find(a => (a.name = 'Bank of America'));\n let earliestDate = (await db.first(\n `SELECT * FROM v_transactions t LEFT JOIN accounts a ON t.account = a.id\n WHERE a.offbudget = 0 AND t.is_child = 0 ORDER BY date ASC LIMIT 1`\n )).date;\n let earliestPrimaryDate = (await db.first(\n `SELECT * FROM v_transactions t LEFT JOIN accounts a ON t.account = a.id\n WHERE a.id = ? AND a.offbudget = 0 AND t.is_child = 0 ORDER BY date ASC LIMIT 1`,\n [primaryAccount.id]\n )).date;\n\n let start = monthUtils.monthFromDate(db.fromDateRepr(earliestDate));\n let end = monthUtils.currentMonth();\n let months = monthUtils.rangeInclusive(start, end);\n\n function category(name) {\n for (let group of groups) {\n let cat = group.categories.find(c => c.name === name);\n if (cat) {\n return cat;\n }\n }\n }\n\n function setBudget(month, category, amount) {\n return budgetActions.setBudget({ month, category: category.id, amount });\n }\n\n function setBudgetIfSpent(month, cat) {\n let spent = sheet.getCellValue(\n monthUtils.sheetForMonth(month),\n `sum-amount-${cat.id}`\n );\n\n if (spent < 0) {\n setBudget(month, cat, -spent);\n }\n }\n\n await runMutator(() =>\n batchMessages(async () => {\n for (let month of months) {\n if (\n month >=\n monthUtils.monthFromDate(db.fromDateRepr(earliestPrimaryDate))\n ) {\n setBudget(month, category('Food'), 40000);\n setBudget(month, category('Restaurants'), 30000);\n setBudget(month, category('Entertainment'), 10000);\n setBudget(month, category('Clothing'), 3000);\n setBudget(month, category('General'), 50000);\n setBudget(month, category('Gift'), 7500);\n setBudget(month, category('Medical'), 10000);\n\n setBudget(month, category('Cell'), 7500);\n setBudget(month, category('Internet'), 6000);\n setBudget(month, category('Mortgage'), 120000);\n setBudget(month, category('Water'), 9000);\n setBudget(month, category('Power'), 10000);\n } else {\n setBudgetIfSpent(month, category('Food'));\n setBudgetIfSpent(month, category('Restaurants'));\n setBudgetIfSpent(month, category('Entertainment'));\n setBudgetIfSpent(month, category('Clothing'));\n setBudgetIfSpent(month, category('General'));\n setBudgetIfSpent(month, category('Gift'));\n setBudgetIfSpent(month, category('Medical'));\n\n setBudgetIfSpent(month, category('Cell'));\n setBudgetIfSpent(month, category('Internet'));\n setBudgetIfSpent(month, category('Mortgage'));\n setBudgetIfSpent(month, category('Water'));\n setBudgetIfSpent(month, category('Power'));\n }\n }\n })\n );\n\n await sheet.waitOnSpreadsheet();\n\n await runMutator(() =>\n batchMessages(async () => {\n let prevSaved = 0;\n for (let month of months) {\n if (\n month >=\n monthUtils.monthFromDate(db.fromDateRepr(earliestPrimaryDate)) &&\n month <= monthUtils.currentMonth()\n ) {\n let sheetName = monthUtils.sheetForMonth(month);\n let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n let available = toBudget - prevSaved;\n\n if (available - 403000 > 0) {\n setBudget(month, category('Savings'), available - 403000);\n budgetActions.setBuffer(month, 403000);\n\n prevSaved += available - 403000;\n } else if (available > 0) {\n budgetActions.setBuffer(month, available);\n }\n }\n }\n })\n );\n\n await sheet.waitOnSpreadsheet();\n\n let sheetName = monthUtils.sheetForMonth(monthUtils.currentMonth());\n let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n if (toBudget < 0) {\n await addTransactions(primaryAccount.id, [\n {\n amount: -toBudget,\n category: category('Income').id,\n date: monthUtils.currentMonth() + '-01'\n }\n ]);\n }\n\n // let sheetName = monthUtils.sheetForMonth(monthUtils.currentMonth());\n // let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n // setBudget(monthUtils.currentMonth(), category('Savings'), toBudget);\n\n await sheet.waitOnSpreadsheet();\n}\n\nexport async function createTestBudget(handlers) {\n setSyncingMode('import');\n\n await db.execQuery('PRAGMA journal_mode = OFF');\n\n // Clear out the default categories. This is fine to do without\n // going through the sync system because we are in import mode and\n // these aren't tracked through messages anyway.\n await db.runQuery('DELETE FROM categories;');\n await db.runQuery('DELETE FROM category_groups');\n\n let accounts = [\n { name: 'Bank of America', type: 'checking' },\n { name: 'Ally Savings', type: 'savings' },\n { name: 'Capital One Checking', type: 'checking' },\n { name: 'HSBC', type: 'checking' },\n { name: 'Vanguard 401k', type: 'investment', offBudget: 1 },\n { name: 'Mortgage', type: 'mortgage', offBudget: 1 },\n { name: 'House Asset', type: 'other', offBudget: 1 },\n { name: 'Roth IRA', type: 'investment', offBudget: 1 }\n ];\n await runMutator(() =>\n batchMessages(async () => {\n for (let account of accounts) {\n account.id = await handlers['account-create'](account);\n }\n })\n );\n\n let payees = [\n { name: 'Starting Balance' },\n { name: 'Kroger' },\n { name: 'Publix' },\n { name: 'Home Depot' },\n { name: 'Movies' },\n { name: 'Online store' },\n { name: 'Deposit' },\n { name: 'Dominion Power', bill: true },\n { name: 'Extra Watery', bill: true },\n { name: 'Housy House', bill: true },\n { name: 'Fast Internet', bill: true },\n { name: 'T-mobile', bill: true }\n ];\n\n await runMutator(() =>\n batchMessages(async () => {\n for (let payee of payees) {\n payee.id = await handlers['payee-create']({ name: payee.name });\n }\n })\n );\n\n let categoryGroups = [\n {\n name: 'Usual Expenses',\n categories: [\n { name: 'Savings' },\n { name: 'Medical' },\n { name: 'Gift' },\n { name: 'General' },\n { name: 'Clothing' },\n { name: 'Entertainment' },\n { name: 'Restaurants' },\n { name: 'Food' }\n ]\n },\n {\n name: 'Bills',\n categories: [\n { name: 'Power' },\n { name: 'Water' },\n { name: 'Mortgage' },\n { name: 'Internet' },\n { name: 'Cell' }\n ]\n },\n {\n name: 'Income',\n is_income: true,\n categories: [\n { name: 'Income', is_income: true },\n { name: 'Misc', is_income: true },\n { name: 'Starting Balances', is_income: true }\n ]\n }\n ];\n\n await runMutator(async () => {\n for (let group of categoryGroups) {\n group.id = await handlers['category-group-create']({\n name: group.name,\n isIncome: group.is_income ? 1 : 0\n });\n\n for (let category of group.categories) {\n category.id = await handlers['category-create']({\n ...category,\n isIncome: category.is_income ? 1 : 0,\n groupId: group.id\n });\n }\n }\n });\n\n let allGroups = (await runHandler(handlers['get-categories'])).grouped;\n\n setSyncingMode('import');\n\n await runMutator(() =>\n batchMessages(async () => {\n for (let account of accounts) {\n switch (account.type) {\n case 'checking':\n if (account.name === 'Bank of America') {\n await fillPrimaryChecking(handlers, account, payees, allGroups);\n } else {\n await fillChecking(handlers, account, payees, allGroups);\n }\n break;\n case 'investment':\n await fillInvestment(handlers, account, payees, allGroups);\n break;\n case 'savings':\n await fillSavings(handlers, account, payees, allGroups);\n break;\n case 'mortgage':\n await fillMortgage(handlers, account, payees, allGroups);\n break;\n case 'other':\n if (account.name === 'House Asset') {\n await fillOther(handlers, account, payees, allGroups);\n } else {\n await fillChecking(handlers, account, payees, allGroups);\n }\n break;\n default:\n }\n }\n })\n );\n\n setSyncingMode('import');\n\n // This checks to see if the primary account is in the negative.\n // This might happen depending on the transactions added, but we\n // don't want to show that as it'd be weird. We modify the latest\n // deposit transaction to force it to be positive\n let primaryAccount = accounts.find(a => (a.name = 'Bank of America'));\n let { data: primaryBalance } = await aqlQuery(\n q('transactions')\n .filter({ account: primaryAccount.id })\n .calculate({ $sum: '$amount' })\n .serialize()\n );\n if (primaryBalance < 0) {\n let { data: results } = await aqlQuery(\n q('transactions')\n .filter({ account: primaryAccount.id, amount: { $gt: 0 } })\n .limit(1)\n .select(['id', 'amount'])\n .serialize()\n );\n let lastDeposit = results[0];\n\n await runHandler(handlers['transaction-update'], {\n ...lastDeposit,\n amount: lastDeposit.amount + -primaryBalance + integer(10000, 20000)\n });\n }\n\n // Bust the cache and reload the spreadsheet\n setSyncingMode('disabled');\n await prefs.savePrefs({ isCached: false });\n await sheet.reloadSpreadsheet(db);\n await budget.createAllBudgets();\n\n await sheet.waitOnSpreadsheet();\n\n // Create a budget\n await createBudget(accounts, payees, allGroups);\n}\n","import { createApp } from '../app';\nimport { mutator } from '../mutators';\nimport { undoable } from '../undo';\nimport * as actions from './actions';\n\n\nlet app = createApp();\n\napp.method('budget/budget-amount', mutator(undoable(actions.setBudget)));\napp.method(\n 'budget/copy-previous-month',\n mutator(undoable(actions.copyPreviousMonth))\n);\napp.method('budget/set-zero', mutator(undoable(actions.setZero)));\napp.method('budget/set-3month-avg', mutator(undoable(actions.set3MonthAvg)));\napp.method('budget/set-all-future', mutator(undoable(actions.setAllFuture)));\napp.method(\n 'budget/hold-for-next-month',\n mutator(undoable(actions.holdForNextMonth))\n);\napp.method(\n 'budget/hold-for-future-months',\n mutator(undoable(actions.holdForFutureMonths))\n);\napp.method('budget/reset-hold', mutator(undoable(actions.resetHold)));\napp.method(\n 'budget/cover-overspending',\n mutator(undoable(actions.coverOverspending))\n);\napp.method(\n 'budget/transfer-available',\n mutator(undoable(actions.transferAvailable))\n);\napp.method(\n 'budget/transfer-category',\n mutator(undoable(actions.transferCategory))\n);\napp.method(\n 'budget/set-carryover',\n mutator(undoable(actions.setCategoryCarryover))\n);\n\nexport default app;\n","import { createApp } from '../app';\nimport * as db from '../db';\n\nlet app = createApp();\n\napp.method('notes-save', async ({ id, note }) => {\n await db.update('notes', { id, note });\n});\n\nexport default app;\n","import { batchMessages } from '../sync';\nimport { runMutator } from '../mutators';\nimport { createApp } from '../app';\nimport * as db from '../db';\nimport { batchUpdateTransactions } from '../accounts/transactions';\n\nlet app = createApp();\n\napp.method('tools/fix-split-transactions', async () => {\n // 1. Check for child transactions that have a blank payee, and set\n // the payee to whatever the parent has\n let blankPayeeRows = await db.all(`\n SELECT t.*, p.payee AS parentPayee FROM v_transactions_internal t\n LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n WHERE t.is_child = 1 AND t.payee IS NULL AND p.payee IS NOT NULL\n `);\n\n await runMutator(async () => {\n let updated = blankPayeeRows.map(row => ({\n id: row.id,\n payee: row.parentPayee\n }));\n await batchUpdateTransactions({ updated });\n });\n\n // 2. Make sure the \"cleared\" flag is synced up with the parent\n // transactions\n let clearedRows = await db.all(`\n SELECT t.id, p.cleared FROM v_transactions_internal t\n LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n WHERE t.is_child = 1 AND t.cleared != p.cleared\n `);\n\n await runMutator(async () => {\n let updated = clearedRows.map(row => ({\n id: row.id,\n cleared: row.cleared === 1\n }));\n await batchUpdateTransactions({ updated });\n });\n\n // 3. Mark the `tombstone` field as true on any child transactions\n // that have a dead parent\n let deletedRows = await db.all(`\n SELECT t.* FROM v_transactions_internal t\n LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n WHERE t.is_child = 1 AND t.tombstone = 0 AND (p.tombstone = 1 OR p.id IS NULL)\n `);\n\n await runMutator(async () => {\n let updated = deletedRows.map(row => ({ id: row.id, tombstone: 1 }));\n await batchUpdateTransactions({ updated });\n });\n\n return {\n numBlankPayees: blankPayeeRows.length,\n numCleared: clearedRows.length,\n numDeleted: deletedRows.length\n };\n});\n\nexport default app;\n","import fs from '../../platform/server/fs';\nimport qif2json from './qif2json';\nimport csv2json from 'csv-parse/lib/sync';\nimport { dayFromDate } from '../../shared/months';\nimport { looselyParseAmount } from '../../shared/util';\n\nexport function parseFile(filepath, options) {\n let errors = [];\n let m = filepath.match(/\\.[^.]*$/);\n\n if (m) {\n let ext = m[0];\n\n switch (ext.toLowerCase()) {\n case '.qif':\n return parseQIF(filepath);\n case '.csv':\n return parseCSV(filepath, options);\n case '.ofx':\n case '.qfx':\n return parseOFX(filepath);\n default:\n }\n }\n\n errors.push({\n message: 'Invalid file type',\n internal: ''\n });\n return { errors };\n}\n\nasync function parseCSV(filepath, options = {}) {\n let errors = [];\n let contents = await fs.readFile(filepath);\n\n let data;\n try {\n data = csv2json(contents, {\n columns: true,\n bom: true,\n delimiter: options.delimiter || ',',\n quote: '\"',\n trim: true,\n relax_column_count: true\n });\n } catch (err) {\n errors.push({\n message: 'Failed parsing: ' + err.message,\n internal: err.message\n });\n return { errors, transactions: [] };\n }\n\n return { errors, transactions: data };\n}\n\nasync function parseQIF(filepath) {\n let errors = [];\n let contents = await fs.readFile(filepath);\n\n let data;\n try {\n data = qif2json(contents);\n } catch (err) {\n errors.push({\n message: \"Failed parsing: doesn't look like a valid QIF file.\",\n internal: err.stack\n });\n return { errors, transactions: [] };\n }\n\n return {\n errors,\n transactions: data.transactions.map(trans => ({\n amount: trans.amount != null ? looselyParseAmount(trans.amount) : null,\n date: trans.date,\n payee_name: trans.payee,\n imported_payee: trans.payee,\n notes: trans.memo || null\n }))\n };\n}\n\nasync function parseOFX(filepath) {\n let { getOFXTransactions, initModule } = await import(\n /* webpackChunkName: 'xfo' */ 'node-libofx'\n );\n await initModule();\n\n let errors = [];\n let contents = await fs.readFile(filepath);\n\n let data;\n try {\n data = getOFXTransactions(contents);\n } catch (err) {\n errors.push({\n message: 'Failed importing file',\n internal: err.stack\n });\n return { errors };\n }\n\n return {\n errors,\n transactions: data.map(trans => ({\n amount: trans.amount,\n imported_id: trans.fi_id,\n date: trans.date ? dayFromDate(trans.date * 1000) : null,\n payee_name: trans.name,\n imported_payee: trans.name,\n notes: trans.memo || null\n }))\n };\n}\n","export default function parse(qif, options) {\n var lines = qif.split('\\n'),\n line = lines.shift(),\n type = /!Type:([^$]*)$/.exec(line.trim()),\n data = {},\n transactions = (data.transactions = []),\n transaction = {};\n\n options = options || {};\n\n if (!type || !type.length) {\n throw new Error('File does not appear to be a valid qif file: ' + line);\n }\n data.type = type[1];\n\n var division = {};\n\n while ((line = lines.shift())) {\n line = line.trim();\n if (line === '^') {\n transactions.push(transaction);\n transaction = {};\n continue;\n }\n switch (line[0]) {\n case 'D':\n transaction.date = line.substring(1);\n break;\n case 'T':\n transaction.amount = line.substring(1);\n break;\n case 'N':\n transaction.number = line.substring(1);\n break;\n case 'M':\n transaction.memo = line.substring(1);\n break;\n case 'A':\n transaction.address = (transaction.address || []).concat(\n line.substring(1)\n );\n break;\n case 'P':\n transaction.payee = line.substring(1).replace(/&/g, '&');\n break;\n case 'L':\n var lArray = line.substring(1).split(':');\n transaction.category = lArray[0];\n if (lArray[1] !== undefined) {\n transaction.subcategory = lArray[1];\n }\n break;\n case 'C':\n transaction.clearedStatus = line.substring(1);\n break;\n case 'S':\n var sArray = line.substring(1).split(':');\n division.category = sArray[0];\n if (sArray[1] !== undefined) {\n division.subcategory = sArray[1];\n }\n break;\n case 'E':\n division.description = line.substring(1);\n break;\n case '$':\n division.amount = parseFloat(line.substring(1));\n if (!(transaction.division instanceof Array)) {\n transaction.division = [];\n }\n transaction.division.push(division);\n division = {};\n\n break;\n\n default:\n throw new Error('Unknown Detail Code: ' + line[0]);\n }\n }\n\n if (Object.keys(transaction).length) {\n transactions.push(transaction);\n }\n\n data.dateFormat = options.dateFormat;\n return data;\n}\n","import * as d from 'date-fns';\nimport * as db from '../db';\nimport { Schedule as RSchedule } from '../util/rschedule';\nimport { groupBy } from '../../shared/util';\nimport { fromDateRepr } from '../models';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport q from '../../shared/query';\nimport { getApproxNumberThreshold } from '../../shared/rules';\nimport { recurConfigToRSchedule } from '../../shared/schedules';\nimport { dayFromDate, parseDate, subDays } from '../../shared/months';\nimport { conditionsToAQL } from '../accounts/transaction-rules';\nconst uuid = require('../../platform/uuid');\n\nfunction takeDates(config) {\n let schedule = new RSchedule({ rrules: recurConfigToRSchedule(config) });\n return schedule\n .occurrences({ take: 3 })\n .toArray()\n .map(d => d.date);\n}\n\nasync function getTransactions(date, account) {\n let { data } = await aqlQuery(\n q('transactions')\n .filter({\n account,\n schedule: null,\n // Don't match transfers\n 'payee.transfer_acct': null,\n $and: [\n { date: { $gte: d.subDays(date, 2) } },\n { date: { $lte: d.addDays(date, 2) } }\n ]\n })\n .select('*')\n .options({ splits: 'none' })\n );\n return data;\n}\n\nfunction getRank(day1, day2) {\n let dayDiff = Math.abs(d.differenceInDays(parseDate(day1), parseDate(day2)));\n\n // The amount of days off determines the rank: exact same day\n // is highest rank 1, 1 day off is .5, etc. This will find the\n // best start date that matches all the dates the closest\n return 1 / (dayDiff + 1);\n}\n\nexport function matchSchedules(allOccurs, config, partialMatchRank = 0.5) {\n allOccurs = [...allOccurs].reverse();\n let baseOccur = allOccurs[0];\n let occurs = allOccurs.slice(1);\n let schedules = [];\n\n for (let trans of baseOccur.transactions) {\n let threshold = getApproxNumberThreshold(trans.amount);\n let payee = trans.payee;\n let account = trans.account;\n\n let found = occurs.map(occur => {\n let matched = occur.transactions.find(\n t =>\n t.amount >= trans.amount - threshold &&\n t.amount <= trans.amount + threshold\n );\n matched = matched && matched.payee === payee ? matched : null;\n\n if (matched) {\n return { trans: matched, rank: getRank(occur.date, matched.date) };\n }\n return null;\n });\n\n if (found.indexOf(null) !== -1) {\n continue;\n }\n\n let rank = found.reduce(\n (total, match) => total + match.rank,\n getRank(baseOccur.date, trans.date)\n );\n\n let exactAmount = found.reduce(\n (exact, match) => exact && match.trans.amount === trans.amount,\n true\n );\n\n schedules.push({\n rank,\n amount: trans.amount,\n account: trans.account,\n payee: trans.payee,\n date: config,\n // Exact dates rank as 1, so all of them matches exactly it\n // would equal the number of `allOccurs`\n exactDate: rank === allOccurs.length,\n exactAmount\n });\n }\n\n return schedules;\n}\n\nasync function schedulesForPattern(\n baseStart,\n numDays,\n baseConfig,\n accountId,\n partialMatchRank\n) {\n let schedules = [];\n\n let i = 0;\n for (let i = 0; i < numDays; i++) {\n let start = d.addDays(baseStart, i);\n let config;\n if (typeof baseConfig === 'function') {\n config = baseConfig(start);\n\n if (config === false) {\n // Skip this one\n continue;\n }\n } else {\n config = { ...baseConfig, start };\n }\n\n // Our recur config expects a day string, not a native date format\n config.start = dayFromDate(config.start);\n\n let data = [];\n let dates = takeDates(config);\n for (let date of dates) {\n data.push({\n date: dayFromDate(date),\n transactions: await getTransactions(date, accountId)\n });\n }\n\n schedules = schedules.concat(\n matchSchedules(data, config, partialMatchRank)\n );\n }\n return schedules;\n}\n\nasync function weekly(startDate, accountId) {\n return schedulesForPattern(\n d.subWeeks(parseDate(startDate), 4),\n 7 * 2,\n { frequency: 'weekly' },\n accountId\n );\n}\n\nasync function every2weeks(startDate, accountId) {\n return schedulesForPattern(\n // 6 weeks would cover 3 instances, but we also scan an addition\n // week back\n d.subWeeks(parseDate(startDate), 7),\n 7 * 2,\n { frequency: 'weekly', interval: 2 },\n accountId\n );\n}\n\nasync function monthly(startDate, accountId) {\n return schedulesForPattern(\n d.subMonths(parseDate(startDate), 4),\n 31 * 2,\n start => {\n // 28 is the max number of days that all months are guaranteed\n // to have. We don't want to go any higher than that because\n // we'll end up skipping months that don't have that day.\n // The use cases of end of month days will be covered with the\n // `monthlyLastDay` pattern;\n if (d.getDate(start) > 28) {\n return false;\n }\n return { start, frequency: 'monthly' };\n },\n accountId\n );\n}\n\nasync function monthlyLastDay(startDate, accountId) {\n // We do two separate calls because this pattern doesn't fit into\n // how `schedulesForPattern` works\n let s1 = await schedulesForPattern(\n d.subMonths(parseDate(startDate), 3),\n 1,\n { frequency: 'monthly', patterns: [{ type: 'day', value: -1 }] },\n accountId,\n // Last day patterns should win over day-specific ones that just\n // happen to match\n 0.75\n );\n\n let s2 = await schedulesForPattern(\n d.subMonths(parseDate(startDate), 4),\n 1,\n { frequency: 'monthly', patterns: [{ type: 'day', value: -1 }] },\n accountId,\n 0.75\n );\n\n return s1.concat(s2);\n}\n\nasync function monthly1stor3rd(startDate, accountId) {\n return schedulesForPattern(\n d.subWeeks(parseDate(startDate), 8),\n 14,\n start => {\n let day = d.format(new Date(), 'iiii');\n let dayValue = day.slice(0, 2).toUpperCase();\n\n return {\n start,\n frequency: 'monthly',\n patterns: [{ type: dayValue, value: 1 }, { type: dayValue, value: 3 }]\n };\n },\n accountId\n );\n}\n\nasync function monthly2ndor4th(startDate, accountId) {\n return schedulesForPattern(\n d.subMonths(parseDate(startDate), 8),\n 14,\n start => {\n let day = d.format(new Date(), 'iiii');\n let dayValue = day.slice(0, 2).toUpperCase();\n\n return {\n start,\n frequency: 'monthly',\n patterns: [{ type: dayValue, value: 2 }, { type: dayValue, value: 4 }]\n };\n },\n accountId\n );\n}\n\nasync function findStartDate(schedule) {\n let conditions = schedule._conditions;\n let dateCond = conditions.find(c => c.field === 'date');\n let currentConfig = dateCond.value;\n\n while (1) {\n let prevConfig = currentConfig;\n currentConfig = { ...prevConfig };\n\n switch (currentConfig.frequency) {\n case 'weekly':\n currentConfig.start = dayFromDate(\n d.subWeeks(\n parseDate(currentConfig.start),\n currentConfig.interval || 1\n )\n );\n\n break;\n case 'monthly':\n currentConfig.start = dayFromDate(\n d.subMonths(\n parseDate(currentConfig.start),\n currentConfig.interval || 1\n )\n );\n break;\n case 'yearly':\n currentConfig.start = dayFromDate(\n d.subYears(\n parseDate(currentConfig.start),\n currentConfig.interval || 1\n )\n );\n break;\n default:\n throw new Error('findStartDate: invalid frequency');\n }\n\n let newConditions = conditions.map(c =>\n c.field === 'date' ? { ...c, value: currentConfig } : c\n );\n\n let { filters, errors } = conditionsToAQL(newConditions, {\n recurDateBounds: 1\n });\n if (errors.length > 0) {\n // Somehow we generated an invalid config. Abort the whole\n // process and don't change the date at all\n currentConfig = null;\n break;\n }\n\n let { data } = await aqlQuery(\n q('transactions')\n .filter({ $and: filters })\n .select('*')\n );\n\n if (data.length === 0) {\n // No data, revert back to the last valid value and stop\n currentConfig = prevConfig;\n break;\n }\n }\n\n if (currentConfig) {\n return {\n ...schedule,\n date: currentConfig,\n _conditions: conditions.map(c =>\n c.field === 'date' ? { ...c, value: currentConfig } : c\n )\n };\n }\n return schedule;\n}\n\nexport async function findSchedules() {\n // Patterns to look for:\n // * Weekly\n // * Every two weeks\n // * Monthly on day X\n // * Monthly on every 1st or 3rd day\n // * Monthly on every 2nd or 4th day\n //\n // Search for them approx (+- 2 days) but track which transactions\n // and find the best one...\n\n let { data: accounts } = await aqlQuery(\n q('accounts')\n .filter({ closed: false })\n .select('*')\n );\n\n let allSchedules = [];\n\n for (let account of accounts) {\n // Find latest transaction-ish to start with\n let latestTrans = await db.first(\n 'SELECT * FROM v_transactions WHERE account = ? AND parent_id IS NULL ORDER BY date DESC LIMIT 1',\n [account.id]\n );\n\n if (latestTrans) {\n let latestDate = fromDateRepr(latestTrans.date);\n allSchedules = allSchedules.concat(\n await weekly(latestDate, account.id),\n await every2weeks(latestDate, account.id),\n await monthly(latestDate, account.id),\n await monthlyLastDay(latestDate, account.id),\n await monthly1stor3rd(latestDate, account.id),\n await monthly2ndor4th(latestDate, account.id)\n );\n }\n }\n\n let schedules = [...groupBy(allSchedules, 'payee').entries()].map(\n ([payeeId, schedules]) => {\n schedules.sort((s1, s2) => s2.rank - s1.rank);\n let winner = schedules[0];\n\n // Convert to schedule and return it\n return {\n id: uuid.v4Sync(),\n account: winner.account,\n payee: winner.payee,\n date: winner.date,\n amount: winner.amount,\n _conditions: [\n { op: 'is', field: 'account', value: winner.account },\n { op: 'is', field: 'payee', value: winner.payee },\n {\n op: winner.exactDate ? 'is' : 'isapprox',\n field: 'date',\n value: winner.date\n },\n {\n op: winner.exactAmount ? 'is' : 'isapprox',\n field: 'amount',\n value: winner.amount\n }\n ]\n };\n }\n );\n\n let finalized = [];\n for (let schedule of schedules) {\n finalized.push(await findStartDate(schedule));\n }\n return finalized;\n}\n","import deepEqual from 'deep-equal';\nimport * as d from 'date-fns';\nimport { createApp } from '../app';\nimport * as db from '../db';\nimport * as prefs from '../prefs';\nimport { toDateRepr } from '../models';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport { compileQuery } from '../aql/compiler';\nimport { schema, schemaConfig } from '../aql/schema';\nimport { dayFromDate, currentDay, parseDate } from '../../shared/months';\nimport q from '../../shared/query';\nimport {\n insertRule,\n updateRule,\n getRules,\n ruleModel\n} from '../accounts/transaction-rules';\nimport { Rule, Condition } from '../accounts/rules';\nimport {\n extractScheduleConds,\n recurConfigToRSchedule,\n getHasTransactionsQuery,\n getStatus,\n getScheduledAmount\n} from '../../shared/schedules';\nimport { mutator, runMutator } from '../mutators';\nimport { undoable } from '../undo';\nimport { Schedule as RSchedule } from '../util/rschedule';\nimport { addSyncListener, batchMessages } from '../sync';\nimport { captureBreadcrumb } from '../../platform/exceptions';\nimport { addTransactions } from '../accounts/sync';\nimport { findSchedules } from './find-schedules';\n\nconst connection = require('../../platform/server/connection');\nconst uuid = require('../../platform/uuid');\n\n// Utilities\n\nfunction zip(arr1, arr2) {\n let result = [];\n for (let i = 0; i < arr1.length; i++) {\n result.push([arr1[i], arr2[i]]);\n }\n return result;\n}\n\nexport function updateConditions(conditions, newConditions) {\n let scheduleConds = extractScheduleConds(conditions);\n let newScheduleConds = extractScheduleConds(newConditions);\n\n let replacements = zip(\n Object.values(scheduleConds),\n Object.values(newScheduleConds)\n );\n\n let updated = conditions.map(cond => {\n let r = replacements.find(r => cond === r[0]);\n return r && r[1] ? r[1] : cond;\n });\n\n let added = replacements\n .filter(x => x[0] == null && x[1] != null)\n .map(x => x[1]);\n\n return updated.concat(added);\n}\n\nexport function getNextDate(dateCond, start = new Date()) {\n start = d.startOfDay(start);\n\n let cond = new Condition(\n dateCond.op,\n 'date',\n dateCond.value,\n null,\n new Map(Object.entries({ date: 'date' }))\n );\n let value = cond.getValue();\n\n if (value.type === 'date') {\n return value.date;\n } else if (value.type === 'recur') {\n let dates = value.schedule.occurrences({ start, take: 1 }).toArray();\n\n if (dates.length > 0) {\n let date = dates[0].date;\n return dayFromDate(date);\n }\n }\n return null;\n}\n\nexport async function getRuleForSchedule(id) {\n if (id == null) {\n throw new Error('Schedule not attached to a rule');\n }\n\n let { data: ruleId } = await aqlQuery(\n q('schedules')\n .filter({ id })\n .calculate('rule')\n );\n return getRules().find(rule => rule.id === ruleId);\n}\n\nexport async function fixRuleForSchedule(id) {\n let { data: ruleId } = await aqlQuery(\n q('schedules')\n .filter({ id })\n .calculate('rule')\n );\n\n if (ruleId) {\n // Take the bad rule out of the system so it never causes problems\n // in the future\n await db.delete_('rules', ruleId);\n }\n\n let newId = await insertRule({\n stage: null,\n conditions: [\n { op: 'isapprox', field: 'date', value: currentDay() },\n { op: 'isapprox', field: 'amount', value: 0 }\n ],\n actions: [{ op: 'link-schedule', value: id }]\n });\n\n await db.updateWithSchema('schedules', { id, rule: newId });\n\n return getRules().find(rule => rule.id === newId);\n}\n\nexport async function setNextDate({ id, start, conditions, reset }) {\n if (conditions == null) {\n let rule = await getRuleForSchedule(id);\n if (rule == null) {\n throw new Error('No rule found for schedule');\n }\n conditions = rule.serialize().conditions;\n }\n\n let { date: dateCond } = extractScheduleConds(conditions);\n\n let { data: nextDate } = await aqlQuery(\n q('schedules')\n .filter({ id })\n .calculate('next_date')\n );\n\n // Only do this if a date condition exists\n if (dateCond) {\n let newNextDate = getNextDate(\n dateCond,\n start ? start(nextDate) : new Date()\n );\n\n if (newNextDate !== nextDate) {\n // Our `update` functon requires the id of the item and we don't\n // have it, so we need to query it\n let nd = await db.first(\n 'SELECT id, base_next_date_ts FROM schedules_next_date WHERE schedule_id = ?',\n [id]\n );\n\n await db.update(\n 'schedules_next_date',\n reset\n ? {\n id: nd.id,\n base_next_date: toDateRepr(newNextDate),\n base_next_date_ts: Date.now()\n }\n : {\n id: nd.id,\n local_next_date: toDateRepr(newNextDate),\n local_next_date_ts: nd.base_next_date_ts\n }\n );\n }\n }\n}\n\n// Methods\n\nexport async function createSchedule({ schedule, conditions = [] } = {}) {\n let scheduleId = (schedule && schedule.id) || uuid.v4Sync();\n\n let { date: dateCond } = extractScheduleConds(conditions);\n if (dateCond == null) {\n throw new Error('A date condition is required to create a schedule');\n }\n if (dateCond.value == null) {\n throw new Error('Date is required');\n }\n\n let nextDate = getNextDate(dateCond);\n let nextDateRepr = nextDate ? toDateRepr(nextDate) : null;\n\n // Create the rule here based on the info\n let ruleId;\n ruleId = await insertRule({\n stage: null,\n conditions,\n actions: [{ op: 'link-schedule', value: scheduleId }]\n });\n\n let now = Date.now();\n let nextDateId = await db.insertWithUUID('schedules_next_date', {\n schedule_id: scheduleId,\n local_next_date: nextDateRepr,\n local_next_date_ts: now,\n base_next_date: nextDateRepr,\n base_next_date_ts: now\n });\n\n let id = await db.insertWithSchema('schedules', {\n ...schedule,\n id: scheduleId,\n rule: ruleId\n });\n\n return scheduleId;\n}\n\n// TODO: don't allow deleting rules that link schedules\n\nexport async function updateSchedule({ schedule, conditions, resetNextDate }) {\n if (schedule.rule) {\n throw new Error('You cannot change the rule of a schedule');\n }\n\n // We need the rule if there are conditions\n let rule;\n\n // This must be outside the `batchMessages` call because we change\n // and then read data\n if (conditions) {\n let { date: dateCond } = extractScheduleConds(conditions);\n if (dateCond && dateCond.value == null) {\n throw new Error('Date is required');\n }\n\n // We need to get the full rule to merge in the updated\n // conditions\n rule = await getRuleForSchedule(schedule.id);\n\n if (rule == null) {\n // In the edge case that a rule gets corrupted (either by a bug in\n // the system or user messing with their data), don't crash. We\n // generate a new rule because schedules have to have a rule\n // attached to them.\n rule = await fixRuleForSchedule(schedule.id);\n }\n }\n\n await batchMessages(async () => {\n if (conditions) {\n let oldConditions = rule.serialize().conditions;\n let newConditions = updateConditions(oldConditions, conditions);\n\n await updateRule({ id: rule.id, conditions: newConditions });\n\n // Annoyingly, sometimes it has `type` and sometimes it doesn't\n let stripType = ({ type, ...fields }) => fields;\n\n // Update `next_date` if the user forced it, or if the account\n // or date changed. We check account because we don't update\n // schedules automatically for closed account, and the user\n // might switch accounts from a closed one\n if (\n resetNextDate ||\n !deepEqual(\n oldConditions.find(c => c.field === 'account'),\n oldConditions.find(c => c.field === 'account')\n ) ||\n !deepEqual(\n stripType(oldConditions.find(c => c.field === 'date')),\n stripType(newConditions.find(c => c.field === 'date'))\n )\n ) {\n await setNextDate({\n id: schedule.id,\n conditions: newConditions,\n reset: true\n });\n }\n } else if (resetNextDate) {\n await setNextDate({ id: schedule.id, reset: true });\n }\n\n await db.updateWithSchema('schedules', schedule);\n });\n}\n\nexport async function deleteSchedule({ id }) {\n let { data: ruleId } = await aqlQuery(\n q('schedules')\n .filter({ id })\n .calculate('rule')\n );\n\n await batchMessages(async () => {\n await db.delete_('rules', ruleId);\n await db.delete_('schedules', id);\n });\n}\n\nexport async function skipNextDate({ id }) {\n return setNextDate({\n id,\n start: nextDate => {\n return d.addDays(parseDate(nextDate), 1);\n }\n });\n}\n\n// `schedule` here might not be a saved schedule, so it might not have\n// an id\nexport function getPossibleTransactions({ schedule }) {}\n\nexport function discoverSchedules() {\n return findSchedules();\n}\n\nexport async function getUpcomingDates({ config, count }) {\n let rules = recurConfigToRSchedule(config);\n\n try {\n let schedule = new RSchedule({ rrules: rules });\n\n return schedule\n .occurrences({ start: d.startOfDay(new Date()), take: count })\n .toArray()\n .map(date => dayFromDate(date.date));\n } catch (err) {\n captureBreadcrumb(config);\n throw err;\n }\n}\n\n// Services\n\nfunction onRuleUpdate(rule) {\n let { actions, conditions } =\n rule instanceof Rule ? rule.serialize() : ruleModel.toJS(rule);\n\n if (actions && actions.find(a => a.op === 'link-schedule')) {\n let scheduleId = actions.find(a => a.op === 'link-schedule').value;\n\n if (scheduleId) {\n let conds = extractScheduleConds(conditions);\n\n let payeeIdx = conditions.findIndex(c => c === conds.payee);\n let accountIdx = conditions.findIndex(c => c === conds.account);\n let amountIdx = conditions.findIndex(c => c === conds.amount);\n let dateIdx = conditions.findIndex(c => c === conds.date);\n\n db.runQuery(\n 'INSERT OR REPLACE INTO schedules_json_paths (schedule_id, payee, account, amount, date) VALUES (?, ?, ?, ?, ?)',\n [\n scheduleId,\n payeeIdx === -1 ? null : `$[${payeeIdx}]`,\n accountIdx === -1 ? null : `$[${accountIdx}]`,\n amountIdx === -1 ? null : `$[${amountIdx}]`,\n dateIdx === -1 ? null : `$[${dateIdx}]`\n ]\n );\n }\n }\n}\n\nfunction trackJSONPaths() {\n // Populate the table\n db.transaction(() => {\n getRules().forEach(rule => {\n onRuleUpdate(rule);\n });\n });\n\n return addSyncListener(onApplySync);\n}\n\nfunction onApplySync(oldValues, newValues) {\n let found = false;\n newValues.forEach((items, table) => {\n if (table === 'rules') {\n found = true;\n items.forEach(newValue => {\n onRuleUpdate(newValue);\n });\n }\n });\n}\n\n// This is the service that move schedules forward automatically and\n// posts transactions\n\nasync function postTransactionForSchedule({ id }) {\n let { data } = await aqlQuery(\n q('schedules')\n .filter({ id })\n .select('*')\n );\n let schedule = data[0];\n if (schedule == null || schedule._account == null) {\n return;\n }\n\n let transaction = {\n payee: schedule._payee,\n account: schedule._account,\n amount: getScheduledAmount(schedule._amount),\n date: schedule.next_date,\n schedule: schedule.id,\n cleared: false\n };\n\n if (transaction.account) {\n await addTransactions(transaction.account, [transaction]);\n }\n}\n\n// TODO: make this sequential\n\nexport async function advanceSchedulesService(syncSuccess) {\n // Move all paid schedules\n let { data: schedules } = await aqlQuery(\n q('schedules')\n .filter({ completed: false, '_account.closed': false })\n .select('*')\n );\n let { data: hasTransData } = await aqlQuery(\n getHasTransactionsQuery(schedules)\n );\n let hasTrans = new Set(hasTransData.filter(Boolean).map(row => row.schedule));\n\n let failedToPost = [];\n let didPost = false;\n\n for (let schedule of schedules) {\n let status = getStatus(\n schedule.next_date,\n schedule.completed,\n hasTrans.has(schedule.id)\n );\n\n if (status === 'paid') {\n if (schedule._date) {\n // Move forward recurring schedules\n if (schedule._date.frequency) {\n try {\n await setNextDate({ id: schedule.id });\n } catch (err) {\n // This might error if the rule is corrupted and it can't\n // find the rule\n }\n } else {\n if (schedule._date < currentDay()) {\n // Complete any single schedules\n await updateSchedule({\n schedule: { id: schedule.id, completed: true }\n });\n }\n }\n }\n } else if (\n (status === 'due' || status === 'missed') &&\n schedule.posts_transaction &&\n schedule._account\n ) {\n // Automatically create a transaction for due schedules\n if (syncSuccess) {\n await postTransactionForSchedule({ id: schedule.id });\n\n didPost = true;\n } else {\n failedToPost.push(schedule._payee);\n }\n }\n }\n\n if (failedToPost.length > 0) {\n connection.send('schedules-offline', { payees: failedToPost });\n } else if (didPost) {\n // This forces a full refresh of transactions because it\n // simulates them coming in from a full sync. This not a\n // great API right now, but I think generally the approach\n // is sane to treat them as external sync events.\n connection.send('sync-event', {\n type: 'success',\n tables: ['transactions'],\n syncDisabled: 'false'\n });\n }\n}\n\n// Expose functions to the client\nlet app = createApp();\n\napp.method('schedule/create', mutator(undoable(createSchedule)));\napp.method('schedule/update', mutator(undoable(updateSchedule)));\napp.method('schedule/delete', mutator(undoable(deleteSchedule)));\napp.method('schedule/skip-next-date', mutator(undoable(skipNextDate)));\napp.method(\n 'schedule/post-transaction',\n mutator(undoable(postTransactionForSchedule))\n);\napp.method(\n 'schedule/force-run-service',\n mutator(() => advanceSchedulesService(true))\n);\napp.method('schedule/get-possible-transactions', getPossibleTransactions);\napp.method('schedule/discover', discoverSchedules);\napp.method('schedule/get-upcoming-dates', getUpcomingDates);\n\napp.service(trackJSONPaths);\n\napp.events.on('sync', ({ type, subtype }) => {\n let completeEvent =\n type === 'success' || type === 'error' || type === 'unauthorized';\n\n if (completeEvent && prefs.getPrefs()) {\n let { lastScheduleRun } = prefs.getPrefs();\n\n if (lastScheduleRun !== currentDay()) {\n runMutator(() => advanceSchedulesService(type === 'success'));\n\n prefs.savePrefs({ lastScheduleRun: currentDay() });\n }\n }\n});\n\nexport default app;\n","import './polyfills';\nimport { differenceInDays } from 'date-fns';\nimport asyncStorage from '../platform/server/asyncStorage';\nimport { captureException, captureBreadcrumb } from '../platform/exceptions';\nimport * as prefs from './prefs';\nimport fs from '../platform/server/fs';\nimport * as sqlite from '../platform/server/sqlite';\nimport logger from '../platform/server/log';\nimport Platform from './platform';\nimport * as db from './db';\nimport * as sheet from './sheet';\nimport { withUndo, clearUndo, undo, redo } from './undo';\nimport { updateVersion } from './update';\nimport { Condition, Action, rankRules } from './accounts/rules';\nimport * as rules from './accounts/transaction-rules';\nimport * as mappings from './db/mappings';\nimport { batchUpdateTransactions } from './accounts/transactions';\nimport { FIELD_TYPES as ruleFieldTypes } from '../shared/rules';\nimport {\n getAvailableBackups,\n loadBackup,\n makeBackup,\n startBackupService,\n stopBackupService\n} from './backups';\nimport { amountToInteger, stringToInteger } from '../shared/util';\nimport * as monthUtils from '../shared/months';\nimport { fromPlaidAccountType } from '../shared/accounts';\nimport * as budget from './budget/base';\nimport * as bankSync from './accounts/sync';\nimport * as link from './accounts/link';\nimport { uniqueFileName, idFromFileName } from './util/budget-name';\nimport { mutator, runHandler } from './mutators';\nimport * as timestamp from './timestamp';\nimport * as merkle from './merkle';\nimport {\n initialFullSync,\n fullSync,\n batchMessages,\n setSyncingMode,\n makeTestMessage,\n clearFullSyncTimeout,\n syncAndReceiveMessages,\n resetSync,\n repairSync\n} from './sync';\nimport * as syncMigrations from './sync/migrate';\nimport { getStartingBalancePayee } from './accounts/payees';\nimport { parseFile } from './accounts/parse-file';\nimport { exportToCSV, exportQueryToCSV } from './accounts/export-to-csv';\nimport { getServer, setServer } from './server-config';\nimport installAPI from './api';\nimport injectAPI from '@actual-app/api/injected';\nimport * as cloudStorage from './cloud-storage';\nimport encryption from './encryption';\nimport * as tracking from './tracking/events';\nimport { get, post } from './post';\nimport { APIError, TransactionError, PostError, RuleError } from './errors';\nimport { createTestBudget } from '../mocks/budget';\nimport { runQuery as aqlQuery } from './aql/schema/run-query';\nimport { Query } from '../shared/query';\nimport q from '../shared/query';\nimport app from './main-app';\n\n// Apps\nimport schedulesApp from './schedules/app';\nimport budgetApp from './budget/app';\nimport notesApp from './notes/app';\nimport toolsApp from './tools/app';\n\nconst YNAB4 = require('@actual-app/import-ynab4/importer');\nconst YNAB5 = require('@actual-app/import-ynab5/importer');\nconst uuid = require('../platform/uuid');\nconst connection = require('../platform/server/connection');\nconst { resolveName, unresolveName } = require('./spreadsheet/util');\nconst SyncPb = require('./sync/proto/sync_pb');\n\n// let indexeddb = require('../platform/server/indexeddb');\n\nlet VERSION;\nlet DEMO_BUDGET_ID = '_demo-budget';\nlet TEST_BUDGET_ID = '_test-budget';\n\n// util\n\nfunction onSheetChange({ names }) {\n const nodes = names.map(name => {\n let node = sheet.get()._getNode(name);\n return { name: node.name, value: node.value };\n });\n connection.send('cells-changed', nodes);\n}\n\n// handlers\n\nexport let handlers = {};\n\nhandlers['undo'] = mutator(async function() {\n return undo();\n});\n\nhandlers['redo'] = mutator(function() {\n return redo();\n});\n\nhandlers['transactions-batch-update'] = mutator(async function({\n added,\n deleted,\n updated,\n learnCategories\n}) {\n return withUndo(async () => {\n let result = await batchUpdateTransactions({\n added,\n updated,\n deleted,\n learnCategories\n });\n\n // Return all data updates to the frontend\n return result.updated;\n });\n});\n\nhandlers['transaction-add'] = mutator(async function(transaction) {\n await handlers['transactions-batch-update']({ added: [transaction] });\n return {};\n});\n\nhandlers['transaction-update'] = mutator(async function(transaction) {\n await handlers['transactions-batch-update']({ updated: [transaction] });\n return {};\n});\n\nhandlers['transaction-delete'] = mutator(async function(transaction) {\n await handlers['transactions-batch-update']({ deleted: [transaction] });\n return {};\n});\n\nhandlers['transactions-filter'] = async function({\n term,\n accountId,\n latestDate,\n count,\n notPaged,\n options = {}\n}) {\n return db.getTransactions(\n term,\n accountId,\n latestDate,\n notPaged ? null : count == null ? undefined : count,\n options\n );\n};\n\nhandlers['transactions-parse-file'] = async function({ filepath, options }) {\n return parseFile(filepath, options);\n};\n\nhandlers['transactions-export'] = async function({\n transactions,\n accounts,\n categoryGroups,\n payees\n}) {\n return exportToCSV(transactions, accounts, categoryGroups, payees);\n};\n\nhandlers['transactions-export-query'] = async function({ query: queryState }) {\n return exportQueryToCSV(new Query(queryState));\n};\n\nhandlers['get-categories'] = async function() {\n return {\n grouped: await db.getCategoriesGrouped(),\n list: await db.getCategories()\n };\n};\n\nhandlers['get-earliest-transaction'] = async function() {\n let { data } = await aqlQuery(\n q('transactions')\n .options({ splits: 'none' })\n .orderBy({ date: 'asc' })\n .select('*')\n .limit(1)\n );\n return data[0] || null;\n};\n\nhandlers['get-budget-bounds'] = async function() {\n return budget.createAllBudgets();\n};\n\nhandlers['rollover-budget-month'] = async function({ month }) {\n let groups = await db.getCategoriesGrouped();\n let sheetName = monthUtils.sheetForMonth(month);\n\n function value(name) {\n let v = sheet.getCellValue(sheetName, name);\n return { value: v === '' ? 0 : v, name: resolveName(sheetName, name) };\n }\n\n let values = [\n value('available-funds'),\n value('last-month-overspent'),\n value('buffered'),\n value('total-budgeted'),\n value('to-budget'),\n\n value('from-last-month'),\n value('total-income'),\n value('total-spent'),\n value('total-leftover')\n ];\n\n for (let group of groups) {\n if (group.is_income) {\n values.push(value('total-income'));\n\n for (let cat of group.categories) {\n values.push(value(`sum-amount-${cat.id}`));\n }\n } else {\n values = values.concat([\n value(`group-budget-${group.id}`),\n value(`group-sum-amount-${group.id}`),\n value(`group-leftover-${group.id}`)\n ]);\n\n for (let cat of group.categories) {\n values = values.concat([\n value(`budget-${cat.id}`),\n value(`sum-amount-${cat.id}`),\n value(`leftover-${cat.id}`),\n value(`carryover-${cat.id}`)\n ]);\n }\n }\n }\n\n return values;\n};\n\nhandlers['report-budget-month'] = async function({ month }) {\n let groups = await db.getCategoriesGrouped();\n let sheetName = monthUtils.sheetForMonth(month);\n\n function value(name) {\n let v = sheet.getCellValue(sheetName, name);\n return { value: v === '' ? 0 : v, name: resolveName(sheetName, name) };\n }\n\n let values = [\n value('total-budgeted'),\n value('total-budget-income'),\n value('total-saved'),\n value('total-income'),\n value('total-spent'),\n value('real-saved'),\n value('total-leftover')\n ];\n\n for (let group of groups) {\n values = values.concat([\n value(`group-budget-${group.id}`),\n value(`group-sum-amount-${group.id}`),\n value(`group-leftover-${group.id}`)\n ]);\n\n for (let cat of group.categories) {\n values = values.concat([\n value(`budget-${cat.id}`),\n value(`sum-amount-${cat.id}`),\n value(`leftover-${cat.id}`)\n ]);\n\n if (!group.is_income) {\n values.push(value(`carryover-${cat.id}`));\n }\n }\n }\n\n return values;\n};\n\nhandlers['budget-set-type'] = async function({ type }) {\n if (type !== 'rollover' && type !== 'report') {\n throw new Error('Invalid budget type: ' + type);\n }\n\n // It's already the same; don't do anything\n if (type === prefs.getPrefs().budgetType) {\n return;\n }\n\n // Save prefs\n return prefs.savePrefs({ budgetType: type });\n};\n\nhandlers['category-create'] = mutator(async function({\n name,\n groupId,\n isIncome\n}) {\n return withUndo(async () => {\n if (!groupId) {\n throw APIError('Creating a category: groupId is required');\n }\n\n return db.insertCategory({\n name,\n cat_group: groupId,\n is_income: isIncome ? 1 : 0\n });\n });\n});\n\nhandlers['category-update'] = mutator(async function(category) {\n return withUndo(async () => {\n try {\n await db.updateCategory(category);\n } catch (e) {\n if (e.message.toLowerCase().includes('unique constraint')) {\n return { error: { type: 'category-exists' } };\n }\n throw e;\n }\n return {};\n });\n});\n\nhandlers['category-move'] = mutator(async function({ id, groupId, targetId }) {\n return withUndo(async () => {\n await batchMessages(async () => {\n await db.moveCategory(id, groupId, targetId);\n });\n return 'ok';\n });\n});\n\nhandlers['category-delete'] = mutator(async function({ id, transferId }) {\n return withUndo(async () => {\n let result = {};\n await batchMessages(async () => {\n let row = await db.first(\n 'SELECT is_income FROM categories WHERE id = ?',\n [id]\n );\n if (!row) {\n result = { error: 'no-categories' };\n return;\n }\n\n let transfer =\n transferId &&\n (await db.first('SELECT is_income FROM categories WHERE id = ?', [\n transferId\n ]));\n\n if (!row || (transferId && !transfer)) {\n result = { error: 'no-categories' };\n return;\n } else if (transferId && row.is_income !== transfer.is_income) {\n result = { error: 'category-type' };\n return;\n }\n\n // Update spreadsheet values if it's an expense category\n // TODO: We should do this for income too if it's a reflect budget\n if (row.is_income === 0) {\n if (transferId) {\n await budget.doTransfer([id], transferId);\n }\n }\n\n await db.deleteCategory({ id }, transferId);\n });\n\n return result;\n });\n});\n\nhandlers['category-group-create'] = mutator(async function({ name, isIncome }) {\n return withUndo(async () => {\n return db.insertCategoryGroup({\n name,\n is_income: isIncome ? 1 : 0\n });\n });\n});\n\nhandlers['category-group-update'] = mutator(async function(group) {\n return withUndo(async () => {\n return db.updateCategoryGroup(group);\n });\n});\n\nhandlers['category-group-move'] = mutator(async function({ id, targetId }) {\n return withUndo(async () => {\n await batchMessages(async () => {\n await db.moveCategoryGroup(id, targetId);\n });\n return 'ok';\n });\n});\n\nhandlers['category-group-delete'] = mutator(async function({ id, transferId }) {\n return withUndo(async () => {\n const groupCategories = await db.all(\n 'SELECT id FROM categories WHERE cat_group = ? AND tombstone = 0',\n [id]\n );\n\n return batchMessages(async () => {\n if (transferId) {\n await budget.doTransfer(groupCategories.map(c => c.id), transferId);\n }\n await db.deleteCategoryGroup({ id }, transferId);\n });\n });\n});\n\nhandlers['must-category-transfer'] = async function({ id }) {\n const res = await db.runQuery(\n `SELECT count(t.id) as count FROM transactions t\n LEFT JOIN category_mapping cm ON cm.id = t.category\n WHERE cm.transferId = ? AND t.tombstone = 0`,\n [id],\n true\n );\n\n // If there are transactions with this category, return early since\n // we already know it needs to be tranferred\n if (res[0].count !== 0) {\n return true;\n }\n\n // If there are any non-zero budget values, also force the user to\n // transfer the category.\n return [...sheet.get().meta().createdMonths].some(month => {\n const sheetName = monthUtils.sheetForMonth(month);\n const value = sheet.get().getCellValue(sheetName, 'budget-' + id);\n\n return value !== 0;\n });\n};\n\nhandlers['payee-create'] = mutator(async function({ name }) {\n return withUndo(async () => {\n return db.insertPayee({ name });\n });\n});\n\nhandlers['payees-get'] = async function() {\n return db.getPayees();\n};\n\nhandlers['payees-get-rule-counts'] = async function() {\n let payeeCounts = {};\n let allRules = rules.getRules();\n\n rules.iterateIds(rules.getRules(), 'payee', (rule, id) => {\n if (payeeCounts[id] == null) {\n payeeCounts[id] = 0;\n }\n payeeCounts[id]++;\n });\n\n return payeeCounts;\n};\n\nhandlers['payees-merge'] = mutator(async function({ targetId, mergeIds }) {\n return withUndo(\n async () => {\n return db.mergePayees(targetId, mergeIds);\n },\n { targetId, mergeIds }\n );\n});\n\nhandlers['payees-batch-change'] = mutator(async function({\n added,\n deleted,\n updated\n}) {\n return withUndo(async () => {\n return batchMessages(async () => {\n if (deleted) {\n await Promise.all(deleted.map(p => db.deletePayee(p)));\n }\n\n if (added) {\n await Promise.all(added.map(p => db.insertPayee(p)));\n }\n\n if (updated) {\n await Promise.all(updated.map(p => db.updatePayee(p)));\n }\n });\n });\n});\n\nhandlers['payees-check-orphaned'] = async function({ ids }) {\n let orphaned = new Set(await db.getOrphanedPayees());\n return ids.filter(id => orphaned.has(id));\n};\n\nhandlers['payees-get-rules'] = async function({ id }) {\n return rules.getRulesForPayee(id).map(rule => rule.serialize());\n};\n\nhandlers['payees-delete-rule'] = mutator(async function({ id, payee_id }) {\n return withUndo(\n async () => {\n return await db.deletePayeeRule({ id });\n },\n { payeeId: payee_id }\n );\n});\n\nhandlers['payees-update-rule'] = mutator(async function(rule) {\n return withUndo(\n async () => {\n return await db.updatePayeeRule(rule);\n },\n { payeeId: rule.payee_id }\n );\n});\n\nhandlers['payees-add-rule'] = mutator(async function(rule) {\n return withUndo(\n async () => {\n let id = await db.insertPayeeRule(rule);\n return { ...rule, id };\n },\n { payeeId: rule.payee_id }\n );\n});\n\nfunction validateRule(rule) {\n // Returns an array of errors, the array is the same link as the\n // passed-in `array`, or null if there are no errors\n function runValidation(array, validate) {\n let result = array.map(item => {\n try {\n validate(item);\n } catch (e) {\n if (e instanceof RuleError) {\n console.warn('Invalid rule', e);\n return e.type;\n }\n throw e;\n }\n return null;\n });\n\n return result.some(Boolean) ? result : null;\n }\n\n let conditionErrors = runValidation(\n rule.conditions,\n cond =>\n new Condition(\n cond.op,\n cond.field,\n cond.value,\n cond.options,\n ruleFieldTypes\n )\n );\n\n let actionErrors = runValidation(\n rule.actions,\n action =>\n new Action(\n action.op,\n action.field,\n action.value,\n action.options,\n ruleFieldTypes\n )\n );\n\n if (conditionErrors || actionErrors) {\n return {\n conditionErrors,\n actionErrors\n };\n }\n\n return null;\n}\n\nhandlers['rule-validate'] = async function(rule) {\n let error = validateRule(rule);\n return { error };\n};\n\nhandlers['rule-add'] = mutator(async function(rule) {\n let error = validateRule(rule);\n if (error) {\n return { error };\n }\n\n let id = await rules.insertRule(rule);\n return { id };\n});\n\nhandlers['rule-update'] = mutator(async function(rule) {\n let error = validateRule(rule);\n if (error) {\n return { error };\n }\n\n await rules.updateRule(rule);\n return {};\n});\n\nhandlers['rule-delete'] = mutator(async function(rule) {\n return rules.deleteRule(rule);\n});\n\nhandlers['rule-delete-all'] = mutator(async function(ids) {\n let someDeletionsFailed = false;\n\n await batchMessages(async () => {\n for (let id of ids) {\n let res = await rules.deleteRule({ id });\n if (res === false) {\n someDeletionsFailed = true;\n }\n }\n });\n\n return { someDeletionsFailed };\n});\n\nhandlers['rule-apply-actions'] = mutator(async function({\n transactionIds,\n actions\n}) {\n return rules.applyActions(transactionIds, actions, handlers);\n});\n\nhandlers['rule-add-payee-rename'] = mutator(async function({ fromNames, to }) {\n return rules.updatePayeeRenameRule(fromNames, to);\n});\n\nhandlers['rules-get'] = async function() {\n return rankRules(rules.getRules()).map(rule => rule.serialize());\n};\n\nhandlers['rule-get'] = async function({ id }) {\n let rule = rules.getRules().find(rule => rule.id === id);\n return rule ? rule.serialize() : null;\n};\n\nhandlers['rules-run'] = async function({ transaction }) {\n return rules.runRules(transaction);\n};\n\nhandlers['rules-migrate'] = async function() {\n await rules.migrateOldRules();\n};\n\nhandlers['make-filters-from-conditions'] = async function({ conditions }) {\n return rules.conditionsToAQL(conditions);\n};\n\nhandlers['getCell'] = async function({ sheetName, name }) {\n // Fields is no longer used - hardcode\n let fields = ['name', 'value'];\n let node = sheet.get()._getNode(resolveName(sheetName, name));\n if (fields) {\n let res = {};\n fields.forEach(field => {\n if (field === 'run') {\n res[field] = node._run ? node._run.toString() : null;\n } else {\n res[field] = node[field];\n }\n });\n return res;\n } else {\n return node;\n }\n};\n\nhandlers['getCells'] = async function({ names }) {\n return names.map(name => ({ value: sheet.get()._getNode(name).value }));\n};\n\nhandlers['getCellNamesInSheet'] = async function({ sheetName }) {\n let names = [];\n for (let name of sheet\n .get()\n .getNodes()\n .keys()) {\n let { sheet: nodeSheet, name: nodeName } = unresolveName(name);\n if (nodeSheet === sheetName) {\n names.push(nodeName);\n }\n }\n return names;\n};\n\nhandlers['debugCell'] = async function({ sheetName, name }) {\n let node = sheet.get().getNode(resolveName(sheetName, name));\n return {\n ...node,\n _run: node._run && node._run.toString()\n };\n};\n\nhandlers['create-query'] = async function({ sheetName, name, query }) {\n // Always run it regardless of cache. We don't know anything has changed\n // between the cache value being saved and now\n sheet.get().createQuery(sheetName, name, query);\n return 'ok';\n};\n\nhandlers['query'] = async function(query) {\n if (query.table == null) {\n throw new Error('query has no table, did you forgot to call `.serialize`?');\n }\n\n return aqlQuery(query);\n};\n\nhandlers['bank-delete'] = async function({ id }) {\n const accts = await db.runQuery(\n 'SELECT * FROM accounts WHERE bank = ?',\n [id],\n true\n );\n\n await db.delete_('banks', id);\n await Promise.all(\n accts.map(async acct => {\n // TODO: This will not sync across devices because we are bypassing\n // the \"recorded\" functions\n await db.runQuery('DELETE FROM transactions WHERE acct = ?', [acct.id]);\n await db.delete_('accounts', acct.id);\n })\n );\n return 'ok';\n};\n\nhandlers['account-update'] = mutator(async function({ id, name }) {\n return withUndo(async () => {\n await db.update('accounts', { id, name });\n return {};\n });\n});\n\nhandlers['accounts-get'] = async function() {\n return db.getAccounts();\n};\n\nhandlers['account-properties'] = async function({ id }) {\n const { balance } = await db.first(\n 'SELECT sum(amount) as balance FROM transactions WHERE acct = ? AND isParent = 0 AND tombstone = 0',\n [id]\n );\n const { count } = await db.first(\n 'SELECT count(id) as count FROM transactions WHERE acct = ? AND tombstone = 0',\n [id]\n );\n\n return { balance: balance || 0, numTransactions: count };\n};\n\nhandlers['accounts-link'] = async function({\n institution,\n publicToken,\n accountId,\n upgradingId\n}) {\n let bankId = await link.handoffPublicToken(institution, publicToken);\n\n let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n // Get all the available accounts and find the selected one\n let accounts = await bankSync.getAccounts(userId, userKey, bankId);\n let account = accounts.find(acct => acct.account_id === accountId);\n\n await db.update('accounts', {\n id: upgradingId,\n account_id: account.account_id,\n official_name: account.official_name,\n type: fromPlaidAccountType(account.type),\n balance_current: amountToInteger(account.balances.current),\n balance_available: amountToInteger(account.balances.available),\n balance_limit: amountToInteger(account.balances.limit),\n mask: account.mask,\n bank: bankId\n });\n\n await bankSync.syncAccount(\n userId,\n userKey,\n upgradingId,\n account.account_id,\n bankId\n );\n\n connection.send('sync-event', {\n type: 'success',\n tables: ['transactions']\n });\n\n return 'ok';\n};\n\nhandlers['accounts-connect'] = async function({\n institution,\n publicToken,\n accountIds,\n offbudgetIds\n}) {\n let bankId = await link.handoffPublicToken(institution, publicToken);\n let ids = await link.addAccounts(bankId, accountIds, offbudgetIds);\n return ids;\n};\n\nhandlers['account-create'] = mutator(async function({\n name,\n type,\n balance,\n offBudget,\n closed\n}) {\n return withUndo(async () => {\n const id = await db.insertAccount({\n name,\n type,\n offbudget: offBudget ? 1 : 0,\n closed: closed ? 1 : 0\n });\n\n await db.insertPayee({\n name: '',\n transfer_acct: id\n });\n\n if (balance != null) {\n let payee = await getStartingBalancePayee();\n\n await db.insertTransaction({\n account: id,\n amount: amountToInteger(balance),\n category: offBudget ? null : payee.category,\n payee: payee.id,\n date: monthUtils.currentDay(),\n cleared: true,\n starting_balance_flag: true\n });\n }\n\n return id;\n });\n});\n\nhandlers['account-close'] = mutator(async function({\n id,\n transferAccountId,\n categoryId,\n forced\n}) {\n // Unlink the account if it's linked. This makes sure to remove it\n // from Plaid. (This should not be undo-able, as it mutates the\n // remote server and the user will have to link the account again)\n await handlers['account-unlink']({ id });\n\n return withUndo(async () => {\n let account = await db.first(\n 'SELECT * FROM accounts WHERE id = ? AND tombstone = 0',\n [id]\n );\n\n // Do nothing if the account doesn't exist or it's already been\n // closed\n if (!account || account.closed === 1) {\n return;\n }\n\n const { balance, numTransactions } = await handlers['account-properties']({\n id\n });\n\n // If there are no transactions, we can simply delete the account\n if (numTransactions === 0) {\n await db.deleteAccount({ id });\n } else if (forced) {\n let rows = await db.runQuery(\n 'SELECT id, transfer_id FROM v_transactions WHERE account = ?',\n [id],\n true\n );\n\n let { id: payeeId } = await db.first(\n 'SELECT id FROM payees WHERE transfer_acct = ?',\n [id]\n );\n\n await batchMessages(() => {\n // TODO: what this should really do is send a special message that\n // automatically marks the tombstone value for all transactions\n // within an account... or something? This is problematic\n // because another client could easily add new data that\n // should be marked as deleted.\n\n rows.forEach(row => {\n if (row.transfer_id) {\n db.updateTransaction({\n id: row.transfer_id,\n payee: null,\n transfer_id: null\n });\n }\n\n db.deleteTransaction({ id: row.id });\n });\n\n db.deleteAccount({ id });\n db.deleteTransferPayee({ id: payeeId });\n });\n } else {\n if (balance !== 0 && transferAccountId == null) {\n throw APIError('balance is non-zero: transferAccountId is required');\n }\n\n await db.update('accounts', { id, closed: 1 });\n\n // If there is a balance we need to transfer it to the specified\n // account (and possibly categorize it)\n if (balance !== 0) {\n let { id: payeeId } = await db.first(\n 'SELECT id FROM payees WHERE transfer_acct = ?',\n [transferAccountId]\n );\n\n await handlers['transaction-add']({\n id: uuid.v4Sync(),\n payee: payeeId,\n amount: -balance,\n account: id,\n date: monthUtils.currentDay(),\n notes: 'Closing account',\n category: categoryId || null\n });\n }\n }\n });\n});\n\nhandlers['account-reopen'] = mutator(async function({ id }) {\n return withUndo(async () => {\n await db.update('accounts', { id, closed: 0 });\n });\n});\n\nhandlers['account-move'] = mutator(async function({ id, targetId }) {\n return withUndo(async () => {\n await db.moveAccount(id, targetId);\n });\n});\n\nlet stopPolling = false;\n\nhandlers['poll-web-token'] = async function({ token }) {\n let [[, userId], [, key]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n let startTime = Date.now();\n stopPolling = false;\n\n async function getData(cb) {\n if (stopPolling) {\n return;\n }\n\n if (Date.now() - startTime >= 1000 * 60 * 10) {\n cb('timeout');\n return;\n }\n\n let data = await post(\n getServer().PLAID_SERVER + '/get-web-token-contents',\n {\n userId,\n key,\n token\n }\n );\n\n if (data) {\n if (data.error) {\n cb('unknown');\n } else {\n cb(null, data);\n }\n } else {\n setTimeout(() => getData(cb), 3000);\n }\n }\n\n return new Promise(resolve => {\n getData((error, data) => {\n if (error) {\n resolve({ error });\n } else {\n resolve({ data });\n }\n });\n });\n};\n\nhandlers['poll-web-token-stop'] = async function() {\n stopPolling = true;\n return 'ok';\n};\n\nhandlers['accounts-sync'] = async function({ id }) {\n let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n let accounts = await db.runQuery(\n `SELECT a.*, b.id as bankId FROM accounts a\n LEFT JOIN banks b ON a.bank = b.id\n WHERE a.tombstone = 0 AND a.closed = 0`,\n [],\n true\n );\n\n if (id) {\n accounts = accounts.filter(acct => acct.id === id);\n }\n\n let errors = [];\n let newTransactions = [];\n let matchedTransactions = [];\n let updatedAccounts = [];\n\n let { groupId } = prefs.getPrefs();\n\n for (var i = 0; i < accounts.length; i++) {\n const acct = accounts[i];\n if (acct.bankId) {\n try {\n const res = await bankSync.syncAccount(\n userId,\n userKey,\n acct.id,\n acct.account_id,\n acct.bankId\n );\n let { added, updated } = res;\n\n newTransactions = newTransactions.concat(added);\n matchedTransactions = matchedTransactions.concat(updated);\n\n if (added.length > 0 || updated.length > 0) {\n updatedAccounts = updatedAccounts.concat(acct.id);\n }\n } catch (err) {\n if (err.type === 'BankSyncError') {\n errors.push({\n type: 'SyncError',\n accountId: acct.id,\n message: 'Failed syncing account \"' + acct.name + '\".',\n category: err.category,\n code: err.code\n });\n } else if (err instanceof PostError && err.reason !== 'internal') {\n errors.push({\n accountId: acct.id,\n message: `Account \"${\n acct.name\n }\" is not linked properly. Please link it again`\n });\n } else {\n errors.push({\n accountId: acct.id,\n message:\n 'There was an internal error. Please email help@actualbudget.com for support.',\n internal: err.stack\n });\n\n err.message = 'Failed syncing account: ' + err.message;\n\n captureException(err);\n }\n }\n }\n }\n\n if (updatedAccounts.length > 0) {\n connection.send('sync-event', {\n type: 'success',\n tables: ['transactions']\n });\n }\n\n return { errors, newTransactions, matchedTransactions, updatedAccounts };\n};\n\nhandlers['transactions-import'] = mutator(function({\n accountId,\n transactions\n}) {\n return withUndo(async () => {\n if (typeof accountId !== 'string') {\n throw APIError('transactions-import: accountId must be an id');\n }\n\n try {\n return await bankSync.reconcileTransactions(accountId, transactions);\n } catch (err) {\n if (err instanceof TransactionError) {\n return { errors: [{ message: err.message }], added: [], updated: [] };\n }\n\n throw err;\n }\n });\n});\n\nhandlers['account-unlink'] = mutator(async function({ id }) {\n let { bank: bankId } = await db.first(\n 'SELECT bank FROM accounts WHERE id = ?',\n [id]\n );\n\n if (!bankId) {\n return 'ok';\n }\n\n await db.updateAccount({\n id,\n account_id: null,\n bank: null,\n balance_current: null,\n balance_available: null,\n balance_limit: null\n });\n\n let { count } = await db.first(\n 'SELECT COUNT(*) as count FROM accounts WHERE bank = ?',\n [bankId]\n );\n\n if (count === 0) {\n // No more accounts are associated with this bank. We can remove\n // it from Plaid.\n\n let [[, userId], [, key]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n await post(getServer().PLAID_SERVER + '/remove-access-token', {\n userId,\n key,\n item_id: bankId\n });\n }\n\n return 'ok';\n});\n\nhandlers['make-plaid-public-token'] = async function({ bankId }) {\n let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n 'user-id',\n 'user-key'\n ]);\n\n let data = await post(getServer().PLAID_SERVER + '/make-public-token', {\n userId: userId,\n key: userKey,\n item_id: '' + bankId\n });\n\n if (data.error_code) {\n return { error: '', code: data.error_code, type: data.error_type };\n }\n\n return { linkToken: data.link_token };\n};\n\nhandlers['save-global-prefs'] = async function(prefs) {\n if ('maxMonths' in prefs) {\n await asyncStorage.setItem('max-months', '' + prefs.maxMonths);\n }\n if ('trackUsage' in prefs) {\n tracking.toggle(prefs.trackUsage);\n await asyncStorage.setItem('track-usage', '' + prefs.trackUsage);\n }\n if ('autoUpdate' in prefs) {\n await asyncStorage.setItem('auto-update', '' + prefs.autoUpdate);\n process.send({ type: 'shouldAutoUpdate', flag: prefs.autoUpdate });\n }\n if ('documentDir' in prefs) {\n if (await fs.exists(prefs.documentDir)) {\n await asyncStorage.setItem('document-dir', prefs.documentDir);\n }\n }\n if ('floatingSidebar' in prefs) {\n await asyncStorage.setItem('floating-sidebar', '' + prefs.floatingSidebar);\n }\n return 'ok';\n};\n\nhandlers['load-global-prefs'] = async function() {\n let [\n [, floatingSidebar],\n [, seenTutorial],\n [, maxMonths],\n [, trackUsage],\n [, autoUpdate],\n [, documentDir],\n [, encryptKey]\n ] = await asyncStorage.multiGet([\n 'floating-sidebar',\n 'seen-tutorial',\n 'max-months',\n 'track-usage',\n 'auto-update',\n 'document-dir',\n 'encrypt-key'\n ]);\n return {\n floatingSidebar: floatingSidebar === 'true' ? true : false,\n seenTutorial: seenTutorial === 'true' ? true : false,\n maxMonths: stringToInteger(maxMonths || ''),\n // Default to true\n trackUsage: trackUsage == null || trackUsage === 'true' ? true : false,\n autoUpdate: autoUpdate == null || autoUpdate === 'true' ? true : false,\n documentDir: documentDir || getDefaultDocumentDir(),\n keyId: encryptKey && JSON.parse(encryptKey).id\n };\n};\n\nhandlers['save-prefs'] = async function(prefsToSet) {\n let { cloudFileId } = prefs.getPrefs();\n\n // Need to sync the budget name on the server as well\n if (prefsToSet.budgetName && cloudFileId) {\n let userToken = await asyncStorage.getItem('user-token');\n\n await post(getServer().SYNC_SERVER + '/update-user-filename', {\n token: userToken,\n fileId: cloudFileId,\n name: prefsToSet.budgetName\n });\n }\n\n await prefs.savePrefs(prefsToSet);\n return 'ok';\n};\n\nhandlers['load-prefs'] = async function() {\n return prefs.getPrefs();\n};\n\nhandlers['sync-reset'] = async function() {\n return await resetSync();\n};\n\nhandlers['sync-repair'] = async function() {\n await repairSync();\n};\n\n// A user can only enable/change their key with the file loaded. This\n// will change in the future: during onboarding the user should be\n// able to enable encryption. (Imagine if they are importing data from\n// another source, they should be able to encrypt first)\nhandlers['key-make'] = async function({ password }) {\n if (!prefs.getPrefs()) {\n throw new Error('user-set-key must be called with file loaded');\n }\n\n let cloudFileId = prefs.getPrefs().cloudFileId;\n\n let salt = encryption.randomBytes(32).toString('base64');\n let id = uuid.v4Sync();\n let key = await encryption.createKey({ id, password, salt });\n\n // Load the key\n await encryption.loadKey(key);\n\n // Make some test data to use if the key is valid or not\n let testContent = await makeTestMessage(key.getId());\n\n // Changing your key necessitates a sync reset as well. This will\n // clear all existing encrypted data from the server so you won't\n // have a mix of data encrypted with different keys.\n return await resetSync({\n key,\n salt,\n testContent: JSON.stringify({\n ...testContent,\n value: testContent.value.toString('base64')\n })\n });\n};\n\n// This can be called both while a file is already loaded or not. This\n// will see if a key is valid and if so save it off.\nhandlers['key-test'] = async function({ fileId, password }) {\n let userToken = await asyncStorage.getItem('user-token');\n\n if (fileId == null) {\n fileId = prefs.getPrefs().cloudFileId;\n }\n\n let res;\n try {\n res = await post(getServer().SYNC_SERVER + '/user-get-key', {\n token: userToken,\n fileId\n });\n } catch (e) {\n console.log(e);\n return { error: { reason: 'network' } };\n }\n\n let { id, salt, test } = res;\n\n if (test == null) {\n return { error: { reason: 'old-key-style' } };\n }\n\n test = JSON.parse(test);\n\n let key = await encryption.createKey({ id, password, salt });\n encryption.loadKey(key);\n\n try {\n await encryption.decrypt(Buffer.from(test.value, 'base64'), test.meta);\n } catch (e) {\n console.log(e);\n\n // Unload the key, it's invalid\n encryption.unloadKey(key);\n return { error: { reason: 'decrypt-failure' } };\n }\n\n // Persist key in async storage\n let keys = JSON.parse((await asyncStorage.getItem(`encrypt-keys`)) || '{}');\n keys[fileId] = key.serialize();\n await asyncStorage.setItem('encrypt-keys', JSON.stringify(keys));\n\n // Save the key id in prefs if the are loaded. If they aren't, we\n // are testing a key to download a file and when the file is\n // actually downloaded it will update the prefs with the latest key id\n if (prefs.getPrefs()) {\n await prefs.savePrefs({ encryptKeyId: key.getId() });\n }\n\n return {};\n};\n\nhandlers['should-pitch-subscribe'] = async function() {\n let seenSubscribe = await asyncStorage.getItem('seenSubscribe');\n return seenSubscribe !== 'true';\n};\n\nhandlers['has-pitched-subscribe'] = async function() {\n await asyncStorage.setItem('seenSubscribe', 'true');\n return 'ok';\n};\n\nhandlers['subscribe-needs-bootstrap'] = async function({ url } = {}) {\n let res;\n try {\n res = await get(getServer(url).SIGNUP_SERVER + '/needs-bootstrap');\n } catch (err) {\n return { error: 'network-failure' };\n }\n\n try {\n res = JSON.parse(res);\n } catch (err) {\n return { error: 'parse-failure' };\n }\n\n if (res.status === 'error') {\n return { error: res.reason };\n }\n\n return { bootstrapped: res.data.bootstrapped };\n};\n\nhandlers['subscribe-bootstrap'] = async function({ password }) {\n let res;\n try {\n res = await post(getServer().SIGNUP_SERVER + '/bootstrap', { password });\n } catch (err) {\n return { error: err.reason || 'network-failure' };\n }\n\n if (res.token) {\n await asyncStorage.setItem('user-token', res.token);\n return {};\n }\n return { error: 'internal' };\n};\n\nhandlers['subscribe-set-user'] = async function({ token }) {\n await asyncStorage.setItem('user-token', token);\n};\n\nhandlers['subscribe-get-user'] = async function() {\n let userToken = await asyncStorage.getItem('user-token');\n\n if (userToken) {\n try {\n let res = await get(getServer().SIGNUP_SERVER + '/validate', {\n headers: {\n 'X-ACTUAL-TOKEN': userToken\n }\n });\n res = JSON.parse(res);\n\n if (res.status === 'error') {\n if (res.reason === 'unauthorized') {\n return null;\n }\n return { offline: true };\n }\n\n return { offline: false };\n } catch (e) {\n console.log(e);\n return { offline: true };\n }\n }\n\n return null;\n};\n\nhandlers['subscribe-change-password'] = async function({ password }) {\n let userToken = await asyncStorage.getItem('user-token');\n let res;\n try {\n res = await post(getServer().SIGNUP_SERVER + '/change-password', {\n token: userToken,\n password\n });\n } catch (err) {\n return { error: err.reason || 'network-failure' };\n }\n\n return {};\n};\n\nhandlers['subscribe-sign-in'] = async function({ password }) {\n let res = await post(getServer().SIGNUP_SERVER + '/login', {\n password\n });\n\n if (res.token) {\n await asyncStorage.setItem('user-token', res.token);\n return {};\n }\n\n return { error: 'invalid-password' };\n};\n\nhandlers['subscribe-sign-out'] = async function() {\n encryption.unloadAllKeys();\n await asyncStorage.multiRemove([\n 'user-token',\n 'encrypt-keys',\n 'lastBudget',\n 'readOnly'\n ]);\n return 'ok';\n};\n\nhandlers['get-server-url'] = async function() {\n return getServer() && getServer().BASE_SERVER;\n};\n\nhandlers['set-server-url'] = async function({ url }) {\n // Validate the server is running\n let { error } = await runHandler(handlers['subscribe-needs-bootstrap'], {\n url\n });\n if (error) {\n return { error };\n }\n\n asyncStorage.setItem('server-url', url);\n setServer(url);\n return {};\n};\n\nhandlers['sync'] = async function() {\n return fullSync();\n};\n\nhandlers['get-version'] = async function() {\n return { version: VERSION };\n};\n\nhandlers['get-budgets'] = async function() {\n const paths = await fs.listDir(fs.getDocumentDir());\n const budgets = (await Promise.all(\n paths.map(async name => {\n const prefsPath = fs.join(fs.getDocumentDir(), name, 'metadata.json');\n if (await fs.exists(prefsPath)) {\n let prefs;\n try {\n prefs = JSON.parse(await fs.readFile(prefsPath));\n } catch (e) {\n console.log('Error parsing metadata:', e.stack);\n return;\n }\n\n // We treat the directory name as the canonical id so that if\n // the user moves it around/renames/etc, nothing breaks. The\n // id is stored in prefs just for convenience (and the prefs\n // will always update to the latest given id)\n if (name !== DEMO_BUDGET_ID) {\n return {\n id: name,\n cloudFileId: prefs.cloudFileId,\n groupId: prefs.groupId,\n name: prefs.budgetName || '(no name)'\n };\n }\n }\n\n return null;\n })\n )).filter(x => x);\n\n return budgets;\n};\n\nhandlers['get-ynab4-files'] = async function() {\n return YNAB4.findBudgets();\n};\n\nhandlers['get-remote-files'] = async function() {\n return cloudStorage.listRemoteFiles();\n};\n\nhandlers['reset-budget-cache'] = mutator(async function() {\n // Recomputing everything will update the cache\n await sheet.loadUserBudgets(db);\n sheet.get().recomputeAll();\n await sheet.waitOnSpreadsheet();\n});\n\nhandlers['upload-budget'] = async function({ id } = {}) {\n if (id) {\n if (prefs.getPrefs()) {\n throw new Error('upload-budget: id given but prefs already loaded');\n }\n\n await prefs.loadPrefs(id);\n }\n\n try {\n await cloudStorage.upload();\n } catch (e) {\n console.log(e);\n if (e.type === 'FileUploadError') {\n return { error: e };\n }\n captureException(e);\n return { error: { reason: 'internal' } };\n } finally {\n if (id) {\n prefs.unloadPrefs();\n }\n }\n\n return {};\n};\n\nhandlers['download-budget'] = async function({ fileId, replace }) {\n let result;\n try {\n result = await cloudStorage.download(fileId, replace);\n } catch (e) {\n if (e.type === 'FileDownloadError') {\n if (e.reason === 'file-exists' && e.meta.id) {\n await prefs.loadPrefs(e.meta.id);\n let name = prefs.getPrefs().budgetName;\n prefs.unloadPrefs();\n\n e.meta = { ...e.meta, name };\n }\n\n return { error: e };\n } else {\n captureException(e);\n return { error: { reason: 'internal' } };\n }\n }\n\n let id = result.id;\n\n // Load the budget and do a full sync\n result = await loadBudget(result.id, VERSION, { showUpdate: true });\n if (result.error) {\n return { error: { reason: result.error } };\n }\n\n setSyncingMode('enabled');\n await initialFullSync();\n\n await handlers['close-budget']();\n\n return { id };\n};\n\nhandlers['load-budget'] = async function({ id }) {\n let currentPrefs = prefs.getPrefs();\n\n if (currentPrefs) {\n if (currentPrefs.id === id) {\n // If it's already loaded, do nothing\n return {};\n } else {\n // Otherwise, close the currently loaded budget\n await handlers['close-budget']();\n }\n }\n\n let res = await loadBudget(id, VERSION, { showUpdate: true });\n\n async function trackSizes() {\n let getFileSize = async name => {\n let dbFile = fs.join(fs.getBudgetDir(id), name);\n try {\n return await fs.size(dbFile);\n } catch (err) {\n return null;\n }\n };\n\n try {\n let dbSize = await getFileSize('db.sqlite');\n let cacheSize = await getFileSize('cache.sqlite');\n tracking.track('app:load-budget', { size: dbSize, cacheSize });\n } catch (err) {\n console.warn(err);\n }\n }\n trackSizes();\n\n return res;\n};\n\nhandlers['create-demo-budget'] = async function() {\n // Make sure the read only flag isn't leftover (normally it's\n // reset when signing in, but you don't have to sign in for the\n // demo budget)\n await asyncStorage.setItem('readOnly', '');\n\n return handlers['create-budget']({\n budgetName: 'Demo Budget',\n testMode: true,\n testBudgetId: DEMO_BUDGET_ID\n });\n};\n\nhandlers['close-budget'] = async function() {\n captureBreadcrumb({ message: 'Closing budget' });\n\n // The spreadsheet may be running, wait for it to complete\n await sheet.waitOnSpreadsheet();\n sheet.unloadSpreadsheet();\n\n clearFullSyncTimeout();\n await app.stopServices();\n\n await db.closeDatabase();\n\n try {\n await asyncStorage.setItem('lastBudget', '');\n } catch (e) {\n // This might fail if we are shutting down after failing to load a\n // budget. We want to unload whatever has already been loaded but\n // be resilient to anything failing\n }\n\n prefs.unloadPrefs();\n stopBackupService();\n return 'ok';\n};\n\nhandlers['delete-budget'] = async function({ id, cloudFileId }) {\n // If it's a cloud file, you can delete it from the server by\n // passing its cloud id\n if (cloudFileId && !process.env.IS_BETA) {\n await cloudStorage.removeFile(cloudFileId).catch(err => {});\n }\n\n // If a local file exists, you can delete it by passing its local id\n if (id) {\n let budgetDir = fs.getBudgetDir(id);\n await fs.removeDirRecursively(budgetDir);\n }\n\n return 'ok';\n};\n\nhandlers['create-budget'] = async function({\n budgetName,\n avoidUpload,\n testMode,\n testBudgetId\n} = {}) {\n let id;\n if (testMode) {\n budgetName = budgetName || 'Test Budget';\n id = testBudgetId || TEST_BUDGET_ID;\n\n if (await fs.exists(fs.getBudgetDir(id))) {\n await fs.removeDirRecursively(fs.getBudgetDir(id));\n }\n } else {\n // Generate budget name if not given\n if (!budgetName) {\n // Unfortunately we need to load all of the existing files first\n // so we can detect conflicting names.\n let files = await handlers['get-budgets']();\n budgetName = await uniqueFileName(files);\n }\n\n id = await idFromFileName(budgetName);\n }\n\n let budgetDir = fs.getBudgetDir(id);\n await fs.mkdir(budgetDir);\n\n // Create the initial database\n await fs.copyFile(fs.bundledDatabasePath, fs.join(budgetDir, 'db.sqlite'));\n\n // Create the initial prefs file\n await fs.writeFile(\n fs.join(budgetDir, 'metadata.json'),\n JSON.stringify(prefs.getDefaultPrefs(id, budgetName))\n );\n\n // Load it in\n let { error } = await loadBudget(id, VERSION);\n if (error) {\n console.log('Error creating budget: ' + error);\n return { error };\n }\n\n if (!avoidUpload && !testMode) {\n try {\n await cloudStorage.upload();\n } catch (e) {\n // Ignore any errors uploading. If they are offline they should\n // still be able to create files.\n }\n }\n\n if (testMode) {\n await createTestBudget(handlers);\n }\n\n return {};\n};\n\nhandlers['set-tutorial-seen'] = async function() {\n await asyncStorage.setItem('seen-tutorial', 'true');\n return 'ok';\n};\n\nhandlers['import-budget'] = async function({ filepath, type }) {\n try {\n if (!(await fs.exists(filepath))) {\n throw new Error(`File not found at the provided path: ${filepath}`);\n }\n\n let buffer = Buffer.from(await fs.readFile(filepath, 'binary'));\n\n switch (type) {\n case 'ynab4':\n try {\n await YNAB4.importBuffer(filepath, buffer);\n } catch (e) {\n let msg = e.message.toLowerCase();\n if (\n msg.includes('not a ynab4') ||\n msg.includes('could not find file')\n ) {\n return { error: 'not-ynab4' };\n }\n }\n break;\n case 'ynab5':\n let data;\n try {\n data = JSON.parse(buffer.toString());\n } catch (e) {\n return { error: 'parse-error' };\n }\n\n try {\n await YNAB5.importYNAB5(data);\n } catch (e) {\n return { error: 'not-ynab5' };\n }\n break;\n default:\n }\n } catch (err) {\n err.message = 'Error importing budget: ' + err.message;\n captureException(err);\n return { error: 'internal-error' };\n }\n\n return {};\n};\n\nhandlers['export-budget'] = async function() {\n return await cloudStorage.exportBuffer();\n};\n\nasync function loadBudget(id, appVersion, { showUpdate } = {}) {\n let dir;\n try {\n dir = fs.getBudgetDir(id);\n } catch (e) {\n captureException(\n new Error('`getBudgetDir` failed in `loadBudget`: ' + e.message)\n );\n return { error: 'budget-not-found' };\n }\n\n captureBreadcrumb({ message: 'Loading budget ' + dir });\n\n if (!(await fs.exists(dir))) {\n captureException(new Error('budget directory does not exist'));\n return { error: 'budget-not-found' };\n }\n\n try {\n await prefs.loadPrefs(id);\n await db.openDatabase(id);\n } catch (e) {\n captureBreadcrumb({ message: 'Error loading budget ' + id });\n captureException(e);\n await handlers['close-budget']();\n return { error: 'opening-budget' };\n }\n\n // Older versions didn't tag the file with the current user, so do\n // so now\n if (!prefs.getPrefs().userId) {\n let [[, userId]] = await asyncStorage.multiGet(['user-token']);\n prefs.savePrefs({ userId });\n }\n\n let { budgetVersion, budgetId } = prefs.getPrefs();\n\n try {\n await updateVersion(budgetVersion, showUpdate);\n } catch (e) {\n console.warn('Error updating', e);\n let result;\n if (e.message.includes('out-of-sync-migrations')) {\n result = { error: 'out-of-sync-migrations' };\n } else if (e.message.includes('out-of-sync-data')) {\n result = { error: 'out-of-sync-data' };\n } else {\n captureException(e);\n logger.info('Error updating budget ' + id, e);\n console.log('Error updating budget', e);\n result = { error: 'loading-budget' };\n }\n\n await handlers['close-budget']();\n return result;\n }\n\n await db.loadClock();\n\n if (prefs.getPrefs().resetClock) {\n // If we need to generate a fresh clock, we need to generate a new\n // client id. This happens when the database is transferred to a\n // new device.\n //\n // TODO: The client id should be stored elsewhere. It shouldn't\n // work this way, but it's fine for now.\n timestamp.getClock().timestamp.setNode(timestamp.makeClientId());\n await db.runQuery(\n 'INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)',\n [timestamp.serializeClock(timestamp.getClock())]\n );\n\n await prefs.savePrefs({ resetClock: false });\n }\n\n if (!Platform.isWeb && !Platform.isMobile && !global.__TESTING__) {\n startBackupService(id);\n }\n\n try {\n await sheet.loadSpreadsheet(db, onSheetChange);\n } catch (e) {\n captureException(e);\n await handlers['close-budget']();\n return { error: 'opening-budget' };\n }\n\n // This is a bit leaky, but we need to set the initial budget type\n sheet.get().meta().budgetType = prefs.getPrefs().budgetType;\n await budget.createAllBudgets();\n\n // Load all the in-memory state\n await mappings.loadMappings();\n await rules.loadRules();\n await syncMigrations.listen();\n await app.startServices();\n\n clearUndo();\n\n // Ensure that syncing is enabled\n if (!global.__TESTING__) {\n if (process.env.IS_BETA || id === DEMO_BUDGET_ID) {\n setSyncingMode('disabled');\n } else if (id === TEST_BUDGET_ID) {\n await asyncStorage.setItem('lastBudget', id);\n } else {\n setSyncingMode('enabled');\n\n await asyncStorage.setItem('lastBudget', id);\n\n // Only upload periodically on desktop\n if (!Platform.isMobile) {\n await cloudStorage.possiblyUpload();\n }\n }\n }\n\n app.events.emit('load-budget', { id });\n\n return {};\n}\n\nhandlers['get-upgrade-notifications'] = async function() {\n let { id } = prefs.getPrefs();\n if (id === TEST_BUDGET_ID || id === DEMO_BUDGET_ID) {\n return [];\n }\n\n let types = ['schedules', 'repair-splits'];\n let unseen = [];\n\n for (let type of types) {\n let key = `notifications.${type}`;\n if (prefs.getPrefs()[key] == null) {\n unseen.push(type);\n }\n }\n\n return unseen;\n};\n\nhandlers['seen-upgrade-notification'] = async function({ type }) {\n let key = `notifications.${type}`;\n prefs.savePrefs({ [key]: true });\n};\n\nhandlers['upload-file-web'] = async function({ filename, contents }) {\n if (!Platform.isWeb) {\n return null;\n }\n\n await fs.writeFile('/uploads/' + filename, contents);\n return 'ok';\n};\n\nhandlers['backups-get'] = async function({ id }) {\n return getAvailableBackups(id);\n};\n\nhandlers['backup-load'] = async function({ id, backupId }) {\n await loadBackup(id, backupId);\n};\n\nhandlers['backup-make'] = async function({ id }) {\n await makeBackup(id);\n};\n\nhandlers['get-last-opened-backup'] = async function() {\n const id = await asyncStorage.getItem('lastBudget');\n if (id && id !== '') {\n const budgetDir = fs.getBudgetDir(id);\n\n // We never want to give back a budget that does not exist on the\n // filesystem anymore, so first check that it exists\n if (await fs.exists(budgetDir)) {\n return id;\n }\n }\n return null;\n};\n\nhandlers['app-focused'] = async function() {\n if (prefs.getPrefs() && prefs.getPrefs().id) {\n // First we sync\n fullSync();\n }\n};\n\nhandlers['track'] = async function({ name, props }) {\n tracking.track(name, props);\n};\n\nhandlers = installAPI(handlers);\n\ninjectAPI.send = (name, args) => runHandler(app.handlers[name], args);\n\n// A hack for now until we clean up everything\napp.handlers = handlers;\napp.combine(schedulesApp, budgetApp, notesApp, toolsApp);\n\nfunction getDefaultDocumentDir() {\n if (Platform.isMobile) {\n // On mobile, unfortunately we need to be backwards compatible\n // with the old folder structure which does not store files inside\n // of an `Actual` directory. In the future, if we really care, we\n // can migrate them, but for now just return the documents dir\n return process.env.ACTUAL_DOCUMENT_DIR;\n }\n return fs.join(process.env.ACTUAL_DOCUMENT_DIR, 'Actual');\n}\n\nasync function setupDocumentsDir() {\n async function ensureExists(dir) {\n // Make sure the document folder exists\n if (!(await fs.exists(dir))) {\n await fs.mkdir(dir);\n }\n }\n\n let documentDir = await asyncStorage.getItem('document-dir');\n\n // Test the existing documents directory to make sure it's a valid\n // path that exists, and if it errors fallback to the default one\n if (documentDir) {\n try {\n await ensureExists(documentDir);\n } catch (e) {\n documentDir = null;\n }\n }\n\n if (!documentDir) {\n documentDir = getDefaultDocumentDir();\n }\n\n await ensureExists(documentDir);\n fs._setDocumentDir(documentDir);\n}\n\nexport async function initApp(version, isDev, socketName) {\n VERSION = version;\n\n await sqlite.init();\n await Promise.all([asyncStorage.init(), fs.init()]);\n await tracking.init();\n await setupDocumentsDir();\n\n let keysStr = await asyncStorage.getItem('encrypt-keys');\n if (keysStr) {\n try {\n let keys = JSON.parse(keysStr);\n\n // Load all the keys\n await Promise.all(\n Object.keys(keys).map(fileId => {\n return encryption.loadKey(keys[fileId]);\n })\n );\n } catch (e) {\n console.log('Error loading key', e);\n throw new Error('load-key-error');\n }\n }\n\n if (isDev) {\n const lastBudget = await asyncStorage.getItem('lastBudget');\n // if (lastBudget) {\n // loadBudget(lastBudget, VERSION);\n // }\n }\n\n const url = await asyncStorage.getItem('server-url');\n if (url) {\n setServer(url);\n }\n\n connection.init(socketName, app.handlers);\n\n tracking.track('app:init', {\n platform: Platform.isMobile ? 'mobile' : Platform.isWeb ? 'web' : 'desktop'\n });\n\n if (!isDev && !Platform.isMobile && !Platform.isWeb) {\n let autoUpdate = await asyncStorage.getItem('auto-update');\n process.send({\n type: 'shouldAutoUpdate',\n flag: autoUpdate == null || autoUpdate === 'true'\n });\n }\n\n if (isDev || process.env.IS_BETA) {\n global.$send = (name, args) => runHandler(app.handlers[name], args);\n global.$query = aqlQuery;\n global.$q = q;\n global.$db = db;\n global.$setSyncingMode = setSyncingMode;\n }\n}\n\nexport async function init({ budgetId, config }) {\n // Get from build\n // eslint-disable-next-line\n VERSION = ACTUAL_APP_VERSION;\n\n let dataDir, serverURL;\n if (config) {\n dataDir = config.dataDir;\n serverURL = config.serverURL;\n } else {\n dataDir = process.env.ACTUAL_DATA_DIR;\n serverURL = process.env.ACTUAL_SERVER_URL;\n }\n\n await sqlite.init();\n await Promise.all([asyncStorage.init({ persist: false }), fs.init()]);\n fs._setDocumentDir(dataDir || process.cwd());\n\n if (serverURL) {\n setServer(serverURL);\n } else {\n // This turns off all server URLs. In this mode we don't want any\n // access to the server, we are doing things locally\n setServer(null);\n\n app.events.on('load-budget', () => {\n setSyncingMode('offline');\n });\n }\n\n if (budgetId) {\n await runHandler(handlers['load-budget'], { id: budgetId });\n }\n\n return lib;\n}\n\n// Export a few things required for the platform\nexport const lib = {\n getDataDir: fs.getDataDir,\n sendMessage: (msg, args) => connection.send(msg, args),\n send: async (name, args) => {\n let res = await runHandler(app.handlers[name], args);\n return res;\n },\n on: (name, func) => app.events.on(name, func),\n syncAndReceiveMessages,\n q,\n db,\n\n // Expose CRDT mechanisms so server can use them\n merkle,\n timestamp,\n SyncProtoBuf: SyncPb\n};\n\nif (process.env.NODE_ENV === 'development' && Platform.isWeb) {\n // Support reloading the backend\n self.addEventListener('message', async e => {\n if (e.data.type === '__actual:shutdown') {\n await sheet.waitOnSpreadsheet();\n await app.stopServices();\n await db.closeDatabase();\n asyncStorage.shutdown();\n fs.shutdown();\n\n setTimeout(() => {\n // Give everything else some time to process shutdown events\n self.close();\n }, 100);\n }\n });\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount /*, ...nodes */) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 2; i < arguments.length; i++) {\n walker = insert(this, walker, arguments[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n","'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n","if (typeof BigInt === 'function') exports.default = BigInt;\nelse\n exports.default = function BigIntNotSupported() {\n throw new Error('BigInt is not supported in this environment.');\n };\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar pathModule = require(\"path\");\nvar node_1 = require(\"./node\");\nvar Stats_1 = require(\"./Stats\");\nvar Dirent_1 = require(\"./Dirent\");\nvar buffer_1 = require(\"./internal/buffer\");\nvar setImmediate_1 = require(\"./setImmediate\");\nvar process_1 = require(\"./process\");\nvar setTimeoutUnref_1 = require(\"./setTimeoutUnref\");\nvar stream_1 = require(\"stream\");\nvar constants_1 = require(\"./constants\");\nvar events_1 = require(\"events\");\nvar encoding_1 = require(\"./encoding\");\nvar errors = require(\"./internal/errors\");\nvar util = require(\"util\");\nvar promises_1 = require(\"./promises\");\nvar resolveCrossPlatform = pathModule.resolve;\nvar O_RDONLY = constants_1.constants.O_RDONLY, O_WRONLY = constants_1.constants.O_WRONLY, O_RDWR = constants_1.constants.O_RDWR, O_CREAT = constants_1.constants.O_CREAT, O_EXCL = constants_1.constants.O_EXCL, O_TRUNC = constants_1.constants.O_TRUNC, O_APPEND = constants_1.constants.O_APPEND, O_SYNC = constants_1.constants.O_SYNC, O_DIRECTORY = constants_1.constants.O_DIRECTORY, F_OK = constants_1.constants.F_OK, COPYFILE_EXCL = constants_1.constants.COPYFILE_EXCL, COPYFILE_FICLONE_FORCE = constants_1.constants.COPYFILE_FICLONE_FORCE;\nvar sep;\nvar relative;\nif (pathModule.posix) {\n var posix = pathModule.posix;\n sep = posix.sep;\n relative = posix.relative;\n}\nelse {\n sep = pathModule.sep;\n relative = pathModule.relative;\n}\nvar isWin = process_1.default.platform === 'win32';\nvar kMinPoolSpace = 128;\n// const kMaxLength = require('buffer').kMaxLength;\n// ---------------------------------------- Error messages\n// TODO: Use `internal/errors.js` in the future.\nvar ERRSTR = {\n PATH_STR: 'path must be a string or Buffer',\n // FD: 'file descriptor must be a unsigned 32-bit integer',\n FD: 'fd must be a file descriptor',\n MODE_INT: 'mode must be an int',\n CB: 'callback must be a function',\n UID: 'uid must be an unsigned int',\n GID: 'gid must be an unsigned int',\n LEN: 'len must be an integer',\n ATIME: 'atime must be an integer',\n MTIME: 'mtime must be an integer',\n PREFIX: 'filename prefix is required',\n BUFFER: 'buffer must be an instance of Buffer or StaticBuffer',\n OFFSET: 'offset must be an integer',\n LENGTH: 'length must be an integer',\n POSITION: 'position must be an integer',\n};\nvar ERRSTR_OPTS = function (tipeof) { return \"Expected options to be either an object or a string, but got \" + tipeof + \" instead\"; };\n// const ERRSTR_FLAG = flag => `Unknown file open flag: ${flag}`;\nvar ENOENT = 'ENOENT';\nvar EBADF = 'EBADF';\nvar EINVAL = 'EINVAL';\nvar EPERM = 'EPERM';\nvar EPROTO = 'EPROTO';\nvar EEXIST = 'EEXIST';\nvar ENOTDIR = 'ENOTDIR';\nvar EMFILE = 'EMFILE';\nvar EACCES = 'EACCES';\nvar EISDIR = 'EISDIR';\nvar ENOTEMPTY = 'ENOTEMPTY';\nvar ENOSYS = 'ENOSYS';\nfunction formatError(errorCode, func, path, path2) {\n if (func === void 0) { func = ''; }\n if (path === void 0) { path = ''; }\n if (path2 === void 0) { path2 = ''; }\n var pathFormatted = '';\n if (path)\n pathFormatted = \" '\" + path + \"'\";\n if (path2)\n pathFormatted += \" -> '\" + path2 + \"'\";\n switch (errorCode) {\n case ENOENT:\n return \"ENOENT: no such file or directory, \" + func + pathFormatted;\n case EBADF:\n return \"EBADF: bad file descriptor, \" + func + pathFormatted;\n case EINVAL:\n return \"EINVAL: invalid argument, \" + func + pathFormatted;\n case EPERM:\n return \"EPERM: operation not permitted, \" + func + pathFormatted;\n case EPROTO:\n return \"EPROTO: protocol error, \" + func + pathFormatted;\n case EEXIST:\n return \"EEXIST: file already exists, \" + func + pathFormatted;\n case ENOTDIR:\n return \"ENOTDIR: not a directory, \" + func + pathFormatted;\n case EISDIR:\n return \"EISDIR: illegal operation on a directory, \" + func + pathFormatted;\n case EACCES:\n return \"EACCES: permission denied, \" + func + pathFormatted;\n case ENOTEMPTY:\n return \"ENOTEMPTY: directory not empty, \" + func + pathFormatted;\n case EMFILE:\n return \"EMFILE: too many open files, \" + func + pathFormatted;\n case ENOSYS:\n return \"ENOSYS: function not implemented, \" + func + pathFormatted;\n default:\n return errorCode + \": error occurred, \" + func + pathFormatted;\n }\n}\nfunction createError(errorCode, func, path, path2, Constructor) {\n if (func === void 0) { func = ''; }\n if (path === void 0) { path = ''; }\n if (path2 === void 0) { path2 = ''; }\n if (Constructor === void 0) { Constructor = Error; }\n var error = new Constructor(formatError(errorCode, func, path, path2));\n error.code = errorCode;\n return error;\n}\n// ---------------------------------------- Flags\n// List of file `flags` as defined by Node.\nvar FLAGS;\n(function (FLAGS) {\n // Open file for reading. An exception occurs if the file does not exist.\n FLAGS[FLAGS[\"r\"] = O_RDONLY] = \"r\";\n // Open file for reading and writing. An exception occurs if the file does not exist.\n FLAGS[FLAGS[\"r+\"] = O_RDWR] = \"r+\";\n // Open file for reading in synchronous mode. Instructs the operating system to bypass the local file system cache.\n FLAGS[FLAGS[\"rs\"] = O_RDONLY | O_SYNC] = \"rs\";\n FLAGS[FLAGS[\"sr\"] = FLAGS.rs] = \"sr\";\n // Open file for reading and writing, telling the OS to open it synchronously. See notes for 'rs' about using this with caution.\n FLAGS[FLAGS[\"rs+\"] = O_RDWR | O_SYNC] = \"rs+\";\n FLAGS[FLAGS[\"sr+\"] = FLAGS['rs+']] = \"sr+\";\n // Open file for writing. The file is created (if it does not exist) or truncated (if it exists).\n FLAGS[FLAGS[\"w\"] = O_WRONLY | O_CREAT | O_TRUNC] = \"w\";\n // Like 'w' but fails if path exists.\n FLAGS[FLAGS[\"wx\"] = O_WRONLY | O_CREAT | O_TRUNC | O_EXCL] = \"wx\";\n FLAGS[FLAGS[\"xw\"] = FLAGS.wx] = \"xw\";\n // Open file for reading and writing. The file is created (if it does not exist) or truncated (if it exists).\n FLAGS[FLAGS[\"w+\"] = O_RDWR | O_CREAT | O_TRUNC] = \"w+\";\n // Like 'w+' but fails if path exists.\n FLAGS[FLAGS[\"wx+\"] = O_RDWR | O_CREAT | O_TRUNC | O_EXCL] = \"wx+\";\n FLAGS[FLAGS[\"xw+\"] = FLAGS['wx+']] = \"xw+\";\n // Open file for appending. The file is created if it does not exist.\n FLAGS[FLAGS[\"a\"] = O_WRONLY | O_APPEND | O_CREAT] = \"a\";\n // Like 'a' but fails if path exists.\n FLAGS[FLAGS[\"ax\"] = O_WRONLY | O_APPEND | O_CREAT | O_EXCL] = \"ax\";\n FLAGS[FLAGS[\"xa\"] = FLAGS.ax] = \"xa\";\n // Open file for reading and appending. The file is created if it does not exist.\n FLAGS[FLAGS[\"a+\"] = O_RDWR | O_APPEND | O_CREAT] = \"a+\";\n // Like 'a+' but fails if path exists.\n FLAGS[FLAGS[\"ax+\"] = O_RDWR | O_APPEND | O_CREAT | O_EXCL] = \"ax+\";\n FLAGS[FLAGS[\"xa+\"] = FLAGS['ax+']] = \"xa+\";\n})(FLAGS = exports.FLAGS || (exports.FLAGS = {}));\nfunction flagsToNumber(flags) {\n if (typeof flags === 'number')\n return flags;\n if (typeof flags === 'string') {\n var flagsNum = FLAGS[flags];\n if (typeof flagsNum !== 'undefined')\n return flagsNum;\n }\n // throw new TypeError(formatError(ERRSTR_FLAG(flags)));\n throw new errors.TypeError('ERR_INVALID_OPT_VALUE', 'flags', flags);\n}\nexports.flagsToNumber = flagsToNumber;\n// ---------------------------------------- Options\nfunction getOptions(defaults, options) {\n var opts;\n if (!options)\n return defaults;\n else {\n var tipeof = typeof options;\n switch (tipeof) {\n case 'string':\n opts = Object.assign({}, defaults, { encoding: options });\n break;\n case 'object':\n opts = Object.assign({}, defaults, options);\n break;\n default:\n throw TypeError(ERRSTR_OPTS(tipeof));\n }\n }\n if (opts.encoding !== 'buffer')\n encoding_1.assertEncoding(opts.encoding);\n return opts;\n}\nfunction optsGenerator(defaults) {\n return function (options) { return getOptions(defaults, options); };\n}\nfunction validateCallback(callback) {\n if (typeof callback !== 'function')\n throw TypeError(ERRSTR.CB);\n return callback;\n}\nfunction optsAndCbGenerator(getOpts) {\n return function (options, callback) {\n return typeof options === 'function' ? [getOpts(), options] : [getOpts(options), validateCallback(callback)];\n };\n}\nvar optsDefaults = {\n encoding: 'utf8',\n};\nvar getDefaultOpts = optsGenerator(optsDefaults);\nvar getDefaultOptsAndCb = optsAndCbGenerator(getDefaultOpts);\nvar readFileOptsDefaults = {\n flag: 'r',\n};\nvar getReadFileOptions = optsGenerator(readFileOptsDefaults);\nvar writeFileDefaults = {\n encoding: 'utf8',\n mode: 438 /* DEFAULT */,\n flag: FLAGS[FLAGS.w],\n};\nvar getWriteFileOptions = optsGenerator(writeFileDefaults);\nvar appendFileDefaults = {\n encoding: 'utf8',\n mode: 438 /* DEFAULT */,\n flag: FLAGS[FLAGS.a],\n};\nvar getAppendFileOpts = optsGenerator(appendFileDefaults);\nvar getAppendFileOptsAndCb = optsAndCbGenerator(getAppendFileOpts);\nvar realpathDefaults = optsDefaults;\nvar getRealpathOptions = optsGenerator(realpathDefaults);\nvar getRealpathOptsAndCb = optsAndCbGenerator(getRealpathOptions);\nvar mkdirDefaults = {\n mode: 511 /* DIR */,\n recursive: false,\n};\nvar getMkdirOptions = function (options) {\n if (typeof options === 'number')\n return Object.assign({}, mkdirDefaults, { mode: options });\n return Object.assign({}, mkdirDefaults, options);\n};\nvar rmdirDefaults = {\n recursive: false,\n};\nvar getRmdirOptions = function (options) {\n return Object.assign({}, rmdirDefaults, options);\n};\nvar readdirDefaults = {\n encoding: 'utf8',\n withFileTypes: false,\n};\nvar getReaddirOptions = optsGenerator(readdirDefaults);\nvar getReaddirOptsAndCb = optsAndCbGenerator(getReaddirOptions);\nvar statDefaults = {\n bigint: false,\n};\nvar getStatOptions = function (options) {\n if (options === void 0) { options = {}; }\n return Object.assign({}, statDefaults, options);\n};\nvar getStatOptsAndCb = function (options, callback) {\n return typeof options === 'function' ? [getStatOptions(), options] : [getStatOptions(options), validateCallback(callback)];\n};\n// ---------------------------------------- Utility functions\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n throw new errors.TypeError('ERR_INVALID_FILE_URL_HOST', process_1.default.platform);\n }\n var pathname = url.pathname;\n for (var n = 0; n < pathname.length; n++) {\n if (pathname[n] === '%') {\n var third = pathname.codePointAt(n + 2) | 0x20;\n if (pathname[n + 1] === '2' && third === 102) {\n throw new errors.TypeError('ERR_INVALID_FILE_URL_PATH', 'must not include encoded / characters');\n }\n }\n }\n return decodeURIComponent(pathname);\n}\nfunction pathToFilename(path) {\n if (typeof path !== 'string' && !buffer_1.Buffer.isBuffer(path)) {\n try {\n if (!(path instanceof require('url').URL))\n throw new TypeError(ERRSTR.PATH_STR);\n }\n catch (err) {\n throw new TypeError(ERRSTR.PATH_STR);\n }\n path = getPathFromURLPosix(path);\n }\n var pathString = String(path);\n nullCheck(pathString);\n // return slash(pathString);\n return pathString;\n}\nexports.pathToFilename = pathToFilename;\nvar resolve = function (filename, base) {\n if (base === void 0) { base = process_1.default.cwd(); }\n return resolveCrossPlatform(base, filename);\n};\nif (isWin) {\n var _resolve_1 = resolve;\n var unixify_1 = require('fs-monkey/lib/correctPath').unixify;\n resolve = function (filename, base) { return unixify_1(_resolve_1(filename, base)); };\n}\nfunction filenameToSteps(filename, base) {\n var fullPath = resolve(filename, base);\n var fullPathSansSlash = fullPath.substr(1);\n if (!fullPathSansSlash)\n return [];\n return fullPathSansSlash.split(sep);\n}\nexports.filenameToSteps = filenameToSteps;\nfunction pathToSteps(path) {\n return filenameToSteps(pathToFilename(path));\n}\nexports.pathToSteps = pathToSteps;\nfunction dataToStr(data, encoding) {\n if (encoding === void 0) { encoding = encoding_1.ENCODING_UTF8; }\n if (buffer_1.Buffer.isBuffer(data))\n return data.toString(encoding);\n else if (data instanceof Uint8Array)\n return buffer_1.bufferFrom(data).toString(encoding);\n else\n return String(data);\n}\nexports.dataToStr = dataToStr;\nfunction dataToBuffer(data, encoding) {\n if (encoding === void 0) { encoding = encoding_1.ENCODING_UTF8; }\n if (buffer_1.Buffer.isBuffer(data))\n return data;\n else if (data instanceof Uint8Array)\n return buffer_1.bufferFrom(data);\n else\n return buffer_1.bufferFrom(String(data), encoding);\n}\nexports.dataToBuffer = dataToBuffer;\nfunction bufferToEncoding(buffer, encoding) {\n if (!encoding || encoding === 'buffer')\n return buffer;\n else\n return buffer.toString(encoding);\n}\nexports.bufferToEncoding = bufferToEncoding;\nfunction nullCheck(path, callback) {\n if (('' + path).indexOf('\\u0000') !== -1) {\n var er = new Error('Path must be a string without null bytes');\n er.code = ENOENT;\n if (typeof callback !== 'function')\n throw er;\n process_1.default.nextTick(callback, er);\n return false;\n }\n return true;\n}\nfunction _modeToNumber(mode, def) {\n if (typeof mode === 'number')\n return mode;\n if (typeof mode === 'string')\n return parseInt(mode, 8);\n if (def)\n return modeToNumber(def);\n return undefined;\n}\nfunction modeToNumber(mode, def) {\n var result = _modeToNumber(mode, def);\n if (typeof result !== 'number' || isNaN(result))\n throw new TypeError(ERRSTR.MODE_INT);\n return result;\n}\nfunction isFd(path) {\n return path >>> 0 === path;\n}\nfunction validateFd(fd) {\n if (!isFd(fd))\n throw TypeError(ERRSTR.FD);\n}\n// converts Date or number to a fractional UNIX timestamp\nfunction toUnixTimestamp(time) {\n // tslint:disable-next-line triple-equals\n if (typeof time === 'string' && +time == time) {\n return +time;\n }\n if (time instanceof Date) {\n return time.getTime() / 1000;\n }\n if (isFinite(time)) {\n if (time < 0) {\n return Date.now() / 1000;\n }\n return time;\n }\n throw new Error('Cannot parse time: ' + time);\n}\nexports.toUnixTimestamp = toUnixTimestamp;\nfunction validateUid(uid) {\n if (typeof uid !== 'number')\n throw TypeError(ERRSTR.UID);\n}\nfunction validateGid(gid) {\n if (typeof gid !== 'number')\n throw TypeError(ERRSTR.GID);\n}\n/**\n * `Volume` represents a file system.\n */\nvar Volume = /** @class */ (function () {\n function Volume(props) {\n if (props === void 0) { props = {}; }\n // I-node number counter.\n this.ino = 0;\n // A mapping for i-node numbers to i-nodes (`Node`);\n this.inodes = {};\n // List of released i-node numbers, for reuse.\n this.releasedInos = [];\n // A mapping for file descriptors to `File`s.\n this.fds = {};\n // A list of reusable (opened and closed) file descriptors, that should be\n // used first before creating a new file descriptor.\n this.releasedFds = [];\n // Max number of open files.\n this.maxFiles = 10000;\n // Current number of open files.\n this.openFiles = 0;\n this.promisesApi = promises_1.default(this);\n this.statWatchers = {};\n this.props = Object.assign({ Node: node_1.Node, Link: node_1.Link, File: node_1.File }, props);\n var root = this.createLink();\n root.setNode(this.createNode(true));\n var self = this; // tslint:disable-line no-this-assignment\n this.StatWatcher = /** @class */ (function (_super) {\n __extends(StatWatcher, _super);\n function StatWatcher() {\n return _super.call(this, self) || this;\n }\n return StatWatcher;\n }(StatWatcher));\n var _ReadStream = FsReadStream;\n this.ReadStream = /** @class */ (function (_super) {\n __extends(class_1, _super);\n function class_1() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return _super.apply(this, __spreadArrays([self], args)) || this;\n }\n return class_1;\n }(_ReadStream));\n var _WriteStream = FsWriteStream;\n this.WriteStream = /** @class */ (function (_super) {\n __extends(class_2, _super);\n function class_2() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return _super.apply(this, __spreadArrays([self], args)) || this;\n }\n return class_2;\n }(_WriteStream));\n this.FSWatcher = /** @class */ (function (_super) {\n __extends(FSWatcher, _super);\n function FSWatcher() {\n return _super.call(this, self) || this;\n }\n return FSWatcher;\n }(FSWatcher));\n // root.setChild('.', root);\n // root.getNode().nlink++;\n // root.setChild('..', root);\n // root.getNode().nlink++;\n this.root = root;\n }\n Volume.fromJSON = function (json, cwd) {\n var vol = new Volume();\n vol.fromJSON(json, cwd);\n return vol;\n };\n Object.defineProperty(Volume.prototype, \"promises\", {\n get: function () {\n if (this.promisesApi === null)\n throw new Error('Promise is not supported in this environment.');\n return this.promisesApi;\n },\n enumerable: true,\n configurable: true\n });\n Volume.prototype.createLink = function (parent, name, isDirectory, perm) {\n if (isDirectory === void 0) { isDirectory = false; }\n if (!parent) {\n return new this.props.Link(this, null, '');\n }\n if (!name) {\n throw new Error('createLink: name cannot be empty');\n }\n return parent.createChild(name, this.createNode(isDirectory, perm));\n };\n Volume.prototype.deleteLink = function (link) {\n var parent = link.parent;\n if (parent) {\n parent.deleteChild(link);\n return true;\n }\n return false;\n };\n Volume.prototype.newInoNumber = function () {\n var releasedFd = this.releasedInos.pop();\n if (releasedFd)\n return releasedFd;\n else {\n this.ino = (this.ino + 1) % 0xffffffff;\n return this.ino;\n }\n };\n Volume.prototype.newFdNumber = function () {\n var releasedFd = this.releasedFds.pop();\n return typeof releasedFd === 'number' ? releasedFd : Volume.fd--;\n };\n Volume.prototype.createNode = function (isDirectory, perm) {\n if (isDirectory === void 0) { isDirectory = false; }\n var node = new this.props.Node(this.newInoNumber(), perm);\n if (isDirectory)\n node.setIsDirectory();\n this.inodes[node.ino] = node;\n return node;\n };\n Volume.prototype.getNode = function (ino) {\n return this.inodes[ino];\n };\n Volume.prototype.deleteNode = function (node) {\n node.del();\n delete this.inodes[node.ino];\n this.releasedInos.push(node.ino);\n };\n // Generates 6 character long random string, used by `mkdtemp`.\n Volume.prototype.genRndStr = function () {\n var str = (Math.random() + 1).toString(36).substr(2, 6);\n if (str.length === 6)\n return str;\n else\n return this.genRndStr();\n };\n // Returns a `Link` (hard link) referenced by path \"split\" into steps.\n Volume.prototype.getLink = function (steps) {\n return this.root.walk(steps);\n };\n // Just link `getLink`, but throws a correct user error, if link to found.\n Volume.prototype.getLinkOrThrow = function (filename, funcName) {\n var steps = filenameToSteps(filename);\n var link = this.getLink(steps);\n if (!link)\n throw createError(ENOENT, funcName, filename);\n return link;\n };\n // Just like `getLink`, but also dereference/resolves symbolic links.\n Volume.prototype.getResolvedLink = function (filenameOrSteps) {\n var steps = typeof filenameOrSteps === 'string' ? filenameToSteps(filenameOrSteps) : filenameOrSteps;\n var link = this.root;\n var i = 0;\n while (i < steps.length) {\n var step = steps[i];\n link = link.getChild(step);\n if (!link)\n return null;\n var node = link.getNode();\n if (node.isSymlink()) {\n steps = node.symlink.concat(steps.slice(i + 1));\n link = this.root;\n i = 0;\n continue;\n }\n i++;\n }\n return link;\n };\n // Just like `getLinkOrThrow`, but also dereference/resolves symbolic links.\n Volume.prototype.getResolvedLinkOrThrow = function (filename, funcName) {\n var link = this.getResolvedLink(filename);\n if (!link)\n throw createError(ENOENT, funcName, filename);\n return link;\n };\n Volume.prototype.resolveSymlinks = function (link) {\n // let node: Node = link.getNode();\n // while(link && node.isSymlink()) {\n // link = this.getLink(node.symlink);\n // if(!link) return null;\n // node = link.getNode();\n // }\n // return link;\n return this.getResolvedLink(link.steps.slice(1));\n };\n // Just like `getLinkOrThrow`, but also verifies that the link is a directory.\n Volume.prototype.getLinkAsDirOrThrow = function (filename, funcName) {\n var link = this.getLinkOrThrow(filename, funcName);\n if (!link.getNode().isDirectory())\n throw createError(ENOTDIR, funcName, filename);\n return link;\n };\n // Get the immediate parent directory of the link.\n Volume.prototype.getLinkParent = function (steps) {\n return this.root.walk(steps, steps.length - 1);\n };\n Volume.prototype.getLinkParentAsDirOrThrow = function (filenameOrSteps, funcName) {\n var steps = filenameOrSteps instanceof Array ? filenameOrSteps : filenameToSteps(filenameOrSteps);\n var link = this.getLinkParent(steps);\n if (!link)\n throw createError(ENOENT, funcName, sep + steps.join(sep));\n if (!link.getNode().isDirectory())\n throw createError(ENOTDIR, funcName, sep + steps.join(sep));\n return link;\n };\n Volume.prototype.getFileByFd = function (fd) {\n return this.fds[String(fd)];\n };\n Volume.prototype.getFileByFdOrThrow = function (fd, funcName) {\n if (!isFd(fd))\n throw TypeError(ERRSTR.FD);\n var file = this.getFileByFd(fd);\n if (!file)\n throw createError(EBADF, funcName);\n return file;\n };\n Volume.prototype.getNodeByIdOrCreate = function (id, flags, perm) {\n if (typeof id === 'number') {\n var file = this.getFileByFd(id);\n if (!file)\n throw Error('File nto found');\n return file.node;\n }\n else {\n var steps = pathToSteps(id);\n var link = this.getLink(steps);\n if (link)\n return link.getNode();\n // Try creating a node if not found.\n if (flags & O_CREAT) {\n var dirLink = this.getLinkParent(steps);\n if (dirLink) {\n var name_1 = steps[steps.length - 1];\n link = this.createLink(dirLink, name_1, false, perm);\n return link.getNode();\n }\n }\n throw createError(ENOENT, 'getNodeByIdOrCreate', pathToFilename(id));\n }\n };\n Volume.prototype.wrapAsync = function (method, args, callback) {\n var _this = this;\n validateCallback(callback);\n setImmediate_1.default(function () {\n try {\n callback(null, method.apply(_this, args));\n }\n catch (err) {\n callback(err);\n }\n });\n };\n Volume.prototype._toJSON = function (link, json, path) {\n var _a;\n if (link === void 0) { link = this.root; }\n if (json === void 0) { json = {}; }\n var isEmpty = true;\n var children = link.children;\n if (link.getNode().isFile()) {\n children = (_a = {}, _a[link.getName()] = link.parent.getChild(link.getName()), _a);\n link = link.parent;\n }\n for (var name_2 in children) {\n isEmpty = false;\n var child = link.getChild(name_2);\n if (!child) {\n throw new Error('_toJSON: unexpected undefined');\n }\n var node = child.getNode();\n if (node.isFile()) {\n var filename = child.getPath();\n if (path)\n filename = relative(path, filename);\n json[filename] = node.getString();\n }\n else if (node.isDirectory()) {\n this._toJSON(child, json, path);\n }\n }\n var dirPath = link.getPath();\n if (path)\n dirPath = relative(path, dirPath);\n if (dirPath && isEmpty) {\n json[dirPath] = null;\n }\n return json;\n };\n Volume.prototype.toJSON = function (paths, json, isRelative) {\n if (json === void 0) { json = {}; }\n if (isRelative === void 0) { isRelative = false; }\n var links = [];\n if (paths) {\n if (!(paths instanceof Array))\n paths = [paths];\n for (var _i = 0, paths_1 = paths; _i < paths_1.length; _i++) {\n var path = paths_1[_i];\n var filename = pathToFilename(path);\n var link = this.getResolvedLink(filename);\n if (!link)\n continue;\n links.push(link);\n }\n }\n else {\n links.push(this.root);\n }\n if (!links.length)\n return json;\n for (var _a = 0, links_1 = links; _a < links_1.length; _a++) {\n var link = links_1[_a];\n this._toJSON(link, json, isRelative ? link.getPath() : '');\n }\n return json;\n };\n // fromJSON(json: {[filename: string]: string}, cwd: string = '/') {\n Volume.prototype.fromJSON = function (json, cwd) {\n if (cwd === void 0) { cwd = process_1.default.cwd(); }\n for (var filename in json) {\n var data = json[filename];\n if (typeof data === 'string') {\n filename = resolve(filename, cwd);\n var steps = filenameToSteps(filename);\n if (steps.length > 1) {\n var dirname = sep + steps.slice(0, steps.length - 1).join(sep);\n this.mkdirpBase(dirname, 511 /* DIR */);\n }\n this.writeFileSync(filename, data);\n }\n else {\n this.mkdirpBase(filename, 511 /* DIR */);\n }\n }\n };\n Volume.prototype.reset = function () {\n this.ino = 0;\n this.inodes = {};\n this.releasedInos = [];\n this.fds = {};\n this.releasedFds = [];\n this.openFiles = 0;\n this.root = this.createLink();\n this.root.setNode(this.createNode(true));\n };\n // Legacy interface\n Volume.prototype.mountSync = function (mountpoint, json) {\n this.fromJSON(json, mountpoint);\n };\n Volume.prototype.openLink = function (link, flagsNum, resolveSymlinks) {\n if (resolveSymlinks === void 0) { resolveSymlinks = true; }\n if (this.openFiles >= this.maxFiles) {\n // Too many open files.\n throw createError(EMFILE, 'open', link.getPath());\n }\n // Resolve symlinks.\n var realLink = link;\n if (resolveSymlinks)\n realLink = this.resolveSymlinks(link);\n if (!realLink)\n throw createError(ENOENT, 'open', link.getPath());\n var node = realLink.getNode();\n // Check whether node is a directory\n if (node.isDirectory()) {\n if ((flagsNum & (O_RDONLY | O_RDWR | O_WRONLY)) !== O_RDONLY)\n throw createError(EISDIR, 'open', link.getPath());\n }\n else {\n if (flagsNum & O_DIRECTORY)\n throw createError(ENOTDIR, 'open', link.getPath());\n }\n // Check node permissions\n if (!(flagsNum & O_WRONLY)) {\n if (!node.canRead()) {\n throw createError(EACCES, 'open', link.getPath());\n }\n }\n if (flagsNum & O_RDWR) {\n }\n var file = new this.props.File(link, node, flagsNum, this.newFdNumber());\n this.fds[file.fd] = file;\n this.openFiles++;\n if (flagsNum & O_TRUNC)\n file.truncate();\n return file;\n };\n Volume.prototype.openFile = function (filename, flagsNum, modeNum, resolveSymlinks) {\n if (resolveSymlinks === void 0) { resolveSymlinks = true; }\n var steps = filenameToSteps(filename);\n var link = resolveSymlinks ? this.getResolvedLink(steps) : this.getLink(steps);\n // Try creating a new file, if it does not exist.\n if (!link && flagsNum & O_CREAT) {\n // const dirLink: Link = this.getLinkParent(steps);\n var dirLink = this.getResolvedLink(steps.slice(0, steps.length - 1));\n // if(!dirLink) throw createError(ENOENT, 'open', filename);\n if (!dirLink)\n throw createError(ENOENT, 'open', sep + steps.join(sep));\n if (flagsNum & O_CREAT && typeof modeNum === 'number') {\n link = this.createLink(dirLink, steps[steps.length - 1], false, modeNum);\n }\n }\n if (link)\n return this.openLink(link, flagsNum, resolveSymlinks);\n throw createError(ENOENT, 'open', filename);\n };\n Volume.prototype.openBase = function (filename, flagsNum, modeNum, resolveSymlinks) {\n if (resolveSymlinks === void 0) { resolveSymlinks = true; }\n var file = this.openFile(filename, flagsNum, modeNum, resolveSymlinks);\n if (!file)\n throw createError(ENOENT, 'open', filename);\n return file.fd;\n };\n Volume.prototype.openSync = function (path, flags, mode) {\n if (mode === void 0) { mode = 438 /* DEFAULT */; }\n // Validate (1) mode; (2) path; (3) flags - in that order.\n var modeNum = modeToNumber(mode);\n var fileName = pathToFilename(path);\n var flagsNum = flagsToNumber(flags);\n return this.openBase(fileName, flagsNum, modeNum);\n };\n Volume.prototype.open = function (path, flags, a, b) {\n var mode = a;\n var callback = b;\n if (typeof a === 'function') {\n mode = 438 /* DEFAULT */;\n callback = a;\n }\n mode = mode || 438 /* DEFAULT */;\n var modeNum = modeToNumber(mode);\n var fileName = pathToFilename(path);\n var flagsNum = flagsToNumber(flags);\n this.wrapAsync(this.openBase, [fileName, flagsNum, modeNum], callback);\n };\n Volume.prototype.closeFile = function (file) {\n if (!this.fds[file.fd])\n return;\n this.openFiles--;\n delete this.fds[file.fd];\n this.releasedFds.push(file.fd);\n };\n Volume.prototype.closeSync = function (fd) {\n validateFd(fd);\n var file = this.getFileByFdOrThrow(fd, 'close');\n this.closeFile(file);\n };\n Volume.prototype.close = function (fd, callback) {\n validateFd(fd);\n this.wrapAsync(this.closeSync, [fd], callback);\n };\n Volume.prototype.openFileOrGetById = function (id, flagsNum, modeNum) {\n if (typeof id === 'number') {\n var file = this.fds[id];\n if (!file)\n throw createError(ENOENT);\n return file;\n }\n else {\n return this.openFile(pathToFilename(id), flagsNum, modeNum);\n }\n };\n Volume.prototype.readBase = function (fd, buffer, offset, length, position) {\n var file = this.getFileByFdOrThrow(fd);\n return file.read(buffer, Number(offset), Number(length), position);\n };\n Volume.prototype.readSync = function (fd, buffer, offset, length, position) {\n validateFd(fd);\n return this.readBase(fd, buffer, offset, length, position);\n };\n Volume.prototype.read = function (fd, buffer, offset, length, position, callback) {\n var _this = this;\n validateCallback(callback);\n // This `if` branch is from Node.js\n if (length === 0) {\n return process_1.default.nextTick(function () {\n if (callback)\n callback(null, 0, buffer);\n });\n }\n setImmediate_1.default(function () {\n try {\n var bytes = _this.readBase(fd, buffer, offset, length, position);\n callback(null, bytes, buffer);\n }\n catch (err) {\n callback(err);\n }\n });\n };\n Volume.prototype.readFileBase = function (id, flagsNum, encoding) {\n var result;\n var isUserFd = typeof id === 'number';\n var userOwnsFd = isUserFd && isFd(id);\n var fd;\n if (userOwnsFd)\n fd = id;\n else {\n var filename = pathToFilename(id);\n var steps = filenameToSteps(filename);\n var link = this.getResolvedLink(steps);\n if (link) {\n var node = link.getNode();\n if (node.isDirectory())\n throw createError(EISDIR, 'open', link.getPath());\n }\n fd = this.openSync(id, flagsNum);\n }\n try {\n result = bufferToEncoding(this.getFileByFdOrThrow(fd).getBuffer(), encoding);\n }\n finally {\n if (!userOwnsFd) {\n this.closeSync(fd);\n }\n }\n return result;\n };\n Volume.prototype.readFileSync = function (file, options) {\n var opts = getReadFileOptions(options);\n var flagsNum = flagsToNumber(opts.flag);\n return this.readFileBase(file, flagsNum, opts.encoding);\n };\n Volume.prototype.readFile = function (id, a, b) {\n var _a = optsAndCbGenerator(getReadFileOptions)(a, b), opts = _a[0], callback = _a[1];\n var flagsNum = flagsToNumber(opts.flag);\n this.wrapAsync(this.readFileBase, [id, flagsNum, opts.encoding], callback);\n };\n Volume.prototype.writeBase = function (fd, buf, offset, length, position) {\n var file = this.getFileByFdOrThrow(fd, 'write');\n return file.write(buf, offset, length, position);\n };\n Volume.prototype.writeSync = function (fd, a, b, c, d) {\n validateFd(fd);\n var encoding;\n var offset;\n var length;\n var position;\n var isBuffer = typeof a !== 'string';\n if (isBuffer) {\n offset = (b || 0) | 0;\n length = c;\n position = d;\n }\n else {\n position = b;\n encoding = c;\n }\n var buf = dataToBuffer(a, encoding);\n if (isBuffer) {\n if (typeof length === 'undefined') {\n length = buf.length;\n }\n }\n else {\n offset = 0;\n length = buf.length;\n }\n return this.writeBase(fd, buf, offset, length, position);\n };\n Volume.prototype.write = function (fd, a, b, c, d, e) {\n var _this = this;\n validateFd(fd);\n var offset;\n var length;\n var position;\n var encoding;\n var callback;\n var tipa = typeof a;\n var tipb = typeof b;\n var tipc = typeof c;\n var tipd = typeof d;\n if (tipa !== 'string') {\n if (tipb === 'function') {\n callback = b;\n }\n else if (tipc === 'function') {\n offset = b | 0;\n callback = c;\n }\n else if (tipd === 'function') {\n offset = b | 0;\n length = c;\n callback = d;\n }\n else {\n offset = b | 0;\n length = c;\n position = d;\n callback = e;\n }\n }\n else {\n if (tipb === 'function') {\n callback = b;\n }\n else if (tipc === 'function') {\n position = b;\n callback = c;\n }\n else if (tipd === 'function') {\n position = b;\n encoding = c;\n callback = d;\n }\n }\n var buf = dataToBuffer(a, encoding);\n if (tipa !== 'string') {\n if (typeof length === 'undefined')\n length = buf.length;\n }\n else {\n offset = 0;\n length = buf.length;\n }\n var cb = validateCallback(callback);\n setImmediate_1.default(function () {\n try {\n var bytes = _this.writeBase(fd, buf, offset, length, position);\n if (tipa !== 'string') {\n cb(null, bytes, buf);\n }\n else {\n cb(null, bytes, a);\n }\n }\n catch (err) {\n cb(err);\n }\n });\n };\n Volume.prototype.writeFileBase = function (id, buf, flagsNum, modeNum) {\n // console.log('writeFileBase', id, buf, flagsNum, modeNum);\n // const node = this.getNodeByIdOrCreate(id, flagsNum, modeNum);\n // node.setBuffer(buf);\n var isUserFd = typeof id === 'number';\n var fd;\n if (isUserFd)\n fd = id;\n else {\n fd = this.openBase(pathToFilename(id), flagsNum, modeNum);\n // fd = this.openSync(id as PathLike, flagsNum, modeNum);\n }\n var offset = 0;\n var length = buf.length;\n var position = flagsNum & O_APPEND ? undefined : 0;\n try {\n while (length > 0) {\n var written = this.writeSync(fd, buf, offset, length, position);\n offset += written;\n length -= written;\n if (position !== undefined)\n position += written;\n }\n }\n finally {\n if (!isUserFd)\n this.closeSync(fd);\n }\n };\n Volume.prototype.writeFileSync = function (id, data, options) {\n var opts = getWriteFileOptions(options);\n var flagsNum = flagsToNumber(opts.flag);\n var modeNum = modeToNumber(opts.mode);\n var buf = dataToBuffer(data, opts.encoding);\n this.writeFileBase(id, buf, flagsNum, modeNum);\n };\n Volume.prototype.writeFile = function (id, data, a, b) {\n var options = a;\n var callback = b;\n if (typeof a === 'function') {\n options = writeFileDefaults;\n callback = a;\n }\n var cb = validateCallback(callback);\n var opts = getWriteFileOptions(options);\n var flagsNum = flagsToNumber(opts.flag);\n var modeNum = modeToNumber(opts.mode);\n var buf = dataToBuffer(data, opts.encoding);\n this.wrapAsync(this.writeFileBase, [id, buf, flagsNum, modeNum], cb);\n };\n Volume.prototype.linkBase = function (filename1, filename2) {\n var steps1 = filenameToSteps(filename1);\n var link1 = this.getLink(steps1);\n if (!link1)\n throw createError(ENOENT, 'link', filename1, filename2);\n var steps2 = filenameToSteps(filename2);\n // Check new link directory exists.\n var dir2 = this.getLinkParent(steps2);\n if (!dir2)\n throw createError(ENOENT, 'link', filename1, filename2);\n var name = steps2[steps2.length - 1];\n // Check if new file already exists.\n if (dir2.getChild(name))\n throw createError(EEXIST, 'link', filename1, filename2);\n var node = link1.getNode();\n node.nlink++;\n dir2.createChild(name, node);\n };\n Volume.prototype.copyFileBase = function (src, dest, flags) {\n var buf = this.readFileSync(src);\n if (flags & COPYFILE_EXCL) {\n if (this.existsSync(dest)) {\n throw createError(EEXIST, 'copyFile', src, dest);\n }\n }\n if (flags & COPYFILE_FICLONE_FORCE) {\n throw createError(ENOSYS, 'copyFile', src, dest);\n }\n this.writeFileBase(dest, buf, FLAGS.w, 438 /* DEFAULT */);\n };\n Volume.prototype.copyFileSync = function (src, dest, flags) {\n var srcFilename = pathToFilename(src);\n var destFilename = pathToFilename(dest);\n return this.copyFileBase(srcFilename, destFilename, (flags || 0) | 0);\n };\n Volume.prototype.copyFile = function (src, dest, a, b) {\n var srcFilename = pathToFilename(src);\n var destFilename = pathToFilename(dest);\n var flags;\n var callback;\n if (typeof a === 'function') {\n flags = 0;\n callback = a;\n }\n else {\n flags = a;\n callback = b;\n }\n validateCallback(callback);\n this.wrapAsync(this.copyFileBase, [srcFilename, destFilename, flags], callback);\n };\n Volume.prototype.linkSync = function (existingPath, newPath) {\n var existingPathFilename = pathToFilename(existingPath);\n var newPathFilename = pathToFilename(newPath);\n this.linkBase(existingPathFilename, newPathFilename);\n };\n Volume.prototype.link = function (existingPath, newPath, callback) {\n var existingPathFilename = pathToFilename(existingPath);\n var newPathFilename = pathToFilename(newPath);\n this.wrapAsync(this.linkBase, [existingPathFilename, newPathFilename], callback);\n };\n Volume.prototype.unlinkBase = function (filename) {\n var steps = filenameToSteps(filename);\n var link = this.getLink(steps);\n if (!link)\n throw createError(ENOENT, 'unlink', filename);\n // TODO: Check if it is file, dir, other...\n if (link.length)\n throw Error('Dir not empty...');\n this.deleteLink(link);\n var node = link.getNode();\n node.nlink--;\n // When all hard links to i-node are deleted, remove the i-node, too.\n if (node.nlink <= 0) {\n this.deleteNode(node);\n }\n };\n Volume.prototype.unlinkSync = function (path) {\n var filename = pathToFilename(path);\n this.unlinkBase(filename);\n };\n Volume.prototype.unlink = function (path, callback) {\n var filename = pathToFilename(path);\n this.wrapAsync(this.unlinkBase, [filename], callback);\n };\n Volume.prototype.symlinkBase = function (targetFilename, pathFilename) {\n var pathSteps = filenameToSteps(pathFilename);\n // Check if directory exists, where we about to create a symlink.\n var dirLink = this.getLinkParent(pathSteps);\n if (!dirLink)\n throw createError(ENOENT, 'symlink', targetFilename, pathFilename);\n var name = pathSteps[pathSteps.length - 1];\n // Check if new file already exists.\n if (dirLink.getChild(name))\n throw createError(EEXIST, 'symlink', targetFilename, pathFilename);\n // Create symlink.\n var symlink = dirLink.createChild(name);\n symlink.getNode().makeSymlink(filenameToSteps(targetFilename));\n return symlink;\n };\n // `type` argument works only on Windows.\n Volume.prototype.symlinkSync = function (target, path, type) {\n var targetFilename = pathToFilename(target);\n var pathFilename = pathToFilename(path);\n this.symlinkBase(targetFilename, pathFilename);\n };\n Volume.prototype.symlink = function (target, path, a, b) {\n var callback = validateCallback(typeof a === 'function' ? a : b);\n var targetFilename = pathToFilename(target);\n var pathFilename = pathToFilename(path);\n this.wrapAsync(this.symlinkBase, [targetFilename, pathFilename], callback);\n };\n Volume.prototype.realpathBase = function (filename, encoding) {\n var steps = filenameToSteps(filename);\n var realLink = this.getResolvedLink(steps);\n if (!realLink)\n throw createError(ENOENT, 'realpath', filename);\n return encoding_1.strToEncoding(realLink.getPath(), encoding);\n };\n Volume.prototype.realpathSync = function (path, options) {\n return this.realpathBase(pathToFilename(path), getRealpathOptions(options).encoding);\n };\n Volume.prototype.realpath = function (path, a, b) {\n var _a = getRealpathOptsAndCb(a, b), opts = _a[0], callback = _a[1];\n var pathFilename = pathToFilename(path);\n this.wrapAsync(this.realpathBase, [pathFilename, opts.encoding], callback);\n };\n Volume.prototype.lstatBase = function (filename, bigint) {\n if (bigint === void 0) { bigint = false; }\n var link = this.getLink(filenameToSteps(filename));\n if (!link)\n throw createError(ENOENT, 'lstat', filename);\n return Stats_1.default.build(link.getNode(), bigint);\n };\n Volume.prototype.lstatSync = function (path, options) {\n return this.lstatBase(pathToFilename(path), getStatOptions(options).bigint);\n };\n Volume.prototype.lstat = function (path, a, b) {\n var _a = getStatOptsAndCb(a, b), opts = _a[0], callback = _a[1];\n this.wrapAsync(this.lstatBase, [pathToFilename(path), opts.bigint], callback);\n };\n Volume.prototype.statBase = function (filename, bigint) {\n if (bigint === void 0) { bigint = false; }\n var link = this.getResolvedLink(filenameToSteps(filename));\n if (!link)\n throw createError(ENOENT, 'stat', filename);\n return Stats_1.default.build(link.getNode(), bigint);\n };\n Volume.prototype.statSync = function (path, options) {\n return this.statBase(pathToFilename(path), getStatOptions(options).bigint);\n };\n Volume.prototype.stat = function (path, a, b) {\n var _a = getStatOptsAndCb(a, b), opts = _a[0], callback = _a[1];\n this.wrapAsync(this.statBase, [pathToFilename(path), opts.bigint], callback);\n };\n Volume.prototype.fstatBase = function (fd, bigint) {\n if (bigint === void 0) { bigint = false; }\n var file = this.getFileByFd(fd);\n if (!file)\n throw createError(EBADF, 'fstat');\n return Stats_1.default.build(file.node, bigint);\n };\n Volume.prototype.fstatSync = function (fd, options) {\n return this.fstatBase(fd, getStatOptions(options).bigint);\n };\n Volume.prototype.fstat = function (fd, a, b) {\n var _a = getStatOptsAndCb(a, b), opts = _a[0], callback = _a[1];\n this.wrapAsync(this.fstatBase, [fd, opts.bigint], callback);\n };\n Volume.prototype.renameBase = function (oldPathFilename, newPathFilename) {\n var link = this.getLink(filenameToSteps(oldPathFilename));\n if (!link)\n throw createError(ENOENT, 'rename', oldPathFilename, newPathFilename);\n // TODO: Check if it is directory, if non-empty, we cannot move it, right?\n var newPathSteps = filenameToSteps(newPathFilename);\n // Check directory exists for the new location.\n var newPathDirLink = this.getLinkParent(newPathSteps);\n if (!newPathDirLink)\n throw createError(ENOENT, 'rename', oldPathFilename, newPathFilename);\n // TODO: Also treat cases with directories and symbolic links.\n // TODO: See: http://man7.org/linux/man-pages/man2/rename.2.html\n // Remove hard link from old folder.\n var oldLinkParent = link.parent;\n if (oldLinkParent) {\n oldLinkParent.deleteChild(link);\n }\n // Rename should overwrite the new path, if that exists.\n var name = newPathSteps[newPathSteps.length - 1];\n link.steps = __spreadArrays(newPathDirLink.steps, [name]);\n newPathDirLink.setChild(link.getName(), link);\n };\n Volume.prototype.renameSync = function (oldPath, newPath) {\n var oldPathFilename = pathToFilename(oldPath);\n var newPathFilename = pathToFilename(newPath);\n this.renameBase(oldPathFilename, newPathFilename);\n };\n Volume.prototype.rename = function (oldPath, newPath, callback) {\n var oldPathFilename = pathToFilename(oldPath);\n var newPathFilename = pathToFilename(newPath);\n this.wrapAsync(this.renameBase, [oldPathFilename, newPathFilename], callback);\n };\n Volume.prototype.existsBase = function (filename) {\n return !!this.statBase(filename);\n };\n Volume.prototype.existsSync = function (path) {\n try {\n return this.existsBase(pathToFilename(path));\n }\n catch (err) {\n return false;\n }\n };\n Volume.prototype.exists = function (path, callback) {\n var _this = this;\n var filename = pathToFilename(path);\n if (typeof callback !== 'function')\n throw Error(ERRSTR.CB);\n setImmediate_1.default(function () {\n try {\n callback(_this.existsBase(filename));\n }\n catch (err) {\n callback(false);\n }\n });\n };\n Volume.prototype.accessBase = function (filename, mode) {\n var link = this.getLinkOrThrow(filename, 'access');\n // TODO: Verify permissions\n };\n Volume.prototype.accessSync = function (path, mode) {\n if (mode === void 0) { mode = F_OK; }\n var filename = pathToFilename(path);\n mode = mode | 0;\n this.accessBase(filename, mode);\n };\n Volume.prototype.access = function (path, a, b) {\n var mode = F_OK;\n var callback;\n if (typeof a !== 'function') {\n mode = a | 0; // cast to number\n callback = validateCallback(b);\n }\n else {\n callback = a;\n }\n var filename = pathToFilename(path);\n this.wrapAsync(this.accessBase, [filename, mode], callback);\n };\n Volume.prototype.appendFileSync = function (id, data, options) {\n if (options === void 0) { options = appendFileDefaults; }\n var opts = getAppendFileOpts(options);\n // force append behavior when using a supplied file descriptor\n if (!opts.flag || isFd(id))\n opts.flag = 'a';\n this.writeFileSync(id, data, opts);\n };\n Volume.prototype.appendFile = function (id, data, a, b) {\n var _a = getAppendFileOptsAndCb(a, b), opts = _a[0], callback = _a[1];\n // force append behavior when using a supplied file descriptor\n if (!opts.flag || isFd(id))\n opts.flag = 'a';\n this.writeFile(id, data, opts, callback);\n };\n Volume.prototype.readdirBase = function (filename, options) {\n var steps = filenameToSteps(filename);\n var link = this.getResolvedLink(steps);\n if (!link)\n throw createError(ENOENT, 'readdir', filename);\n var node = link.getNode();\n if (!node.isDirectory())\n throw createError(ENOTDIR, 'scandir', filename);\n if (options.withFileTypes) {\n var list_1 = [];\n for (var name_3 in link.children) {\n var child = link.getChild(name_3);\n if (!child) {\n continue;\n }\n list_1.push(Dirent_1.default.build(child, options.encoding));\n }\n if (!isWin && options.encoding !== 'buffer')\n list_1.sort(function (a, b) {\n if (a.name < b.name)\n return -1;\n if (a.name > b.name)\n return 1;\n return 0;\n });\n return list_1;\n }\n var list = [];\n for (var name_4 in link.children) {\n list.push(encoding_1.strToEncoding(name_4, options.encoding));\n }\n if (!isWin && options.encoding !== 'buffer')\n list.sort();\n return list;\n };\n Volume.prototype.readdirSync = function (path, options) {\n var opts = getReaddirOptions(options);\n var filename = pathToFilename(path);\n return this.readdirBase(filename, opts);\n };\n Volume.prototype.readdir = function (path, a, b) {\n var _a = getReaddirOptsAndCb(a, b), options = _a[0], callback = _a[1];\n var filename = pathToFilename(path);\n this.wrapAsync(this.readdirBase, [filename, options], callback);\n };\n Volume.prototype.readlinkBase = function (filename, encoding) {\n var link = this.getLinkOrThrow(filename, 'readlink');\n var node = link.getNode();\n if (!node.isSymlink())\n throw createError(EINVAL, 'readlink', filename);\n var str = sep + node.symlink.join(sep);\n return encoding_1.strToEncoding(str, encoding);\n };\n Volume.prototype.readlinkSync = function (path, options) {\n var opts = getDefaultOpts(options);\n var filename = pathToFilename(path);\n return this.readlinkBase(filename, opts.encoding);\n };\n Volume.prototype.readlink = function (path, a, b) {\n var _a = getDefaultOptsAndCb(a, b), opts = _a[0], callback = _a[1];\n var filename = pathToFilename(path);\n this.wrapAsync(this.readlinkBase, [filename, opts.encoding], callback);\n };\n Volume.prototype.fsyncBase = function (fd) {\n this.getFileByFdOrThrow(fd, 'fsync');\n };\n Volume.prototype.fsyncSync = function (fd) {\n this.fsyncBase(fd);\n };\n Volume.prototype.fsync = function (fd, callback) {\n this.wrapAsync(this.fsyncBase, [fd], callback);\n };\n Volume.prototype.fdatasyncBase = function (fd) {\n this.getFileByFdOrThrow(fd, 'fdatasync');\n };\n Volume.prototype.fdatasyncSync = function (fd) {\n this.fdatasyncBase(fd);\n };\n Volume.prototype.fdatasync = function (fd, callback) {\n this.wrapAsync(this.fdatasyncBase, [fd], callback);\n };\n Volume.prototype.ftruncateBase = function (fd, len) {\n var file = this.getFileByFdOrThrow(fd, 'ftruncate');\n file.truncate(len);\n };\n Volume.prototype.ftruncateSync = function (fd, len) {\n this.ftruncateBase(fd, len);\n };\n Volume.prototype.ftruncate = function (fd, a, b) {\n var len = typeof a === 'number' ? a : 0;\n var callback = validateCallback(typeof a === 'number' ? b : a);\n this.wrapAsync(this.ftruncateBase, [fd, len], callback);\n };\n Volume.prototype.truncateBase = function (path, len) {\n var fd = this.openSync(path, 'r+');\n try {\n this.ftruncateSync(fd, len);\n }\n finally {\n this.closeSync(fd);\n }\n };\n Volume.prototype.truncateSync = function (id, len) {\n if (isFd(id))\n return this.ftruncateSync(id, len);\n this.truncateBase(id, len);\n };\n Volume.prototype.truncate = function (id, a, b) {\n var len = typeof a === 'number' ? a : 0;\n var callback = validateCallback(typeof a === 'number' ? b : a);\n if (isFd(id))\n return this.ftruncate(id, len, callback);\n this.wrapAsync(this.truncateBase, [id, len], callback);\n };\n Volume.prototype.futimesBase = function (fd, atime, mtime) {\n var file = this.getFileByFdOrThrow(fd, 'futimes');\n var node = file.node;\n node.atime = new Date(atime * 1000);\n node.mtime = new Date(mtime * 1000);\n };\n Volume.prototype.futimesSync = function (fd, atime, mtime) {\n this.futimesBase(fd, toUnixTimestamp(atime), toUnixTimestamp(mtime));\n };\n Volume.prototype.futimes = function (fd, atime, mtime, callback) {\n this.wrapAsync(this.futimesBase, [fd, toUnixTimestamp(atime), toUnixTimestamp(mtime)], callback);\n };\n Volume.prototype.utimesBase = function (filename, atime, mtime) {\n var fd = this.openSync(filename, 'r+');\n try {\n this.futimesBase(fd, atime, mtime);\n }\n finally {\n this.closeSync(fd);\n }\n };\n Volume.prototype.utimesSync = function (path, atime, mtime) {\n this.utimesBase(pathToFilename(path), toUnixTimestamp(atime), toUnixTimestamp(mtime));\n };\n Volume.prototype.utimes = function (path, atime, mtime, callback) {\n this.wrapAsync(this.utimesBase, [pathToFilename(path), toUnixTimestamp(atime), toUnixTimestamp(mtime)], callback);\n };\n Volume.prototype.mkdirBase = function (filename, modeNum) {\n var steps = filenameToSteps(filename);\n // This will throw if user tries to create root dir `fs.mkdirSync('/')`.\n if (!steps.length) {\n throw createError(EISDIR, 'mkdir', filename);\n }\n var dir = this.getLinkParentAsDirOrThrow(filename, 'mkdir');\n // Check path already exists.\n var name = steps[steps.length - 1];\n if (dir.getChild(name))\n throw createError(EEXIST, 'mkdir', filename);\n dir.createChild(name, this.createNode(true, modeNum));\n };\n /**\n * Creates directory tree recursively.\n * @param filename\n * @param modeNum\n */\n Volume.prototype.mkdirpBase = function (filename, modeNum) {\n var steps = filenameToSteps(filename);\n var link = this.root;\n for (var i = 0; i < steps.length; i++) {\n var step = steps[i];\n if (!link.getNode().isDirectory())\n throw createError(ENOTDIR, 'mkdir', link.getPath());\n var child = link.getChild(step);\n if (child) {\n if (child.getNode().isDirectory())\n link = child;\n else\n throw createError(ENOTDIR, 'mkdir', child.getPath());\n }\n else {\n link = link.createChild(step, this.createNode(true, modeNum));\n }\n }\n };\n Volume.prototype.mkdirSync = function (path, options) {\n var opts = getMkdirOptions(options);\n var modeNum = modeToNumber(opts.mode, 511);\n var filename = pathToFilename(path);\n if (opts.recursive)\n this.mkdirpBase(filename, modeNum);\n else\n this.mkdirBase(filename, modeNum);\n };\n Volume.prototype.mkdir = function (path, a, b) {\n var opts = getMkdirOptions(a);\n var callback = validateCallback(typeof a === 'function' ? a : b);\n var modeNum = modeToNumber(opts.mode, 511);\n var filename = pathToFilename(path);\n if (opts.recursive)\n this.wrapAsync(this.mkdirpBase, [filename, modeNum], callback);\n else\n this.wrapAsync(this.mkdirBase, [filename, modeNum], callback);\n };\n // legacy interface\n Volume.prototype.mkdirpSync = function (path, mode) {\n this.mkdirSync(path, { mode: mode, recursive: true });\n };\n Volume.prototype.mkdirp = function (path, a, b) {\n var mode = typeof a === 'function' ? undefined : a;\n var callback = validateCallback(typeof a === 'function' ? a : b);\n this.mkdir(path, { mode: mode, recursive: true }, callback);\n };\n Volume.prototype.mkdtempBase = function (prefix, encoding, retry) {\n if (retry === void 0) { retry = 5; }\n var filename = prefix + this.genRndStr();\n try {\n this.mkdirBase(filename, 511 /* DIR */);\n return encoding_1.strToEncoding(filename, encoding);\n }\n catch (err) {\n if (err.code === EEXIST) {\n if (retry > 1)\n return this.mkdtempBase(prefix, encoding, retry - 1);\n else\n throw Error('Could not create temp dir.');\n }\n else\n throw err;\n }\n };\n Volume.prototype.mkdtempSync = function (prefix, options) {\n var encoding = getDefaultOpts(options).encoding;\n if (!prefix || typeof prefix !== 'string')\n throw new TypeError('filename prefix is required');\n nullCheck(prefix);\n return this.mkdtempBase(prefix, encoding);\n };\n Volume.prototype.mkdtemp = function (prefix, a, b) {\n var _a = getDefaultOptsAndCb(a, b), encoding = _a[0].encoding, callback = _a[1];\n if (!prefix || typeof prefix !== 'string')\n throw new TypeError('filename prefix is required');\n if (!nullCheck(prefix))\n return;\n this.wrapAsync(this.mkdtempBase, [prefix, encoding], callback);\n };\n Volume.prototype.rmdirBase = function (filename, options) {\n var opts = getRmdirOptions(options);\n var link = this.getLinkAsDirOrThrow(filename, 'rmdir');\n // Check directory is empty.\n if (link.length && !opts.recursive)\n throw createError(ENOTEMPTY, 'rmdir', filename);\n this.deleteLink(link);\n };\n Volume.prototype.rmdirSync = function (path, options) {\n this.rmdirBase(pathToFilename(path), options);\n };\n Volume.prototype.rmdir = function (path, a, b) {\n var opts = getRmdirOptions(a);\n var callback = validateCallback(typeof a === 'function' ? a : b);\n this.wrapAsync(this.rmdirBase, [pathToFilename(path), opts], callback);\n };\n Volume.prototype.fchmodBase = function (fd, modeNum) {\n var file = this.getFileByFdOrThrow(fd, 'fchmod');\n file.chmod(modeNum);\n };\n Volume.prototype.fchmodSync = function (fd, mode) {\n this.fchmodBase(fd, modeToNumber(mode));\n };\n Volume.prototype.fchmod = function (fd, mode, callback) {\n this.wrapAsync(this.fchmodBase, [fd, modeToNumber(mode)], callback);\n };\n Volume.prototype.chmodBase = function (filename, modeNum) {\n var fd = this.openSync(filename, 'r+');\n try {\n this.fchmodBase(fd, modeNum);\n }\n finally {\n this.closeSync(fd);\n }\n };\n Volume.prototype.chmodSync = function (path, mode) {\n var modeNum = modeToNumber(mode);\n var filename = pathToFilename(path);\n this.chmodBase(filename, modeNum);\n };\n Volume.prototype.chmod = function (path, mode, callback) {\n var modeNum = modeToNumber(mode);\n var filename = pathToFilename(path);\n this.wrapAsync(this.chmodBase, [filename, modeNum], callback);\n };\n Volume.prototype.lchmodBase = function (filename, modeNum) {\n var fd = this.openBase(filename, O_RDWR, 0, false);\n try {\n this.fchmodBase(fd, modeNum);\n }\n finally {\n this.closeSync(fd);\n }\n };\n Volume.prototype.lchmodSync = function (path, mode) {\n var modeNum = modeToNumber(mode);\n var filename = pathToFilename(path);\n this.lchmodBase(filename, modeNum);\n };\n Volume.prototype.lchmod = function (path, mode, callback) {\n var modeNum = modeToNumber(mode);\n var filename = pathToFilename(path);\n this.wrapAsync(this.lchmodBase, [filename, modeNum], callback);\n };\n Volume.prototype.fchownBase = function (fd, uid, gid) {\n this.getFileByFdOrThrow(fd, 'fchown').chown(uid, gid);\n };\n Volume.prototype.fchownSync = function (fd, uid, gid) {\n validateUid(uid);\n validateGid(gid);\n this.fchownBase(fd, uid, gid);\n };\n Volume.prototype.fchown = function (fd, uid, gid, callback) {\n validateUid(uid);\n validateGid(gid);\n this.wrapAsync(this.fchownBase, [fd, uid, gid], callback);\n };\n Volume.prototype.chownBase = function (filename, uid, gid) {\n var link = this.getResolvedLinkOrThrow(filename, 'chown');\n var node = link.getNode();\n node.chown(uid, gid);\n // if(node.isFile() || node.isSymlink()) {\n //\n // } else if(node.isDirectory()) {\n //\n // } else {\n // TODO: What do we do here?\n // }\n };\n Volume.prototype.chownSync = function (path, uid, gid) {\n validateUid(uid);\n validateGid(gid);\n this.chownBase(pathToFilename(path), uid, gid);\n };\n Volume.prototype.chown = function (path, uid, gid, callback) {\n validateUid(uid);\n validateGid(gid);\n this.wrapAsync(this.chownBase, [pathToFilename(path), uid, gid], callback);\n };\n Volume.prototype.lchownBase = function (filename, uid, gid) {\n this.getLinkOrThrow(filename, 'lchown')\n .getNode()\n .chown(uid, gid);\n };\n Volume.prototype.lchownSync = function (path, uid, gid) {\n validateUid(uid);\n validateGid(gid);\n this.lchownBase(pathToFilename(path), uid, gid);\n };\n Volume.prototype.lchown = function (path, uid, gid, callback) {\n validateUid(uid);\n validateGid(gid);\n this.wrapAsync(this.lchownBase, [pathToFilename(path), uid, gid], callback);\n };\n Volume.prototype.watchFile = function (path, a, b) {\n var filename = pathToFilename(path);\n var options = a;\n var listener = b;\n if (typeof options === 'function') {\n listener = a;\n options = null;\n }\n if (typeof listener !== 'function') {\n throw Error('\"watchFile()\" requires a listener function');\n }\n var interval = 5007;\n var persistent = true;\n if (options && typeof options === 'object') {\n if (typeof options.interval === 'number')\n interval = options.interval;\n if (typeof options.persistent === 'boolean')\n persistent = options.persistent;\n }\n var watcher = this.statWatchers[filename];\n if (!watcher) {\n watcher = new this.StatWatcher();\n watcher.start(filename, persistent, interval);\n this.statWatchers[filename] = watcher;\n }\n watcher.addListener('change', listener);\n return watcher;\n };\n Volume.prototype.unwatchFile = function (path, listener) {\n var filename = pathToFilename(path);\n var watcher = this.statWatchers[filename];\n if (!watcher)\n return;\n if (typeof listener === 'function') {\n watcher.removeListener('change', listener);\n }\n else {\n watcher.removeAllListeners('change');\n }\n if (watcher.listenerCount('change') === 0) {\n watcher.stop();\n delete this.statWatchers[filename];\n }\n };\n Volume.prototype.createReadStream = function (path, options) {\n return new this.ReadStream(path, options);\n };\n Volume.prototype.createWriteStream = function (path, options) {\n return new this.WriteStream(path, options);\n };\n // watch(path: PathLike): FSWatcher;\n // watch(path: PathLike, options?: IWatchOptions | string): FSWatcher;\n Volume.prototype.watch = function (path, options, listener) {\n var filename = pathToFilename(path);\n var givenOptions = options;\n if (typeof options === 'function') {\n listener = options;\n givenOptions = null;\n }\n // tslint:disable-next-line prefer-const\n var _a = getDefaultOpts(givenOptions), persistent = _a.persistent, recursive = _a.recursive, encoding = _a.encoding;\n if (persistent === undefined)\n persistent = true;\n if (recursive === undefined)\n recursive = false;\n var watcher = new this.FSWatcher();\n watcher.start(filename, persistent, recursive, encoding);\n if (listener) {\n watcher.addListener('change', listener);\n }\n return watcher;\n };\n /**\n * Global file descriptor counter. UNIX file descriptors start from 0 and go sequentially\n * up, so here, in order not to conflict with them, we choose some big number and descrease\n * the file descriptor of every new opened file.\n * @type {number}\n * @todo This should not be static, right?\n */\n Volume.fd = 0x7fffffff;\n return Volume;\n}());\nexports.Volume = Volume;\nfunction emitStop(self) {\n self.emit('stop');\n}\nvar StatWatcher = /** @class */ (function (_super) {\n __extends(StatWatcher, _super);\n function StatWatcher(vol) {\n var _this = _super.call(this) || this;\n _this.onInterval = function () {\n try {\n var stats = _this.vol.statSync(_this.filename);\n if (_this.hasChanged(stats)) {\n _this.emit('change', stats, _this.prev);\n _this.prev = stats;\n }\n }\n finally {\n _this.loop();\n }\n };\n _this.vol = vol;\n return _this;\n }\n StatWatcher.prototype.loop = function () {\n this.timeoutRef = this.setTimeout(this.onInterval, this.interval);\n };\n StatWatcher.prototype.hasChanged = function (stats) {\n // if(!this.prev) return false;\n if (stats.mtimeMs > this.prev.mtimeMs)\n return true;\n if (stats.nlink !== this.prev.nlink)\n return true;\n return false;\n };\n StatWatcher.prototype.start = function (path, persistent, interval) {\n if (persistent === void 0) { persistent = true; }\n if (interval === void 0) { interval = 5007; }\n this.filename = pathToFilename(path);\n this.setTimeout = persistent ? setTimeout : setTimeoutUnref_1.default;\n this.interval = interval;\n this.prev = this.vol.statSync(this.filename);\n this.loop();\n };\n StatWatcher.prototype.stop = function () {\n clearTimeout(this.timeoutRef);\n process_1.default.nextTick(emitStop, this);\n };\n return StatWatcher;\n}(events_1.EventEmitter));\nexports.StatWatcher = StatWatcher;\nvar pool;\nfunction allocNewPool(poolSize) {\n pool = buffer_1.bufferAllocUnsafe(poolSize);\n pool.used = 0;\n}\nutil.inherits(FsReadStream, stream_1.Readable);\nexports.ReadStream = FsReadStream;\nfunction FsReadStream(vol, path, options) {\n if (!(this instanceof FsReadStream))\n return new FsReadStream(vol, path, options);\n this._vol = vol;\n // a little bit bigger buffer and water marks by default\n options = Object.assign({}, getOptions(options, {}));\n if (options.highWaterMark === undefined)\n options.highWaterMark = 64 * 1024;\n stream_1.Readable.call(this, options);\n this.path = pathToFilename(path);\n this.fd = options.fd === undefined ? null : options.fd;\n this.flags = options.flags === undefined ? 'r' : options.flags;\n this.mode = options.mode === undefined ? 438 : options.mode;\n this.start = options.start;\n this.end = options.end;\n this.autoClose = options.autoClose === undefined ? true : options.autoClose;\n this.pos = undefined;\n this.bytesRead = 0;\n if (this.start !== undefined) {\n if (typeof this.start !== 'number') {\n throw new TypeError('\"start\" option must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n }\n else if (typeof this.end !== 'number') {\n throw new TypeError('\"end\" option must be a Number');\n }\n if (this.start > this.end) {\n throw new Error('\"start\" option must be <= \"end\" option');\n }\n this.pos = this.start;\n }\n if (typeof this.fd !== 'number')\n this.open();\n this.on('end', function () {\n if (this.autoClose) {\n if (this.destroy)\n this.destroy();\n }\n });\n}\nFsReadStream.prototype.open = function () {\n var self = this; // tslint:disable-line no-this-assignment\n this._vol.open(this.path, this.flags, this.mode, function (er, fd) {\n if (er) {\n if (self.autoClose) {\n if (self.destroy)\n self.destroy();\n }\n self.emit('error', er);\n return;\n }\n self.fd = fd;\n self.emit('open', fd);\n // start the flow of data.\n self.read();\n });\n};\nFsReadStream.prototype._read = function (n) {\n if (typeof this.fd !== 'number') {\n return this.once('open', function () {\n this._read(n);\n });\n }\n if (this.destroyed)\n return;\n if (!pool || pool.length - pool.used < kMinPoolSpace) {\n // discard the old pool.\n allocNewPool(this._readableState.highWaterMark);\n }\n // Grab another reference to the pool in the case that while we're\n // in the thread pool another read() finishes up the pool, and\n // allocates a new one.\n var thisPool = pool;\n var toRead = Math.min(pool.length - pool.used, n);\n var start = pool.used;\n if (this.pos !== undefined)\n toRead = Math.min(this.end - this.pos + 1, toRead);\n // already read everything we were supposed to read!\n // treat as EOF.\n if (toRead <= 0)\n return this.push(null);\n // the actual read.\n var self = this; // tslint:disable-line no-this-assignment\n this._vol.read(this.fd, pool, pool.used, toRead, this.pos, onread);\n // move the pool positions, and internal position for reading.\n if (this.pos !== undefined)\n this.pos += toRead;\n pool.used += toRead;\n function onread(er, bytesRead) {\n if (er) {\n if (self.autoClose && self.destroy) {\n self.destroy();\n }\n self.emit('error', er);\n }\n else {\n var b = null;\n if (bytesRead > 0) {\n self.bytesRead += bytesRead;\n b = thisPool.slice(start, start + bytesRead);\n }\n self.push(b);\n }\n }\n};\nFsReadStream.prototype._destroy = function (err, cb) {\n this.close(function (err2) {\n cb(err || err2);\n });\n};\nFsReadStream.prototype.close = function (cb) {\n var _this = this;\n if (cb)\n this.once('close', cb);\n if (this.closed || typeof this.fd !== 'number') {\n if (typeof this.fd !== 'number') {\n this.once('open', closeOnOpen);\n return;\n }\n return process_1.default.nextTick(function () { return _this.emit('close'); });\n }\n this.closed = true;\n this._vol.close(this.fd, function (er) {\n if (er)\n _this.emit('error', er);\n else\n _this.emit('close');\n });\n this.fd = null;\n};\n// needed because as it will be called with arguments\n// that does not match this.close() signature\nfunction closeOnOpen(fd) {\n this.close();\n}\nutil.inherits(FsWriteStream, stream_1.Writable);\nexports.WriteStream = FsWriteStream;\nfunction FsWriteStream(vol, path, options) {\n if (!(this instanceof FsWriteStream))\n return new FsWriteStream(vol, path, options);\n this._vol = vol;\n options = Object.assign({}, getOptions(options, {}));\n stream_1.Writable.call(this, options);\n this.path = pathToFilename(path);\n this.fd = options.fd === undefined ? null : options.fd;\n this.flags = options.flags === undefined ? 'w' : options.flags;\n this.mode = options.mode === undefined ? 438 : options.mode;\n this.start = options.start;\n this.autoClose = options.autoClose === undefined ? true : !!options.autoClose;\n this.pos = undefined;\n this.bytesWritten = 0;\n if (this.start !== undefined) {\n if (typeof this.start !== 'number') {\n throw new TypeError('\"start\" option must be a Number');\n }\n if (this.start < 0) {\n throw new Error('\"start\" must be >= zero');\n }\n this.pos = this.start;\n }\n if (options.encoding)\n this.setDefaultEncoding(options.encoding);\n if (typeof this.fd !== 'number')\n this.open();\n // dispose on finish.\n this.once('finish', function () {\n if (this.autoClose) {\n this.close();\n }\n });\n}\nFsWriteStream.prototype.open = function () {\n this._vol.open(this.path, this.flags, this.mode, function (er, fd) {\n if (er) {\n if (this.autoClose && this.destroy) {\n this.destroy();\n }\n this.emit('error', er);\n return;\n }\n this.fd = fd;\n this.emit('open', fd);\n }.bind(this));\n};\nFsWriteStream.prototype._write = function (data, encoding, cb) {\n if (!(data instanceof buffer_1.Buffer))\n return this.emit('error', new Error('Invalid data'));\n if (typeof this.fd !== 'number') {\n return this.once('open', function () {\n this._write(data, encoding, cb);\n });\n }\n var self = this; // tslint:disable-line no-this-assignment\n this._vol.write(this.fd, data, 0, data.length, this.pos, function (er, bytes) {\n if (er) {\n if (self.autoClose && self.destroy) {\n self.destroy();\n }\n return cb(er);\n }\n self.bytesWritten += bytes;\n cb();\n });\n if (this.pos !== undefined)\n this.pos += data.length;\n};\nFsWriteStream.prototype._writev = function (data, cb) {\n if (typeof this.fd !== 'number') {\n return this.once('open', function () {\n this._writev(data, cb);\n });\n }\n var self = this; // tslint:disable-line no-this-assignment\n var len = data.length;\n var chunks = new Array(len);\n var size = 0;\n for (var i = 0; i < len; i++) {\n var chunk = data[i].chunk;\n chunks[i] = chunk;\n size += chunk.length;\n }\n var buf = buffer_1.Buffer.concat(chunks);\n this._vol.write(this.fd, buf, 0, buf.length, this.pos, function (er, bytes) {\n if (er) {\n if (self.destroy)\n self.destroy();\n return cb(er);\n }\n self.bytesWritten += bytes;\n cb();\n });\n if (this.pos !== undefined)\n this.pos += size;\n};\nFsWriteStream.prototype._destroy = FsReadStream.prototype._destroy;\nFsWriteStream.prototype.close = FsReadStream.prototype.close;\n// There is no shutdown() for files.\nFsWriteStream.prototype.destroySoon = FsWriteStream.prototype.end;\n// ---------------------------------------- FSWatcher\nvar FSWatcher = /** @class */ (function (_super) {\n __extends(FSWatcher, _super);\n function FSWatcher(vol) {\n var _this = _super.call(this) || this;\n _this._filename = '';\n _this._filenameEncoded = '';\n // _persistent: boolean = true;\n _this._recursive = false;\n _this._encoding = encoding_1.ENCODING_UTF8;\n _this._onNodeChange = function () {\n _this._emit('change');\n };\n _this._onParentChild = function (link) {\n if (link.getName() === _this._getName()) {\n _this._emit('rename');\n }\n };\n _this._emit = function (type) {\n _this.emit('change', type, _this._filenameEncoded);\n };\n _this._persist = function () {\n _this._timer = setTimeout(_this._persist, 1e6);\n };\n _this._vol = vol;\n return _this;\n // TODO: Emit \"error\" messages when watching.\n // this._handle.onchange = function(status, eventType, filename) {\n // if (status < 0) {\n // self._handle.close();\n // const error = !filename ?\n // errnoException(status, 'Error watching file for changes:') :\n // errnoException(status, `Error watching file ${filename} for changes:`);\n // error.filename = filename;\n // self.emit('error', error);\n // } else {\n // self.emit('change', eventType, filename);\n // }\n // };\n }\n FSWatcher.prototype._getName = function () {\n return this._steps[this._steps.length - 1];\n };\n FSWatcher.prototype.start = function (path, persistent, recursive, encoding) {\n if (persistent === void 0) { persistent = true; }\n if (recursive === void 0) { recursive = false; }\n if (encoding === void 0) { encoding = encoding_1.ENCODING_UTF8; }\n this._filename = pathToFilename(path);\n this._steps = filenameToSteps(this._filename);\n this._filenameEncoded = encoding_1.strToEncoding(this._filename);\n // this._persistent = persistent;\n this._recursive = recursive;\n this._encoding = encoding;\n try {\n this._link = this._vol.getLinkOrThrow(this._filename, 'FSWatcher');\n }\n catch (err) {\n var error = new Error(\"watch \" + this._filename + \" \" + err.code);\n error.code = err.code;\n error.errno = err.code;\n throw error;\n }\n this._link.getNode().on('change', this._onNodeChange);\n this._link.on('child:add', this._onNodeChange);\n this._link.on('child:delete', this._onNodeChange);\n var parent = this._link.parent;\n if (parent) {\n // parent.on('child:add', this._onParentChild);\n parent.setMaxListeners(parent.getMaxListeners() + 1);\n parent.on('child:delete', this._onParentChild);\n }\n if (persistent)\n this._persist();\n };\n FSWatcher.prototype.close = function () {\n clearTimeout(this._timer);\n this._link.getNode().removeListener('change', this._onNodeChange);\n var parent = this._link.parent;\n if (parent) {\n // parent.removeListener('child:add', this._onParentChild);\n parent.removeListener('child:delete', this._onParentChild);\n }\n };\n return FSWatcher;\n}(events_1.EventEmitter));\nexports.FSWatcher = FSWatcher;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar process_1 = require(\"./process\");\nvar buffer_1 = require(\"./internal/buffer\");\nvar constants_1 = require(\"./constants\");\nvar events_1 = require(\"events\");\nvar Stats_1 = require(\"./Stats\");\nvar S_IFMT = constants_1.constants.S_IFMT, S_IFDIR = constants_1.constants.S_IFDIR, S_IFREG = constants_1.constants.S_IFREG, S_IFLNK = constants_1.constants.S_IFLNK, O_APPEND = constants_1.constants.O_APPEND;\nexports.SEP = '/';\n/**\n * Node in a file system (like i-node, v-node).\n */\nvar Node = /** @class */ (function (_super) {\n __extends(Node, _super);\n function Node(ino, perm) {\n if (perm === void 0) { perm = 438; }\n var _this = _super.call(this) || this;\n // User ID and group ID.\n _this.uid = process_1.default.getuid();\n _this.gid = process_1.default.getgid();\n _this.atime = new Date();\n _this.mtime = new Date();\n _this.ctime = new Date();\n _this.perm = 438; // Permissions `chmod`, `fchmod`\n _this.mode = S_IFREG; // S_IFDIR, S_IFREG, etc.. (file by default?)\n // Number of hard links pointing at this Node.\n _this.nlink = 1;\n _this.perm = perm;\n _this.mode |= perm;\n _this.ino = ino;\n return _this;\n }\n Node.prototype.getString = function (encoding) {\n if (encoding === void 0) { encoding = 'utf8'; }\n return this.getBuffer().toString(encoding);\n };\n Node.prototype.setString = function (str) {\n // this.setBuffer(bufferFrom(str, 'utf8'));\n this.buf = buffer_1.bufferFrom(str, 'utf8');\n this.touch();\n };\n Node.prototype.getBuffer = function () {\n if (!this.buf)\n this.setBuffer(buffer_1.bufferAllocUnsafe(0));\n return buffer_1.bufferFrom(this.buf); // Return a copy.\n };\n Node.prototype.setBuffer = function (buf) {\n this.buf = buffer_1.bufferFrom(buf); // Creates a copy of data.\n this.touch();\n };\n Node.prototype.getSize = function () {\n return this.buf ? this.buf.length : 0;\n };\n Node.prototype.setModeProperty = function (property) {\n this.mode = (this.mode & ~S_IFMT) | property;\n };\n Node.prototype.setIsFile = function () {\n this.setModeProperty(S_IFREG);\n };\n Node.prototype.setIsDirectory = function () {\n this.setModeProperty(S_IFDIR);\n };\n Node.prototype.setIsSymlink = function () {\n this.setModeProperty(S_IFLNK);\n };\n Node.prototype.isFile = function () {\n return (this.mode & S_IFMT) === S_IFREG;\n };\n Node.prototype.isDirectory = function () {\n return (this.mode & S_IFMT) === S_IFDIR;\n };\n Node.prototype.isSymlink = function () {\n // return !!this.symlink;\n return (this.mode & S_IFMT) === S_IFLNK;\n };\n Node.prototype.makeSymlink = function (steps) {\n this.symlink = steps;\n this.setIsSymlink();\n };\n Node.prototype.write = function (buf, off, len, pos) {\n if (off === void 0) { off = 0; }\n if (len === void 0) { len = buf.length; }\n if (pos === void 0) { pos = 0; }\n if (!this.buf)\n this.buf = buffer_1.bufferAllocUnsafe(0);\n if (pos + len > this.buf.length) {\n var newBuf = buffer_1.bufferAllocUnsafe(pos + len);\n this.buf.copy(newBuf, 0, 0, this.buf.length);\n this.buf = newBuf;\n }\n buf.copy(this.buf, pos, off, off + len);\n this.touch();\n return len;\n };\n // Returns the number of bytes read.\n Node.prototype.read = function (buf, off, len, pos) {\n if (off === void 0) { off = 0; }\n if (len === void 0) { len = buf.byteLength; }\n if (pos === void 0) { pos = 0; }\n if (!this.buf)\n this.buf = buffer_1.bufferAllocUnsafe(0);\n var actualLen = len;\n if (actualLen > buf.byteLength) {\n actualLen = buf.byteLength;\n }\n if (actualLen + pos > this.buf.length) {\n actualLen = this.buf.length - pos;\n }\n this.buf.copy(buf, off, pos, pos + actualLen);\n return actualLen;\n };\n Node.prototype.truncate = function (len) {\n if (len === void 0) { len = 0; }\n if (!len)\n this.buf = buffer_1.bufferAllocUnsafe(0);\n else {\n if (!this.buf)\n this.buf = buffer_1.bufferAllocUnsafe(0);\n if (len <= this.buf.length) {\n this.buf = this.buf.slice(0, len);\n }\n else {\n var buf = buffer_1.bufferAllocUnsafe(0);\n this.buf.copy(buf);\n buf.fill(0, len);\n }\n }\n this.touch();\n };\n Node.prototype.chmod = function (perm) {\n this.perm = perm;\n this.mode = (this.mode & ~511) | perm;\n this.touch();\n };\n Node.prototype.chown = function (uid, gid) {\n this.uid = uid;\n this.gid = gid;\n this.touch();\n };\n Node.prototype.touch = function () {\n this.mtime = new Date();\n this.emit('change', this);\n };\n Node.prototype.canRead = function (uid, gid) {\n if (uid === void 0) { uid = process_1.default.getuid(); }\n if (gid === void 0) { gid = process_1.default.getgid(); }\n if (this.perm & 4 /* IROTH */) {\n return true;\n }\n if (gid === this.gid) {\n if (this.perm & 32 /* IRGRP */) {\n return true;\n }\n }\n if (uid === this.uid) {\n if (this.perm & 256 /* IRUSR */) {\n return true;\n }\n }\n return false;\n };\n Node.prototype.canWrite = function (uid, gid) {\n if (uid === void 0) { uid = process_1.default.getuid(); }\n if (gid === void 0) { gid = process_1.default.getgid(); }\n if (this.perm & 2 /* IWOTH */) {\n return true;\n }\n if (gid === this.gid) {\n if (this.perm & 16 /* IWGRP */) {\n return true;\n }\n }\n if (uid === this.uid) {\n if (this.perm & 128 /* IWUSR */) {\n return true;\n }\n }\n return false;\n };\n Node.prototype.del = function () {\n this.emit('delete', this);\n };\n Node.prototype.toJSON = function () {\n return {\n ino: this.ino,\n uid: this.uid,\n gid: this.gid,\n atime: this.atime.getTime(),\n mtime: this.mtime.getTime(),\n ctime: this.ctime.getTime(),\n perm: this.perm,\n mode: this.mode,\n nlink: this.nlink,\n symlink: this.symlink,\n data: this.getString(),\n };\n };\n return Node;\n}(events_1.EventEmitter));\nexports.Node = Node;\n/**\n * Represents a hard link that points to an i-node `node`.\n */\nvar Link = /** @class */ (function (_super) {\n __extends(Link, _super);\n function Link(vol, parent, name) {\n var _this = _super.call(this) || this;\n _this.children = {};\n // Path to this node as Array: ['usr', 'bin', 'node'].\n _this.steps = [];\n // \"i-node\" number of the node.\n _this.ino = 0;\n // Number of children.\n _this.length = 0;\n _this.vol = vol;\n _this.parent = parent;\n _this.steps = parent ? parent.steps.concat([name]) : [name];\n return _this;\n }\n Link.prototype.setNode = function (node) {\n this.node = node;\n this.ino = node.ino;\n };\n Link.prototype.getNode = function () {\n return this.node;\n };\n Link.prototype.createChild = function (name, node) {\n if (node === void 0) { node = this.vol.createNode(); }\n var link = new Link(this.vol, this, name);\n link.setNode(node);\n if (node.isDirectory()) {\n // link.setChild('.', link);\n // link.getNode().nlink++;\n // link.setChild('..', this);\n // this.getNode().nlink++;\n }\n this.setChild(name, link);\n return link;\n };\n Link.prototype.setChild = function (name, link) {\n if (link === void 0) { link = new Link(this.vol, this, name); }\n this.children[name] = link;\n link.parent = this;\n this.length++;\n this.emit('child:add', link, this);\n return link;\n };\n Link.prototype.deleteChild = function (link) {\n delete this.children[link.getName()];\n this.length--;\n this.emit('child:delete', link, this);\n };\n Link.prototype.getChild = function (name) {\n if (Object.hasOwnProperty.call(this.children, name)) {\n return this.children[name];\n }\n };\n Link.prototype.getPath = function () {\n return this.steps.join(exports.SEP);\n };\n Link.prototype.getName = function () {\n return this.steps[this.steps.length - 1];\n };\n // del() {\n // const parent = this.parent;\n // if(parent) {\n // parent.deleteChild(link);\n // }\n // this.parent = null;\n // this.vol = null;\n // }\n /**\n * Walk the tree path and return the `Link` at that location, if any.\n * @param steps {string[]} Desired location.\n * @param stop {number} Max steps to go into.\n * @param i {number} Current step in the `steps` array.\n *\n * @return {Link|null}\n */\n Link.prototype.walk = function (steps, stop, i) {\n if (stop === void 0) { stop = steps.length; }\n if (i === void 0) { i = 0; }\n if (i >= steps.length)\n return this;\n if (i >= stop)\n return this;\n var step = steps[i];\n var link = this.getChild(step);\n if (!link)\n return null;\n return link.walk(steps, stop, i + 1);\n };\n Link.prototype.toJSON = function () {\n return {\n steps: this.steps,\n ino: this.ino,\n children: Object.keys(this.children),\n };\n };\n return Link;\n}(events_1.EventEmitter));\nexports.Link = Link;\n/**\n * Represents an open file (file descriptor) that points to a `Link` (Hard-link) and a `Node`.\n */\nvar File = /** @class */ (function () {\n /**\n * Open a Link-Node pair. `node` is provided separately as that might be a different node\n * rather the one `link` points to, because it might be a symlink.\n * @param link\n * @param node\n * @param flags\n * @param fd\n */\n function File(link, node, flags, fd) {\n /**\n * A cursor/offset position in a file, where data will be written on write.\n * User can \"seek\" this position.\n */\n this.position = 0;\n this.link = link;\n this.node = node;\n this.flags = flags;\n this.fd = fd;\n }\n File.prototype.getString = function (encoding) {\n if (encoding === void 0) { encoding = 'utf8'; }\n return this.node.getString();\n };\n File.prototype.setString = function (str) {\n this.node.setString(str);\n };\n File.prototype.getBuffer = function () {\n return this.node.getBuffer();\n };\n File.prototype.setBuffer = function (buf) {\n this.node.setBuffer(buf);\n };\n File.prototype.getSize = function () {\n return this.node.getSize();\n };\n File.prototype.truncate = function (len) {\n this.node.truncate(len);\n };\n File.prototype.seekTo = function (position) {\n this.position = position;\n };\n File.prototype.stats = function () {\n return Stats_1.default.build(this.node);\n };\n File.prototype.write = function (buf, offset, length, position) {\n if (offset === void 0) { offset = 0; }\n if (length === void 0) { length = buf.length; }\n if (typeof position !== 'number')\n position = this.position;\n if (this.flags & O_APPEND)\n position = this.getSize();\n var bytes = this.node.write(buf, offset, length, position);\n this.position = position + bytes;\n return bytes;\n };\n File.prototype.read = function (buf, offset, length, position) {\n if (offset === void 0) { offset = 0; }\n if (length === void 0) { length = buf.byteLength; }\n if (typeof position !== 'number')\n position = this.position;\n var bytes = this.node.read(buf, offset, length, position);\n this.position = position + bytes;\n return bytes;\n };\n File.prototype.chmod = function (perm) {\n this.node.chmod(perm);\n };\n File.prototype.chown = function (uid, gid) {\n this.node.chown(uid, gid);\n };\n return File;\n}());\nexports.File = File;\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a